UNPKG

lunchpad

Version:

interface for the novation launchpad mini, for node and the browser

59 lines (46 loc) 1.49 kB
import Color from '../../lib/Color' import LaunchpadBase from '../LaunchpadBase' export type MidiData = [number, number, number] class LaunchpadMidi extends LaunchpadBase { _setSquare(x: number, y: number, color: Color) { this._send(144, this._getSquareCoordinate(x, y), color.getCode()) } _setFunctionX(x: number, color: Color) { this._send(176, this._getFunctionXCoordinate(x), color.getCode()) } _setFunctionY(y: number, color: Color) { this._send(144, this._getFunctionYCoordinate(y), color.getCode()) } _send(order: number, note: number, velocity: number) { throw Error('missing _send implementation') } _flush() { //noop for now } _handleMidiMessage (message: MidiData) { if (message[2] < 127) { return } if (message[0] === 176) { this._selectFunctionX(message[1] - 104) } else { const x = message[1] % 16 const y = Math.floor(message[1] / 16) * -1 + 7 if (x === 8) { this._selectFunctionY(y) } else { this._selectSquare(x, y) } } } _getFunctionXCoordinate (x: number) { return x + 104 } _getFunctionYCoordinate (y: number) { return this._getSquareCoordinate(8, y) } _getSquareCoordinate (x: number, y: number) { return (((y - 7) * -1) * 16) + x } } export default LaunchpadMidi