Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
javascript music party server
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
example fill up a bucket for the voice example
api.txt offsets as a parameter like volume
package.json doc updates for require(), 0.1.0
server.js expose the server parameters to scripts, update voice example using s…
usage.txt documentation, usage



http server for javascript music parties


Spin up the baudio-party server on a computer with speakers and sox installed:

$ baudio-party

-: (s2)

  Encoding: Signed PCM    
  Channels: 8 @ 16-bit   
Samplerate: 22050Hz      
Replaygain: off         
  Duration: unknown      

In:0.00% 00:00:10.26 [00:00:00.00] Out:452k  [      |      ]        Clip:0  

There are 8 empty channels by default:

$ curl -X GET http://localhost:5000
  "0": "function () { return 0 }",
  "1": "function () { return 0 }",
  "2": "function () { return 0 }",
  "3": "function () { return 0 }",
  "4": "function () { return 0 }",
  "5": "function () { return 0 }",
  "6": "function () { return 0 }",
  "7": "function () { return 0 }"

Upload a javascript snippet to a track with PUT:

$ curl -sST example/baseline.js http://localhost:5000/3
created audio channel 3

Read the source for a track with a GET:

$ curl http://localhost:5000/3
function (t, i) {
    // baseline
    var f = 800 * Math.pow(2, Math.floor(t * 4 % 4) / 6);
    return Math.sin(t * f * Math.PI)
        * Math.pow(Math.sin(t * 8 * Math.PI), 2)

Add more tracks with more PUTS.

To reset a track back to return 0, send a DELETE:

$ curl -X DELETE http://localhost:5000/3
deleted channel 3

To adjust the volume of a channel, send a POST:

$ curl -X POST -d volume=0.5 http://localhost:5000/3

To adjust the offset of a channel, send a POST:

$ curl -X POST -d offset=120 http://localhost:5000/3


Your script should return a function (t, i) {} that itself returns an amplitude float from -1 to 1, inclusive. Values outside this range are clipped to the maximum and minimum values by baudio.


Your scripts can use a frozen version of the core node buffer library. This is useful for sampling base64-encoded tracks.


You can require() modules in the server process.cwd() or higher.


When you require('baudio') you get the server parameters instead of the baudio module. The server parameters are:

  • rate
  • size
  • channels


usage : baudio-party

  -c, --channels   number of channels to use, default 8

  -r, --rate       bit rate to use, default 22050

  --port=PORT      port to listen on, default 5000

  -o FILE          record the audio stream to a file


First install sox.

Then with npm do:

npm install -g baudio-party



Something went wrong with that request. Please try again.