Hi @jofemodo
I’ve now understood the basic principles and the little I’ve done is working. It’s still the beginning with (AKAI MPD26), mainly because I started without a plan, I just wanted to see what was possible for a possible future projects (e.g. LKM2 keyboard replacement contoller with interaction with Zynthian and Footswitch controller running Opendeck).
Working is, if there is interest to others…
- 6x Encoders set in NRPN (INC/DEC) as 4xZYNPOT & 2xARROW_[left, right, up, down]
# NRPN Section for the Encoders
elif ccnum == 99: # Get NRPN Poti Value
self.poti = ccval
elif ccnum == 96 and ccval == 1: # Get NRPN INC Value
if self.poti == 3: # CTRL-1
self.state_manager.send_cuia("ZYNPOT", params=[0, 1])
elif self.poti == 1: # CTRL-2
self.state_manager.send_cuia("ZYNPOT", params=[1, 1])
elif self.poti == 4: # CTRL-3
self.state_manager.send_cuia("ZYNPOT", params=[2, 1])
elif self.poti == 2: # CTRL-3
self.state_manager.send_cuia("ZYNPOT", params=[3, 1])
elif self.poti == 5: # Customer LEFT/RIGHT
self.state_manager.send_cuia("ARROW_RIGHT")
elif self.poti == 6: # Customer UP/DOWN
self.state_manager.send_cuia("ARROW_DOWN")
elif ccnum == 97 and ccval == 1: # Get NRPN DEC Value
if self.poti == 3:
self.state_manager.send_cuia("ZYNPOT", params=[0, -1])
elif self.poti == 1: # CTRL-2
self.state_manager.send_cuia("ZYNPOT", params=[1, -1])
elif self.poti == 4: # CTRL-3
self.state_manager.send_cuia("ZYNPOT", params=[2, -1])
elif self.poti == 2: # CTRL-4
self.state_manager.send_cuia("ZYNPOT", params=[3, -1])
elif self.poti == 5: # Customer UP/DOWN
self.state_manager.send_cuia("ARROW_LEFT")
elif self.poti == 6: # Customer UP/DOWN
self.state_manager.send_cuia("ARROW_UP")
-
PADS [4,8,12,16] in BankA as ZYNSWITCH 0-4 “P” for NoteOn and “R” for NoteOff
# PADS elif evtype == 0x9: # Capture NoteOn ccnum = ev[1] & 0x7F if ccnum in self.pads_ccnum: if self.pads_ccnum.index(ccnum) == 0: self.state_manager.send_cuia("ARROW_LEFT") elif self.pads_ccnum.index(ccnum) == 1: self.state_manager.send_cuia("ARROW_DOWN") elif self.pads_ccnum.index(ccnum) == 2: self.state_manager.send_cuia("ARROW_RIGHT") elif self.pads_ccnum.index(ccnum) == 5: self.state_manager.send_cuia("ARROW_UP") elif self.pads_ccnum.index(ccnum) == 3: self.state_manager.send_cuia("ZYNSWITCH", params=["0", "P"]) elif self.pads_ccnum.index(ccnum) == 7: self.state_manager.send_cuia("ZYNSWITCH", params=["1", "P"]) elif self.pads_ccnum.index(ccnum) == 11: self.state_manager.send_cuia("ZYNSWITCH", params=["2", "P"]) elif self.pads_ccnum.index(ccnum) == 15: self.state_manager.send_cuia("ZYNSWITCH", params=["3", "P"]) elif evtype == 0x8: # Capture NoteOff ccnum = ev[1] & 0x7F if self.pads_ccnum.index(ccnum) == 3: self.state_manager.send_cuia("ZYNSWITCH", params=["0", "R"]) elif self.pads_ccnum.index(ccnum) == 7: self.state_manager.send_cuia("ZYNSWITCH", params=["1", "R"]) elif self.pads_ccnum.index(ccnum) == 11: self.state_manager.send_cuia("ZYNSWITCH", params=["2", "R"]) elif self.pads_ccnum.index(ccnum) == 15: self.state_manager.send_cuia("ZYNSWITCH", params=["3", "R"])
TODO…
- Initialise the device with SysEx Settings so that no manual intervention needs to be done on the device,
I think this is possible.
- Decide on a plan or use cases, ideas from others are welcome.
EXTRA INFO…
- AKAI MPD26 has two configurable MIDI Ins (defined as in the Menu A & B and 1 & 2 in Zynthian) so it is possible to separate which MIDI Commands go to the device driver and which to a MIDI chain.