-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathnanokontrol.py
64 lines (52 loc) · 1.32 KB
/
nanokontrol.py
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#korg controller - based off of ros-drivers/korg_nanokontrol
import pygame
import pygame.midi
import signal
import sys
import time
import os
class NanoKontrol():
controller = None
MAX_NANO_VALUE = 128
def __init__(self,id=None):
if id==None:
if os.name=='nt':
id=1 #windows condition
elif os.name=='posix':
id=3 #linux condition
pygame.midi.init()
devices = pygame.midi.get_count()
if devices<1:
print "No MIDI devices detected"
exit(-1)
print "Found %d MIDI devices" % devices
if id is not None:
input_dev = int(id)
else:
input_dev = pygame.midi.get_default_input_id()
if input_dev==-1:
print "No default MIDI input device"
exit(-1)
print "Using input device %d" % input_dev
self.controller = pygame.midi.Input(input_dev)
def _poll(self):
data = self.controller.read(1)
for event in data:
control = event[0]
timestamp = event[1]
if (control[0] & 0xF0) == 176:
control_id = control[1] | ((control[0] & 0x0F) << 8)
control_val = control[2]
print "Control ID: "+repr(control_id)+", Value: "+repr(control_val)
elif control[0] == 79: #mode button?
mode = control[1]
#time.sleep(0.1)
def start(self):
try:
while(True):
self._poll()
except KeyboardInterrupt:
pass
if __name__== "__main__":
n = NanoKontrol(3)
n.start()