UNPKG

port

Version:

Spawn Pd (Pure Data) and communicate through TCP sockets

280 lines (168 loc) 5.28 kB
# Port A Node.js module to spawn and communicate with Pure Data (aka Pd). Example ------- ```js var port = require('port'); port({ 'read': 8004, 'write': 8005, 'basepath': __dirname, 'flags': { 'nogui': true, 'stderr': true, 'send': 'pd dsp 1, dsp 0', 'path': 'relative/to/basepath', 'open': 'patch.pd' } }) .on('connect', function(){ this.write('Hello [netreceive]!;\n'); }) .on('data', function(data){ console.log('data receiving from [netsend]', data); }) .on('stderr', function(buffer){ console.log(buffer.toString()); }) .create(); ``` Install ------- ```bash npm install port ``` API --- ### Constructor: Port ```js var Port = require('port'); var pd = new Port(options); ``` The `new` keyword is optional. ##### Options - `host` - (string) The domain of the Pd process. Defaults to localhost. - `read` - (number | null) The port to listen to Pd's [netsend]. Defaults to null. - `write` - (number | null) The port to connect to Pd's [netreceive]. Defaults to null. - `encoding` - (ascii | utf8 | base64 | hex | null) The encoding of the read and write socket, [nodejs.org/api/stream.html#stream_stream_setencoding_encoding](http://nodejs.org/api/stream.html#stream_stream_setencoding_encoding) Defaults to null. - `max` - (number) Limits amount of incoming connections. Defaults to 1. - `basepath` - (string) -path flags are relative to basepath. Supports only flags object, but not flags array. - `pd` - (string) The command or location to spawn the Pd process. Defaults to an absolute path to the Pd binary on OS X. Defaults to 'pd' on Linux. - `debug` - (boolean) log parsed startup flags before spawning Pd. - `flags` - (object) The command line arguments for the Pd process. Expects an object of arguments. Read more about Pd's configuration flags on [crca.ucsd.edu/~msp/Pd_documentation/x3.htm#s4](http://crca.ucsd.edu/~msp/Pd_documentation/x3.htm#s4) . Defaults to {}. Array support is deprecated. Methods ------- ### Method: Port.create 1. Spawns the Pd process. 2. Listens for an incoming socket connection. 3. Connects to on the write port. Each of the 3 steps are individually executed depending on the configuration. ```js pd.create(); ``` ### Method: Port.destroy Kills the Pd process and ends all open connections. ```js pd.destroy(); ``` ### Method: Port.write Sends a packet containing one or many messages to Pd's [netreceive]. WARNING: write does not check if the write socket is ready and may error! ```js pd.write('Hello Pd!;\n'); ``` ### Method: Port.setOptions Reconfigure an instance, changes only take effect after destroy and create methods have been called. ##### Arguments 1. Data (object) - set configuration on an existing instance. ```js pd.setOptions({ 'read': 12345, 'write': 12346, 'basepath': __dirname, 'flags': { 'noprefs': true, 'nogui': true, 'stderr': true, 'path': 'relatvie/path/to/dir', 'open': 'patch.pd' } }); ``` ### Method: Port.isRunning Returns true when the instance is connected and it is safe to send data with the `write` method. ### Method: Port.parseFlags Internal method, eventually useful for debugging. Turns flags object into an array. Adds dash prefix, omits flags that are falsy, supports path array, ensures -path and -open to be at the last position. Events ------ Port is an event emitter see also [nodejs.org/api/events.html](http://nodejs.org/api/events.html) ### Event: listening Fires if the `read` port is specified and after Port.create is called. At this point Port is waiting for an incoming TCP connection from Pd's [netsend]. ```js pd.on('listening', function(){ }); ``` ### Event: connection Fires when Pd connects and the `read` port is specified. ```js pd.on('connection', function(socket){ }); ``` ##### Arguments 1. Socket (object) - Exposes the socket connection from [netsend]. ### Event: connect Fires when Port connects to Pd on the write port. ```js pd.on('connect', function(socket){ }); ``` ##### Arguments 1. Socket (object) - Exposes the socket connection to [netreceive]. ### Event: data Fires when Pd sends a message with [netsend]. ```js pd.on('data', function(data){ }); ``` ##### Arguments 1. Data - a buffer object or a string (if encoding is not null). ### Event: stderr Fires on every message that is written to the console the [print] object or anything else. This event is only available with `-stderr` or `-nogui` flag. ```js pd.on('stderr', function(buffer){ }); ``` ##### Arguments 1. Buffer - the stderr buffer object. ### Event: destroy Fires after the destroy method is called. ```js pd.on('destroy', function(){ }); ``` Tests ----- If tests fail, the child process may be manually terminated with `killall pd`. ```bash make test ``` Examples -------- Some examples are only proof of concept and are not optimized for best performance. ```bash node examples/testing/division.js node examples/manipulation/server.js ``` Requires -------- - Vanilla Pure Data from [crca.ucsd.edu/~msp/software.html](http://crca.ucsd.edu/~msp/software.html) or Pd-extended from [puredata.info/downloads](http://puredata.info/downloads). - Node.js from [nodejs.org](http://nodejs.org/).