-- Sensel Morph Test Script -- -- displays up to 4 touches -- setup Sensel Morph for 14bit MIDI on CCs x=72, y=74, z=76 local xmsb = {0,0,0,0,0,0,0,0} local xlsb = {0,0,0,0,0,0,0,0} local xvalue = {0,0,0,0,0,0,0,0} local ymsb = {0,0,0,0,0,0,0,0} local ylsb = {0,0,0,0,0,0,0,0} local yvalue = {0,0,0,0,0,0,0,0} local zmsb = {0,0,0,0,0,0,0,0} local zlsb = {0,0,0,0,0,0,0,0} local zvalue = {0,0,0,0,0,0,0,0} m = midi.connect() m.event = function(data) local d = midi.to_msg(data) if d.ch < 5 then if d.cc == 72 then --print("cc " .. d.cc .. " = " .. d.val) xmsb[d.ch] = d.val end if d.cc == 104 then xlsb[d.ch] = d.val end if d.cc == 74 then ymsb[d.ch] = d.val end if d.cc == 106 then ylsb[d.ch] = d.val end if d.cc == 76 then zmsb[d.ch] = d.val end if d.cc == 108 then zlsb[d.ch] = d.val end xvalue[d.ch] = bit32.lshift(xmsb[d.ch],7) + xlsb[d.ch] yvalue[d.ch] = bit32.lshift(ymsb[d.ch],7) + ylsb[d.ch] zvalue[d.ch] = bit32.lshift(zmsb[d.ch],7) + zlsb[d.ch] else end end function init() t = metro.init() t.count = 0 t.time = 1/200 t.event = function(stage) redraw() end t:start() end function redraw() screen.clear() screen.aa(1) for i=1,4 do screen.stroke() screen.circle(xvalue[i]/16383*128,64-(yvalue[i]/16383*64),zvalue[i]/16383*32) end screen.update() end