- From: Patrick Martin <patrick.martin.r@gmail.com>
- Date: Tue, 29 Oct 2013 18:18:14 -0700
- To: "<public-audio@w3.org>" <public-audio@w3.org>
- Message-ID: <CAN_rxo3hrjKtyCvpUbf5DryNOZXSDvHk2AJQOCMHguOgtefCKQ@mail.gmail.com>
---------- Forwarded message ----------
From: Patrick Martin <patrick.martin.r@gmail.com>
Date: Tue, Oct 29, 2013 at 6:17 PM
Subject: Re: Continuous playback of javascript synthesized consecutive
audio buffers causes audio artifacts when no buffer starving occurs.
To: "Srikumar K. S." <srikumarks@gmail.com>
The issue is that the current implementation can't do it accurately as
scheduling always includes some delay from the scheduling javascript code.
ie if you schedule a buffer to playback in x seconds you're actually
scheduling it in x seconds + execution time of the javascript (which may
even be interuppted). the whole idea behind a queue is that as long as you
have buffers in the queue there will be no delay in playback/artifacts due
to buffer switching.
On Tue, Oct 29, 2013 at 2:55 PM, Srikumar K. S. <srikumarks@gmail.com>wrote:
> Ah I see.
>
> We've seen some discussion regarding the modifiability of buffers that
> have
> been assigned to source nodes (i.e. the "race condition wars"). This
> jsfiddle
> (http://jsfiddle.net/gy5AU/) shows code that modifies a single 22050Hz
> buffer periodically to generate a glitch-free (up to setTimeout's jitter)
> 440Hz sine tone.
>
> This produces a clean tone on my machine unlike the original beep.html
> test case ... but should this work at all?
>
> -Kumar
>
> On 30 Oct, 2013, at 1:38 am, Joseph Berkovitz <joe@noteflight.com> wrote:
>
> If I'm not mistaken I think the original issue here was sequencing audio
> buffers whose playback rate was not equal to the AC sample rate, and were
> thus being up- or down-sampled for playback. In this case one gets aliasing
> problems at the splice point between successive buffers, and the spec is
> silent about this sort of thing. These aliasing issues do not arise when
> the playback rate and the AC sample rate are equal.
>
> I don't think the buffer queue model below would address this (although
> it's very useful in its own right).
>
> On Oct 29, 2013, at 3:18 PM, Srikumar K. S. <srikumarks@gmail.com> wrote:
>
> It would allow for pre-synthesized audio playback in a glitch free manner.
>
> I'm not sure whether this is to address an implementation bug or a spec
> shortcoming. The concept of a buffer queue can already be expressed using
> the AudioBufferSourceNode. Whether it works without glitches in current
> implementations is likely not a spec shortcoming .. unless it is impossible
> to create such an implementation, which I don't think is the case.
>
> For instance, see the buffer_queue model at
> https://github.com/srikumarks/steller/blob/master/src/models/buffer_queue.js.
> The example code there asks for a function to be called when the queue runs
> low, but it can sequence buffers passed to the "enqueue" method.
>
> Reproducing the 440Hz sine tone example here -
>
> var ac = new AudioContext;
> var sh = new org.anclab.steller.Scheduler(ac);
> var q = sh.models.buffer_queue();
> q.connect(ac.destination);
> q.on('low', function () {
> var phase = 0.0, dphase = 2.0 * Math.PI * 440.0 / 44100.0;
> return function (lowEvent, q) {
> var audioBuffer = q.createBuffer(1, 1024);
> var chan = audioBuffer.getChannelData(0);
> var i;
> for (i = 0; i < 1024; ++i) {
> chan[i] = 0.2 * Math.sin(phase);
> phase += dphase;
> }
> q.enqueue(audioBuffer);
> };
> }());
> q.start(ac.currentTime);
>
> -Kumar
>
> On 30 Oct, 2013, at 12:25 am, Patrick Martin <patrick.martin.r@gmail.com>
> wrote:
>
> It would allow for pre-synthesized audio playback in a glitch free manner.
> On Oct 20, 2013 10:06 PM, "Robert O'Callahan" <robert@ocallahan.org>
> wrote:
>
>> On Mon, Oct 21, 2013 at 6:35 AM, Srikumar Karaikudi Subramanian <
>> srikumarks@gmail.com> wrote:
>>
>>> What advantage might such an AudioBufferSequenceNode have over a
>>> ScriptProcessorNode with a queue processing render function?
>>>
>>
>> It would probably have the advantage of not being susceptible to small
>> amounts of main-thread jank.
>>
>> Rob
>> --
>> Jtehsauts tshaei dS,o n" Wohfy Mdaon yhoaus eanuttehrotraiitny eovni
>> le atrhtohu gthot sf oirng iyvoeu rs ihnesa.r"t sS?o Whhei csha iids teoa
>> stiheer :p atroa lsyazye,d 'mYaonu,r "sGients uapr,e tfaokreg iyvoeunr,
>> 'm aotr atnod sgaoy ,h o'mGee.t" uTph eann dt hwea lmka'n? gBoutt uIp
>> waanndt wyeonut thoo mken.o w *
>> *
>>
>
>
> . . . . . ...Joe
>
> *Joe Berkovitz*
> President
>
> *Noteflight LLC*
> Boston, Mass.
> phone: +1 978 314 6271
> www.noteflight.com
> "Your music, everywhere"
>
>
>
Received on Wednesday, 30 October 2013 01:18:42 UTC