- From: Joe Berkovitz <joe@noteflight.com>
- Date: Fri, 3 Mar 2017 12:52:46 -0500
- To: Raymond Toy <rtoy@google.com>
- Cc: Audio Working Group <public-audio@w3.org>
- Message-ID: <CA+ojG-b+eU49dBdhrRj6vhyvXNe5_PKE8rhzbZWfBwZkLZ00jw@mail.gmail.com>
Here are a couple of results gleaned from looking at documentation that I could find on the Web. They all relate to sampler-based musical synthesizers so they do not really reflect the use cases driving (2), but it's still useful to know: Apple Logic X Pro (one of the most popular DAWs): loops are ignored when "Reverse" option is selected on an instrument zone (verified by trying it) Max/MSP (probably the most popular scriptable/wirable sound environment): loops are ignored with negative playback rate ( https://docs.cycling74.com/max5/tutorials/msp-tut/mspchapter14.html) If anyone knows how the Ableton Live or Native Instruments/Kontakt samplers handle this, it would be useful. Given that these implementations don't allow looping with backwards playback *at all*, I don't know that they argue for either of the two behaviors :-) . . . . . ...Joe Joe Berkovitz Founder Noteflight LLC 49R Day Street Somerville MA 02144 USA "Bring music to life" www.noteflight.com On Fri, Mar 3, 2017 at 11:03 AM, Raymond Toy <rtoy@google.com> wrote: > Thanks for putting this together. This, indeed, is the source of my > confusion! > > Option 2 was my naive interpretation of what I thought looping should do. > Having never used any other music application digital or otherwise, I would > encourage people to weigh in on what looping should do with negative > playback. > > I have not yet looked at your new changes, but I will get to it shortly. > > > On Fri, Mar 3, 2017 at 6:45 AM, Joe Berkovitz <joe@noteflight.com> wrote: > >> Hi Ray and group, >> >> I thought I'd try to put out an explanation of the latest revisions to >> https://github.com/WebAudio/web-audio-api/pull/1143 and why I think it >> addresses the issues that came up in yesterday's call. I also think this >> issue should be made more visible to observers of the WG's activity. >> >> To recap: we have a conflict between two alternate interpretations of >> what should happen when playbackRate is reversed on an ABSN that is >> playing, and whose playhead position is currently within the looped portion >> of the buffer: >> >> 1. *The node should play the exact reverse of everything that it has >> played up since it started*. In this behavior, the looped portion is played >> backwards for only as many iterations as it has already played forwards >> (which could be 1 or fewer). This behavior is useful for, say, playing a >> musical note that incorporates both an attack and a looped section in a way >> that "sounds backwards". >> >> 2. *The node should play the loop in reverse, indefinitely*. This is >> useful for playing a looped section in reverse for an indefinite period, >> like a DJ "scrubbing" a looped sound on a turntable by spinning it >> backwards, or a repeating sound effect being played backwards over and over >> again. >> >> There are clearly two somewhat incompatible use cases here. My argument >> for (1) was that it is a simple, literal interpretation of "backwards". >> However Ray has made some compelling arguments for (2): >> >> - Without this behavior, there is no practical way to achieve indefinite >> backwards looping. I had argued for setting an arbitrary large "offset" >> value, but I now realize that this violates the sense of "offset" as an >> actual offset constrained by the buffer's physical length. >> >> - It is possible to achieve the effect of (1) without prescribing any >> special ABSN behavior, by either unrolling the looped samples or by playing >> two ABSNs in juxtaposed sequence, one with the reversed loop and the other >> with the reversed attack. >> >> The most recent revision to PR #1143 now specifies behavior compatible >> with (2) (I hope!) so that we can evaluate what people think of this >> approach. The changes I made were simple: there is a new "enteredLoop" flag >> that tracks whether the playhead has ever entered the loop. If this flag is >> true, then effectiveBufferTime is allowed to wrap *forward*, mapping >> playhead positions prior to actualLoopStart to their corresponding wrapped >> positions prior to actualLoopEnd. >> >> In Ray's test case, the enteredLoop flag becomes true immediately because >> the offset parameter places the playhead within the loop from the start of >> playback. Consequently, the loop will play backwards indefinitely. >> >> In cases where the playhead lies within the "attack" phase of a looped >> note sample, though, the playhead would simply play the attack backwards. >> So this does partially support the goals of behavior (1). >> >> See https://rawgit.com/WebAudio/web-audio-api/5d4a6e8b1c3603 >> b5a923f7b0361e2f2078c25389/index.html#playback-AudioBufferSourceNode for >> details. >> >> . . . . . ...Joe >> >> Joe Berkovitz >> Founder >> Noteflight LLC >> >> 49R Day Street >> Somerville MA 02144 >> USA >> >> "Bring music to life" >> www.noteflight.com >> > >
Received on Friday, 3 March 2017 17:53:23 UTC