This library implements the web audio API specification on node.js.
Why the hell doing that??? I know it sounds crazy, so I guess I'll have to build a case for it, and write some blog posts.
And this is not even alpha. Use this library only if you're the adventurous kind.
- AudioContext(partially)
- AudioParam (almost there)
- AudioBufferSourceNode
- ScriptProcessorNode
- GainNode
Most of the AudioNodes ... Most of many other things ... :(
npm install web-audio-api
Get ready, this is going to blow up your mind :
node test/manual-testing/AudioContext-sound-output.js
AudioContext
just writes PCM data to a node writable stream. The default stream is a stream created with Speaker
, which plays the audio back to your soundcard. But you can use any writable stream, file, including the stdin
of a child process.
For example, here is an example for streaming audio to an icecast server, using ices :
var spawn = require('child_process').spawn
, AudioContext = require('web-audio-api').AudioContext
, context = new AudioContext()
var ices = spawn('ices', ['ices.xml'])
context.outStream = ices.stdin
Cool huh?
Wow! The whole thing is not even half-done that there's already some extensions for it! See the list in the wiki.
Right now everything runs in one process, so if you set a break point in your code, there's going to be a lot of buffer underflows, and you won't be able to debug anything.
One trick is to kill the AudioContext
right before the break point, like this:
context._kill()
debugger
that way the audio loop is stopped, and you can inspect your objects in peace.
Tests are written with mocha. To run them, install mocha with :
npm install -g mocha
And in the root folder run :
mocha
To test the sound output :
node test/manual-testing/AudioContext-sound-output.js
To test AudioParam
against AudioParam
implemented in a browser, open test/manual-testing/AudioParam-browser-plots.html
in that browser.
- AudioNode and AudioContext bug fixes
- audioports : bug fixes
- audioports : implemented
channelInterpretation
'speakers' - AudioContext : added support for mp3 to
decodeAudioData
- AudioBufferSourceNode : handler
onended
implemented - AudioContext : method
decodeAudioData
, support only for wav
-
ScriptProcessorNode
-
AudioBufferSourceNode
- node is killed once it has finished playing
- subsequent calls to
start
have no effect
-
AudioContext : method
collectNodes
-
audioports : bug fixes
- AudioContext (partial implementation)
- AudioParam (missing unschedule)
- AudioBufferSourceNode (missing onended)
- GainNode