aboutsummaryrefslogtreecommitdiffstats
path: root/midi.py
blob: 7eca87ef519a1830b64f93503c261c50fbfceca8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import mido

lp_key = [[j for j in range(i * 16, i * 16 + 8)] for i in range(0,8)]

GREEN  = 124
YELLOW = 126
RED    = 3

_light_ctrl_msg = mido.Message('note_on', channel=0)
_inport = None
_outport = None

_callbacks_on_press = dict()
_callbacks_on_release = dict()

_debug = False

def midi_init(device_name="Launchpad Mini MIDI 1"):
    global _inport, _outport
    _inport = mido.open_input(device_name)
    _outport = mido.open_output(device_name)

    _inport.callback = _callback

def button_on(button, colour):
    if _debug: print(f"outport: {_outport}")

    if _outport:
        msg = _light_ctrl_msg.copy(note=button, velocity=colour)
        if _debug: print(f"sending {msg}")
        _outport.send(msg)

def button_off(button):
    if _outport:
        msg = _light_ctrl_msg.copy(note=button, velocity=0)
        _outport.send(msg)

def on_press(button, function):
    _callbacks_on_press[button] = function

def on_release(button, function):
    _callbacks_on_release[button] = function

def _callback(msg):
    if msg.velocity == 0:
        if msg.note in _callbacks_on_release:
            _callbacks_on_release[msg.note]()
    elif msg.velocity == 127:
        if msg.note in _callbacks_on_press:
            _callbacks_on_press[msg.note]()