Node.js implementation of Web audio API

npm install web-audio-api
1 downloads in the last day
12 downloads in the last week
60 downloads in the last month

Node Web Audio API

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.

What's implemented

  • AudioContext(partially)
  • AudioParam (almost there)
  • AudioBufferSourceNode
  • ScriptProcessorNode
  • GainNode

What's left to do

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

Streaming audio

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.

Running the debugger

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:


that way the audio loop is stopped, and you can inspect your objects in peace.

Running the tests

Tests are written with mocha. To run them, install mocha with :

npm install -g mocha

And in the root folder run :


Manual testing

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
npm loves you