@@ -10,6 +10,7 @@ def __init__(self, midi_in, midi_out, *, in_channel=None, out_channel=0):
10
10
self .in_channel = in_channel
11
11
self .out_channel = out_channel
12
12
self ._debug = True
13
+ self ._outbuf = bytearray (4 )
13
14
14
15
@property
15
16
def in_channel (self ):
@@ -32,15 +33,25 @@ def out_channel(self, channel):
32
33
self ._out_channel = channel
33
34
34
35
def note_on (self , note , vel , channel = None ):
35
- if not (0 <= note <= 0x7F ):
36
- raise RuntimeError ("Note value invalid" )
37
- if not (0 <= vel <= 0x7F ):
38
- raise RuntimeError ("Velocity invalid" )
36
+ self ._generic_3 (self .NOTE_ON , note , vel , channel )
37
+
38
+ def note_off (self , note , vel , channel = None ):
39
+ self ._generic_3 (self .NOTE_OFF , note , vel , channel )
40
+
41
+
42
+ def _generic_3 (self , cmd , arg1 , arg2 , channel = None ):
43
+ if not (0 <= arg1 <= 0x7F ):
44
+ raise RuntimeError ("Argument 1 value %d invalid" % arg1 )
45
+ if not (0 <= arg2 <= 0x7F ):
46
+ raise RuntimeError ("Argument 2 value %d invalid" % arg2 )
39
47
if not channel :
40
48
channel = self ._out_channel
41
- self ._send ([self .NOTE_ON | channel , note , vel ])
49
+ self ._outbuf [0 ] = (cmd & 0xF0 ) | channel
50
+ self ._outbuf [1 ] = arg1
51
+ self ._outbuf [2 ] = arg2
52
+ self ._send (self ._outbuf , 3 )
42
53
43
- def _send (self , packet ):
54
+ def _send (self , packet , num ):
44
55
if self ._debug :
45
- print ("Sending: " , [hex (i ) for i in packet ])
46
- print (self ._midi_out (packet ))
56
+ print ("Sending: " , [hex (i ) for i in packet [: num ] ])
57
+ print (self ._midi_out . write (packet , num ))
0 commit comments