example midi matrix
| box = {} -- a table of boxes | |
| msg = | |
| { | |
| ["cc"] = {"cc","val","ch"} | |
| , ["note_on"] = {"note","vel","ch"} | |
| , ["note_off"] = {"note","vel","ch"} | |
| , ["key_pressure"] = {"note","val","ch"} | |
| , ["pitchbend"] = {"val","ch",nil} | |
| , ["channel_pressure"] = {"val","ch",nil} | |
| } | |
| for source = 1,4 do -- I have four boxes (four USB MIDI ports) | |
| box[source] = midi.connect(source) -- box 1 == whatever's connected to port 1, etc | |
| box[source].connected = {false,false,false,false} -- all boxes are disconnected | |
| box[source].event = function(data) -- what to do when a box sends MIDI into norns: | |
| -- print("box "..source..":") -- uncomment this line to print which box, if you want | |
| local received = midi.to_msg(data) -- capture the message... | |
| -- tab.print(received) -- uncomment this line to print the message, if you want | |
| for destination = 1,4 do -- for each of the potential inter-box destinations: | |
| if box[source].connected[destination] then -- if the source is connected to a destination... | |
| local msg_1 = received[msg[received.type][1]] -- shorten message 1... | |
| local msg_2 = received[msg[received.type][2]] -- shorten message 2... | |
| local msg_3 = received[msg[received.type][3]] -- shorten message 3... | |
| -- send the source's messages to the destination box: | |
| box[destination][received.type](box[destination],msg_1,msg_2,msg_3) | |
| -- ^^ nb: I removed syntactic sugar from self:functionName() ^^ | |
| end | |
| end | |
| end | |
| end | |
| function manage(src,dest,state) -- easier way to manage states: | |
| box[src].connected[dest] = state | |
| --`manage(2,1,true)` sets box 2 as source and box 1 as destination | |
| --`manage(2,1,false)` breaks the sending connection between box 2 and box 1 | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment