W3C home > Mailing lists > Public > public-audio@w3.org > April to June 2012

Audio-ISSUE-12 (JLoop start/stop points) [Web Audio API]

From: Joseph Berkovitz <joe@noteflight.com>
Date: Wed, 23 May 2012 15:42:22 -0400
Cc: Audio Working Group <public-audio@w3.org>
Message-Id: <2A6AADEE-8C36-4967-BC0D-0E77CCE0BFB0@noteflight.com>
To: Chris Rogers <crogers@google.com>
Chris,

I owe you a bit more detail on the loop points issue and the question of whole-sample looping.

In my proposal I had suggested that loopStart/loopEnd be set to 0 and the sample length in order to loop the entire sample (iff the "loop" attribute is set on the AudioBufferSourceNode).

After some thought I think that while this behavior obviously makes sense when loopEnd is the sample length, it would be also advantageous to define that whole-sample-looping occurs when loopStart == 0 and loopEnd == 0, and that these in fact be those attributes' default values. This provides a guaranteed way to achieve the whole-sample-looping behavior regardless of what underlying AudioBuffer is set into the AudioBufferSourceNode.

...Joe

On Apr 30, 2012, at 12:31 PM, Audio Working Group Issue Tracker wrote:

> Audio-ISSUE-12 (Joe Berkovitz): Loop start/stop points [Web Audio API]
> 
> http://www.w3.org/2011/audio/track/issues/12
> 
> Raised by: Joe Berkovitz
> On product: Web Audio API
> 
> Hi folks,
> 
> At the F2F in January we discussed the need for a more powerful looping construct in AudioBufferSourceNode than simply "loop the whole sound", in order to support UC6 (wavetable synthesis) and other user cases.  In particular, basic wavetable synths require the ability to start an audio buffer playing and then have it enter a loop in some arbitrary subrange of that sample [m..n].  Trying to achieve this via explicit scheduling of various subranges of a sample by calling noteGrainOn() feels unworkable since sample-accurate transitions from one subrange to another could not be achieved in this way -- and at any rate, it would be very unwieldy. The idea is that noteOn() should perform seamless repetition of the looped subrange of a sample as an integral part of its behavior.
> 
> Somehow this idea has been lost, probably due to the coarse-grain definition of looping in the UC document as simply "Playing / Looping sources of audio". However it's an essential requirement for wavetable synthesis and my concern is that games and synths will be seriously compromised without it.
> 
> I am proposing that there be separate loopStart and loopEnd properties of AudioBufferSourceNode that are sample-accurate.  If respectively set to 0 and the length of the sample, these will cause the entire sample to be looped.  If set to offsets M and N, these will cause the sample to be played by noteOn() and noteGrainOn() as if the sample consisted of contiguous subranges [0..M-1], [M..N], [M..N], ... 
> 
> Thanks!
> 
> ...Joe
> 
> 
> 

... .  .    .       Joe

Joe Berkovitz
President

Noteflight LLC
84 Hamilton St, Cambridge, MA 02139
phone: +1 978 314 6271
www.noteflight.com
Received on Wednesday, 23 May 2012 19:42:53 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 23 May 2012 19:42:56 GMT