Skip to content

Commit c8dba8a

Browse files
committed
light bugfixes
1 parent 8586145 commit c8dba8a

File tree

1 file changed

+38
-34
lines changed

1 file changed

+38
-34
lines changed

app.py

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -86,30 +86,6 @@ def get_option(section, option, default):
8686
print("Invalid sustain split value. Options: left, right, both.")
8787
sys.exit(1)
8888

89-
# simulator keys
90-
KEYS = {}
91-
i = 0
92-
for key in '1234567890-=':
93-
KEYS[ord(key)] = 62 + i
94-
i += 2
95-
KEYS[pygame.K_BACKSPACE] = 62 + i
96-
i = 0
97-
for key in 'qwertyuiop[]\\':
98-
KEYS[ord(key)] = 57 + i
99-
i += 2
100-
i = 0
101-
for key in 'asdfghjkl;\'':
102-
KEYS[ord(key)] = 52 + i
103-
i += 2
104-
KEYS[pygame.K_RETURN] = 52 + i
105-
i = 0
106-
for key in 'zxcvbnm,./':
107-
KEYS[ord(key)] = 47 + i
108-
i += 2
109-
KEYS[pygame.K_RSHIFT] = 47 + i
110-
del i
111-
112-
11389
def save():
11490
cfg = ConfigParser(allow_no_value=True)
11591
general = cfg['general'] = {}
@@ -246,6 +222,12 @@ def send_cc(self, channel, cc, val):
246222
# self.linn_out.send_messages(0xb0, [(channel, cc, val)])
247223

248224
def set_light(self, x, y, col): # col is [1,11], 0 resets
225+
226+
if y < 0 or y > self.board_h:
227+
return
228+
if x < 0 or x > self.board_w:
229+
return
230+
249231
self.red_lights[y][x] = (col==1)
250232
self.send_cc(0, 20, x+1)
251233
self.send_cc(0, 21, self.board_h - y - 1)
@@ -335,13 +317,13 @@ def init_board(self):
335317
# ]
336318
# generate grid of octaves like above
337319
self.octaves = []
338-
for y in range(self.board_h):
320+
for y in range(self.board_h + 1): # 1 = flipping
339321
self.octaves.append([])
340322
for x in range(self.max_width):
341323
self.octaves[y].append(self.init_octave(x, y))
342324
self.octaves = list(reversed(self.octaves))
343325

344-
self.notes = [None] * 16
326+
self.notes = [None] * 16 # polyphony
345327
for i in range(len(self.notes)):
346328
self.notes[i] = Note()
347329

@@ -505,6 +487,28 @@ def __init__(self):
505487
global CORE
506488
CORE = self
507489

490+
# simulator keys
491+
self.keys = {}
492+
i = 0
493+
for key in '1234567890-=':
494+
self.keys[ord(key)] = 62 + i
495+
i += 2
496+
self.keys[pygame.K_BACKSPACE] = 62 + i
497+
i = 0
498+
for key in 'qwertyuiop[]\\':
499+
self.keys[ord(key)] = 57 + i
500+
i += 2
501+
i = 0
502+
for key in 'asdfghjkl;\'':
503+
self.keys[ord(key)] = 52 + i
504+
i += 2
505+
self.keys[pygame.K_RETURN] = 52 + i
506+
i = 0
507+
for key in 'zxcvbnm,./':
508+
self.keys[ord(key)] = 47 + i
509+
i += 2
510+
self.keys[pygame.K_RSHIFT] = 47 + i
511+
508512
# self.panel = CHORD_ANALYZER
509513
self.menu_sz = 32 # 64
510514
self.max_width = 25 # MAX WIDTH OF LINNSTRUMENT
@@ -522,7 +526,7 @@ def __init__(self):
522526
self.lowest_note_midi = None # midi number of lowest note currently pressed
523527
self.octave = 0
524528
self.out_octave = 0
525-
self.vis_octave = -2
529+
self.vis_octave = -2 # this is for both the visualizer and the keyboard simulator marking atm
526530
self.octave_base = -2
527531
self.transpose = 0
528532
self.rotated = False # transpose -3 whole steps
@@ -787,7 +791,7 @@ def quit(self):
787791

788792
def mark(self, midinote, state, use_lights=False, only_row=None):
789793
if only_row is not None:
790-
only_row = self.board_h - only_row - 1 #flip
794+
only_row = self.board_h - only_row - 1 - self.flipped #flip
791795
rows = [self.board[only_row]]
792796
y = only_row
793797
else:
@@ -797,10 +801,11 @@ def mark(self, midinote, state, use_lights=False, only_row=None):
797801
x = 0
798802
for x in range(len(row)):
799803
idx = self.get_note_index(x, y)
804+
# print(x, y, midinote%12, idx)
800805
if midinote%12 == idx:
801806
octave = self.get_octave(x, y)
802807
if octave == midinote//12:
803-
self.board[y][x] = state
808+
self.board[y+self.flipped][x] = state
804809
if use_lights:
805810
if state:
806811
self.set_light(x, y, 1)
@@ -843,20 +848,19 @@ def logic(self, dt):
843848
self.quit()
844849
else:
845850
try:
846-
n = KEYS[ev.key]
851+
n = self.keys[ev.key]
847852
n -= 12
848-
self.mark(n, 1, True)
853+
self.mark(n + self.vis_octave * 12, 1, True)
849854
data = [0x90, n, 127]
850855
if self.midi_out:
851856
self.midi_write(self.midi_out, data, 0)
852-
pass
853857
except KeyError:
854858
pass
855859
elif ev.type == pygame.KEYUP:
856860
try:
857-
n = KEYS[ev.key]
861+
n = self.keys[ev.key]
858862
n -= 12
859-
self.mark(n, 0, True)
863+
self.mark(n + self.vis_octave * 12, 0, True)
860864
data = [0x80, n, 0]
861865
if self.midi_out:
862866
self.midi_write(self.midi_out, data, 0)

0 commit comments

Comments
 (0)