padrouter.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from simplemidi.midiplayer import MidiPlayer, _Event, sortTime
  2. from simplemidi.midiio import MidiOutputPort
  3. from simplemidi.midimessage import MidiType, MidiMessage, NoteOn, NoteOff, MidiVoiceMessage
  4. from pad import Pad
  5. from simplemidi.options import *
  6. import time
  7. from simplemidi.midieventtrigger import *
  8. class PadRouter(Pad):
  9. _DEFAULT_PARAMS = dictAssign(MidiPlayer._DEFAULT_PARAMS,
  10. Pad._DEFAULT_PARAMS, {
  11. 'port_in': {
  12. 'client_name': 'Pad Helper',
  13. 'port_name': 'Pad In'
  14. },
  15. 'port_out': {
  16. 'client_name': 'Pad Helper',
  17. 'port_name': 'Pad Out'
  18. },
  19. 'port_sound_out': {
  20. 'client_name': 'MidiPlayer'
  21. },
  22. 'pad_translate': 0,
  23. })
  24. def __init__(self, adapter, params={}):
  25. param = initParams(PadRouter._DEFAULT_PARAMS, params)
  26. Pad.__init__(self, adapter, param)
  27. self.padTranslate = param['pad_translate']
  28. def setPadTranslate(self, n):
  29. self.padTranslate = n
  30. def onNoteOn(self, ch, idx, val):
  31. self.oport.noteOn(ch, idx - self.padTranslate, val)
  32. def onNoteOff(self, ch, idx, val):
  33. self.oport.noteOff(ch, idx - self.padTranslate, val)
  34. def send(self, evt):
  35. if evt.track == self.padTrack:
  36. if evt.type == MidiType.NOTE_ON:
  37. if (evt.key + self.padTranslate + self.transposeNote) in self.ledbuttons: self[
  38. evt.key + self.padTranslate + self.transposeNote] = evt.evt.velocity
  39. else:
  40. MidiPlayer.send(self, evt)