Skip to content

Commit 1b7e2e1

Browse files
author
ladyada
committed
use a buffer, generic sender
1 parent f4e9082 commit 1b7e2e1

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

adafruit_midi.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def __init__(self, midi_in, midi_out, *, in_channel=None, out_channel=0):
1010
self.in_channel = in_channel
1111
self.out_channel = out_channel
1212
self._debug = True
13+
self._outbuf = bytearray(4)
1314

1415
@property
1516
def in_channel(self):
@@ -32,15 +33,25 @@ def out_channel(self, channel):
3233
self._out_channel = channel
3334

3435
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)
3947
if not channel:
4048
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)
4253

43-
def _send(self, packet):
54+
def _send(self, packet, num):
4455
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

Comments
 (0)