- From: Joseph Berkovitz <joe@noteflight.com>
- Date: Wed, 6 Oct 2010 13:52:21 -0400
- To: public-xg-audio@w3.org
- Message-Id: <40D562DA-D908-4BAF-99F9-DDD7A431CF9E@noteflight.com>
Hi audio incubator, This is a simple and powerful idea that was suggested to me by audio tools developer Joa Ebert of Hobnox last year (no connection to this group's work) and I want to share it here. I think it could have a lot of value and seems relatively easy to implement. JavaScriptCueNode (new feature) It is very useful to be able to have an audio scheduler cue the invocation of some arbitrary code at a specific point on the audio timeline, with no accompanying audio output. Use cases: - control some other piece of the application in synchrony with what is happening in the audio at that point. (Example: make some graphical element highlight in time to a musical beat, as in Drum Machine demo) - generate a new section of audio experience that smoothly extends the current one before it ends (Example: dynamic generation of loops in a gaming experience or as in Drum Machine demo) Such functions are easiest to drive from the audio framework, instead of having the rest of the app try to trigger itself at the exact correct moment or interval. For example, look at the schedule() function in the Drum Machine demo, and the somewhat tricky time calculations and setTimeout() calls that it has to perform to loop/ advance the groove and draw the playhead. This would be much easier to code if it were called on a rhythmic basis coming out of the audio engine itself. Such a node can be simply realized in the API as something similar to a JavaScriptAudioNode but with zero outputs, and which exposes a noteOn() function to schedule its occurrence. Something like: interface JavaScriptCueNode : AudioNode { attribute EventListener onnoteprocess; void noteOn(in float when); } ... . . . Joe Joe Berkovitz President Noteflight LLC 160 Sidney St Cambridge, MA 02139 phone: +1 978 314 6271 http://www.noteflight.com http://joeberkovitz.com
Received on Wednesday, 6 October 2010 18:49:07 UTC