import time
from pylibftdi import Device
[docs]
class MidiDevice(Device):
[docs]
def __init__(self, *o, **k):
Device.__init__(self, *o, **k)
self.baudrate = 31250
MAJOR_INTERVAL = [2, 2, 1, 2, 2, 2, 1, 2]
MINOR_INTERVAL = [2, 1, 2, 2, 1, 2, 2, 2]
START_NOTE = 48
[docs]
def volume(beat):
return 100 if beat % 2 else 127
[docs]
def scale():
midi = MidiDevice()
note = START_NOTE
for i in range(8):
midi.write(f"\x90{chr(note)}{chr(volume(i))}")
time.sleep(0.25)
midi.write(f"\x90{chr(note)}\x00")
note += MAJOR_INTERVAL[i]
time.sleep(0.125)
time.sleep(0.5)
for i in range(8):
note -= MINOR_INTERVAL[7 - i]
midi.write(f"\x90{chr(note)}{chr(volume(i))}")
time.sleep(0.35)
midi.write(f"\x90{chr(note)}\x00")
time.sleep(0.125)
if __name__ == "__main__":
scale()