Guest User

continuous hi-hat control with mididings

a guest
Dec 20th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.12 KB | None | 0 0
  1. from mididings import *
  2. from mididings.engine import *
  3. from mididings.event import *
  4.  
  5. class HiHatController:
  6.     def __init__(self):
  7.         self.pedal = -1
  8.         self.open = 1;
  9.         self.close = 0;
  10.     def __call__(self, ev):
  11.         if ev.type_ == CTRL and ev.param == 4:
  12.             self.pedal = ev.value
  13.             print "pedal ", self.pedal
  14.             if ev.value < 20:
  15.                 self.open = 1
  16.                 self.close = 0
  17.                 return None
  18.             elif ev.value >= 35: #  <--- questo probabilmente va abbassato a 30
  19.                 self.close = 1
  20.             if self.open == 1 and self.close == 1:
  21.                 self.open = 0
  22.                 self.close = 0
  23.                 print "banzai!"
  24.                 return [
  25.                     NoteOffEvent(ev.port, ev.channel, 39, 127),
  26.                     NoteOffEvent(ev.port, ev.channel, 40, 127),
  27.                     NoteOffEvent(ev.port, ev.channel, 41, 127),
  28.                     NoteOffEvent(ev.port, ev.channel, 42, 127),
  29.                     NoteOffEvent(ev.port, ev.channel, 43, 127),
  30.  
  31.                     NoteOffEvent(ev.port, ev.channel, 46, 127),
  32.                     NoteOffEvent(ev.port, ev.channel, 47, 127),
  33.                     NoteOffEvent(ev.port, ev.channel, 48, 127),
  34.                     NoteOffEvent(ev.port, ev.channel, 49, 127),
  35.                     NoteOffEvent(ev.port, ev.channel, 50, 127),
  36.                 ]
  37.         elif ev.type_ == NOTEON and (ev.note == 37 or ev.note == 44) and self.pedal != -1:
  38.             var = ev.note
  39.             if(self.pedal < 1):
  40.                 ev.note += 6;
  41.             elif(self.pedal < 5):
  42.                 ev.note += 5;
  43.             elif(self.pedal < 10):
  44.                 ev.note += 4;
  45.             elif(self.pedal < 20):
  46.                 ev.note += 3;
  47.             elif(self.pedal < 35):
  48.                 ev.note += 2;
  49.             elif(self.pedal < 85):
  50.                 ev.note += 1;
  51.             print "note in=", var, " out=", ev.note
  52.         return ev
  53.  
  54. run([
  55.         Filter(NOTEOFF) >> Discard(),
  56.         Filter(NOTEON|CTRL) >> Process(HiHatController())
  57.     ] >> Velocity(gamma=0.75)
  58. )
Advertisement
Add Comment
Please, Sign In to add comment