- From: Ehsan Akhgari <ehsan.akhgari@gmail.com>
- Date: Fri, 17 May 2013 11:35:12 -0400
- To: Russell McClellan <russell@motu.com>
- Cc: Chris Lowis <chris.lowis@bbc.co.uk>, WebAudio <public-audio@w3.org>
- Message-ID: <CANTur_5m6u4ULgRj9FcUXsm+0xUk9SaX_Af6XTf+CUa1gp+EcA@mail.gmail.com>
On Fri, May 17, 2013 at 10:45 AM, Russell McClellan <russell@motu.com>wrote: > > On May 17, 2013, at 7:24 AM, Chris Lowis <chris.lowis@bbc.co.uk> wrote: > > Firstly, ported from the Mozilla test suite is the following test: > > > > > https://github.com/WebAudio/web-platform-tests/blob/master/webaudio/the-audio-api/the-gainnode-interface/gain-node-mozilla.html > > > > It uses a ScriptProcessor to compare 2 buffers where the expected buffer > > has half the amplitude of the input buffer in order to test that a > > GainNode with a 'gain.value' of 0.5 behaves as expected. > > The test as written isn't thread-safe. The script processor node could > trigger an onaudioprocess event to be handled before the source is even > started. Generally speaking, with all the unspecified latency concerns, it > strikes me as a bad idea to use script processors for testing. Hmm, I'm not sure if I understand your point here. Where is the thread-safety issue? The script processor node and the source node are created right after each other, and then the source node is started, so there is no way for the audioprocess event to be dispatched before the source node has started. Using ScriptProcessorNode for testing might be challenging for testing long running graphs, but in most cases we should be fine since ideally we would be running our tests using short buffers so the real time nature of ScriptProcessorNode should not get in the way. This has definitely been our experience at Mozilla so far. > What happens if you insert a node into the graph that adds latency - such > as another script processor? The latency that it adds isn't specified, so > you can't possibly write a test this way without relying on unspecified > behavior. > Quite to the contrary, the only way to reliably test ScriptProcessorNode itself is to use another ScriptProcessorNode. Each audioprocess event will be dispatched only after the input nodes have produced the specified buffer size, which means that if you have one ScriptProcessorNode feeding into another, which is testing its event's inputBuffer to see what the previous node has generated, the audioprocess event on the second node cannot be dispatched until the event on the first node has been dispatched (assuming they're both using the same buffer size, of course.) Testing a ScriptProcessorNode using OfflineAudioContext, however, has the down-side of having to explicitly deal with possible latencies, by expecting silence being injected in the input buffer to handle the latency generated by ScriptProcessorNode. According to the current spec for OfflineAudioContext, doing that would be hard since we need to compute a proper render buffer size for OfflineAudioContext in advance. Cheers, -- Ehsan <http://ehsanakhgari.org/>
Received on Friday, 17 May 2013 15:36:23 UTC