ableton-push
Version:
Interface with the Ableton Push in Meshblu!
67 lines (49 loc) • 1.88 kB
text/coffeescript
_ = require 'lodash'
PushWrapper = require 'push-wrapper'
midi = require 'midi'
{EventEmitter} = require 'events'
tinycolor = require 'tinycolor2'
class Ableton extends EventEmitter
constructor: ({=[]}={}) ->
connect: =>
= new midi.input()
= new midi.output()
= new PushWrapper send: (bytes) => .sendMessage(bytes)
.on 'message', (deltaTime, message) =>
firstByte = _.first message
if firstByte != 208
= message
else
message = [[0], [1], _.last message]
.receive_midi message
.openPort 0
.openPort 0
()
_setupButtons: =>
for x in [1...9]
for y in [1...9]
({x,y})
()
setButtonColors: (=[]) => ()
setButtonColor: ({x,y,color}={}) =>
console.log {x,y,color}
= _.reject , {x,y}
.push {x,y,color}
()
_setButtonColors: =>
console.log 'hi',
_.each ,
_setButtonColor:({x,y,color}={}) =>
{r,g,b} = tinycolor(color).toRgb()
.grid.x[x].y[y].led_rgb(r,g,b)
_setupButton: ({x,y}) =>
.grid.x[x].y[y].led_rgb(0,0,0)
.grid.x[x].y[y].on 'pressed', (velocity) => {x,y,velocity}
.grid.x[x].y[y].on 'released', (velocity) => {x,y,velocity}
.grid.x[x].y[y].on 'aftertouch', (velocity) => {x,y,velocity}
_onPressed: ({x,y,velocity}) =>
message = {x,y, velocity}
buttonConfig = _.find , {x,y}
message.color = buttonConfig.color if buttonConfig?
'button', message
module.exports = Ableton