2.1.0 • Published 10 years ago

midi-grid v2.1.0

Weekly downloads
1
License
ISC
Repository
github
Last release
10 years ago

midi-grid

Map a duplex midi stream to observable input and output value grids.

For modelling grid midi controllers such as the Launchpad.

Install via npm

$ npm install midi-grid

API

var MidiGrid = require('midi-grid')

var midiGrid = MidiGrid(duplexMidiStream, mapping[, outputGrid])

Create an observable instance of MidiGrid.

Pass in a duplexMidiStream such as web-midi or midi-stream.

mapping is an array-grid containing the midi to map (e.g. "144/36").

Optionally pass in outputGrid - an observable grid for setting output values as observ-grid or observ-grid-stack for layering grids.

// observe Novation Launchpad button grid
var MidiStream = require('midi-stream')
var duplexPort = MidiStream('Launchpad Mini')
var mapping = ArrayGrid([], [8,8])

for (var r=0;r<8;r++){
  for (var c=0;c<8;c++){
    var launchpadButtonId = (r * 16) + c
    mapping.set(r, c, '144/' + launchpadButtonId)
  }
}

var launchpad = MidiGrid(duplexPort, mapping)

launchpad(function(grid){
  // grid is an immutable instance of ArrayGrid with coords mapped to current values
  if (grid._diff){
    var coords = grid._diff[0]
    var key = coords[0] + '/' + coords[1]
    var value = grid._diff[2]
    if (value){
      triggerOn(coords, value)

      // turn on light
      launchpad.set(coords[0], coords[1], 127)
    } else {
      triggerOff(coords)

      // turn off light
      launchpad.set(coords[0], coords[1], 0)
    }
  }
})

midiGrid.get(row, col)

Get the current input value of the given coordinates.

midiGrid.set(row, col, value)

Alias for output.set(row, col, value). Sets the output value at the given coordinates.

midiGrid.resend()

Resend all the current output values. Use if you switch the output device and want to resend all state.

midiGrid.midiStream (Duplex Stream)

This midi stream is connected to the constructor duplexPort if specified, otherwise it can be manually piped to and from a midi device.

Observable Attributes

midiGrid

Notifies when any input value changes (e.g. a button is pressed/released).

midiGrid.output (ObservGrid or custom observ passed to ctor)

Notifies when any output value changes (e.g. light up button). Set output values using midiGrid.output.set(row, col, val) or use the alias midiGrid.set.