diff --git a/mixer.py b/mixer.py index 7583495..3aeefcd 100755 --- a/mixer.py +++ b/mixer.py @@ -155,11 +155,17 @@ class Mixer: def shutdown(self): self.nrpn_parameter_control(midi_ch=0, mixer_ch=0, id=0x5F, va=0x00, vx=0x00) - def set_bank_1(self): - msb = mido.Message("control_change", channel=0, control=0x00, value=0x00) - lsb = mido.Message("control_change", channel=0, control=0x20, value=0x00) + def set_bank(self, bank_no): + if bank_no < 1 or bank_no > 16384: + raise ValueError(f"bank_no param must be between 0 and 16384, got {bank_no}") - msg_bytes = bytes(msb.bytes() + lsb.bytes()) + msb_val = ((bank_no - 1) >> 7) & 0xFF + lsb_val = (bank_no - 1) & 0x7F + + control_change_msb = mido.Message("control_change", channel=0, control=0x00, value=msb_val) + control_change_lsb = mido.Message("control_change", channel=0, control=0x20, value=lsb_val) + + msg_bytes = bytes(control_change_msb.bytes() + control_change_lsb.bytes()) print(" ".join(f"{b:02X}" for b in msg_bytes)) self.sock.sendall(msg_bytes) @@ -167,7 +173,7 @@ class Mixer: def scene_recall(self, scene_id): print(f"scene_recall: scene_id={scene_id}") - self.set_bank_1() + self.set_bank(1) msb = mido.Message("program_change", channel=0, program=scene_id) msg_bytes = bytes(msb.bytes())