baudio-party

javascript music party http server

baudio-party

http server for javascript music parties

example

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

$ baudio-party
http://localhost:5000
 
-: (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

scripts

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

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

install

First install sox.

Then with npm do:

npm install -g baudio-party

license

MIT