2.0.4 • Published 8 years ago

a-bit-of v2.0.4

Weekly downloads
9
License
BSD-2-Clause
Repository
github
Last release
8 years ago

a bit of

a functional-reactive approach to flow-based programming

make chains of functions, a-la max/msp, puredata, vvvv, etc, to program with streaming sources of data

update processing/output functions without disturbing your source streams.

components

components are attached together to process streams.

components are made out of a function. general pattern:

var c = new Component(e => 
  console.log('err', err)).update(myFunction)

the component's consturctor takes an error callback. you can set the component's function by calling its update method.

there are three types of components:

origin

origin's functions take nothing

they reutrn a list of [ emitter, 'event' ..]

function originFn () {
  // port is an EventEmitter
  port = serialport('/dev/tty.MindWave')
  socket = websocket('ws://some-server')
  // we want to make a stream of its 'data' events
  return [
    [port, 'data'],
    [socket, 'event'],
  ]
}

var o = new abitof.Origin(e => 
  console.log('err', e)).update(originFn)

transform

transform function's take an arbitrary number of streams, and return a list of streams

function transformFn (deviceStream, socketStream) {
  // return a stream of fft'd buffers 
  return [
    deviceStream.bufferWithCount(512).map(fft),
    socketStream.filter(someFilterFn),
  ]
}

var t = new abitof.Transform(e => 
  console.log('err', e).update(trasnformFn)

endpoints

endpoint functions return a list of functions.

the functions handle values from inputs stream

function endpointFn (fftStream) {
  //  endpoints setup logic
  midiServer.start()
  // return handle(), and, optionally, a taredown () function
  return [
    function (x) { 
      midiServer.send(midiFromAlphaWaves(x));
      midiServer.send(midiFromRoomEvents(x));
    }
  ]
}

var e = new Endpoint (e => 
  console.log('err', e).update(endpointFn)

optionally, endpoint functions can return a taredown() method, which gets triggered when a new update() function is passed through

use it for, e.g., removing divs so that you can re-add them.

function endpointFn (fftStream) {
  //  endpoints setup logic
  midiServer.start()
  // return handle(), and, optionally, a taredown () function
  return {
    handlers: [
      function (x) { 
        midiServer.send(midiFromAlphaWaves(x))
      }
    ],
    // taredown
    taredown: () => {
      midiServer.stop()
    }
}

attaching components together

var abitof = require('a-bit-of')

// make components
var o = new abitof.Origin(someOriginFn)
var t = new abitof.Transform(someTransformFn)
var e = new abitof.Endpoint(someEndpointFn)

// attach them together
o.attach(t).attach(e)

api

origin

update(originFn)

attach(someDownstreamComponent)

transform

update(transformFn)

attach(someDownstreamComponent)

endpoint

update(transformFn)

NOTE: you can't attach anything to endpoints. nothing can be downstream from an endpoint.

2.0.4

8 years ago

2.0.3

8 years ago

2.0.1

8 years ago

2.0.0

8 years ago

0.2.2

8 years ago

0.2.1

8 years ago

0.2.0

8 years ago

0.1.0

8 years ago