Is it possible to generate a constant sound stream with javascript/html5? For example, to generate a perpetual sine wave, I would have a callback function, that would be called whenever the output buffer is about to become empty:
function getSampleAt(timestep)
{
return Math.sin(timestep);
}
(The idea is to use this to make an interactive synth. I don’t know in advance how long a key will be pressed, so I can’t use a fixed length buffer)
Using the HTML5 audio element
Cross-browser generative sustained audio using JavaScript and the
audioelement isn’t currently possible, as Steven Wittens notes in a blog post on creating a JavaScript synth:Using the Web Audio API
The Web Audio API was designed to facilitate JavaScript audio synthesis. The Mozilla Developer Network has a Web Based Tone Generator that works in Firefox 4+ [demo 1]. Add these two lines to that code and you have a working synth with generative sustained audio upon keypress [demo 2 – works in Firefox 4 only, click the ‘Results’ area first, then press any key]:
The BBC’s page on the Web Audio API is worth reviewing too. Unfortunately, support for the Web Audio API doesn’t extend to other browsers yet.
Possible workarounds
To create a cross-browser synth at present, you’ll likely have to fall back on prerecorded audio by:
audioelements and starting and stopping them upon keypress.