Home › Forums › General › Using Ctrlr › Demo panel for MIDI receive/transmit routines › Reply To: Demo panel for MIDI receive/transmit routines
Well I never looked at the reason for this function, just focusing on the errors you were dealing with and offering a way of fixing those (particular issues), but it seems that all you are trying to do is process the data coming in from the synth.
I don’t think you need to do all that memoryblock converting or midi:getLuaData():getRange(), gsub() stuff. Needs to be as simple as possible or else all these compilation errors start seeping in as you are finding out.
If you know a certain midi dump will be say 65 bytes long then:
myMidiReceived = function(--[[ CtrlrMidiMessage --]] midi)
local s = midi:getSize()
if s == 65 then
…now work out a way of writing into the values of a midi:getLuaData():getByte() to various modulator/components (uiSliders uiCombos etc); that magic moment when you see all the sliders change values on screen!
You can do this by mapping the position of each byte in midi:getLuaData():getByte() to a table of modulator/Component names.
This would be the foundation/core of your whole program!!! Everything else should be designed around this central function of Ctrlr π
e.g.
t={
"WG_PITCH_COARSE", -- 0x00 this would be the name of the Modulator/Component
"WG_PITCH_FINE", -- 0x01
"any_mod_name_I_choose", -- 0x10
-- <em>54 more elements to be listed here</em>
"TV_ENV_SUSTAIN_LEVELβ, -- 0x39
}
--pseudo code follows untested!!
j=1
for i=5,65-2 do
-- 5 could be the offset from the sysex header F0 41 ?? ?? ??
-- -2 = ignore checksum and F7 (in the case of Roland Synths)
m=midi:getLuaData():getByte(i)
panel:getModulatorByName(t[j]):getComponent():setValue(m,false)
j=j+1
end
This is all untested, but hopefully it will help you understand the core idea of getting data out of the D-110 and into ctrlr. π