from simplemidi.midiplayer import MidiPlayer, _Event, sortTime from simplemidi.midiio import MidiOutputPort from simplemidi.midimessage import MidiType, MidiMessage, NoteOn, NoteOff, MidiVoiceMessage from pad import Pad from simplemidi.options import * import time from simplemidi.midieventtrigger import * class PadRouter(Pad): _DEFAULT_PARAMS = dictAssign(MidiPlayer._DEFAULT_PARAMS, Pad._DEFAULT_PARAMS, { 'port_in': { 'client_name': 'Pad Helper', 'port_name': 'Pad In' }, 'port_out': { 'client_name': 'Pad Helper', 'port_name': 'Pad Out' }, 'port_sound_out': { 'client_name': 'MidiPlayer' }, 'pad_translate': 0, }) def __init__(self, adapter, params={}): param = initParams(PadRouter._DEFAULT_PARAMS, params) Pad.__init__(self, adapter, param) self.padTranslate = param['pad_translate'] def setPadTranslate(self, n): self.padTranslate = n def onNoteOn(self, ch, idx, val): self.oport.noteOn(ch, idx - self.padTranslate, val) def onNoteOff(self, ch, idx, val): self.oport.noteOff(ch, idx - self.padTranslate, val) def send(self, evt): if evt.track == self.padTrack: if evt.type == MidiType.NOTE_ON: if (evt.key + self.padTranslate + self.transposeNote) in self.ledbuttons: self[ evt.key + self.padTranslate + self.transposeNote] = evt.evt.velocity else: MidiPlayer.send(self, evt)