@@ -86,30 +86,6 @@ def get_option(section, option, default):
86
86
print ("Invalid sustain split value. Options: left, right, both." )
87
87
sys .exit (1 )
88
88
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
-
113
89
def save ():
114
90
cfg = ConfigParser (allow_no_value = True )
115
91
general = cfg ['general' ] = {}
@@ -246,6 +222,12 @@ def send_cc(self, channel, cc, val):
246
222
# self.linn_out.send_messages(0xb0, [(channel, cc, val)])
247
223
248
224
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
+
249
231
self .red_lights [y ][x ] = (col == 1 )
250
232
self .send_cc (0 , 20 , x + 1 )
251
233
self .send_cc (0 , 21 , self .board_h - y - 1 )
@@ -335,13 +317,13 @@ def init_board(self):
335
317
# ]
336
318
# generate grid of octaves like above
337
319
self .octaves = []
338
- for y in range (self .board_h ):
320
+ for y in range (self .board_h + 1 ): # 1 = flipping
339
321
self .octaves .append ([])
340
322
for x in range (self .max_width ):
341
323
self .octaves [y ].append (self .init_octave (x , y ))
342
324
self .octaves = list (reversed (self .octaves ))
343
325
344
- self .notes = [None ] * 16
326
+ self .notes = [None ] * 16 # polyphony
345
327
for i in range (len (self .notes )):
346
328
self .notes [i ] = Note ()
347
329
@@ -505,6 +487,28 @@ def __init__(self):
505
487
global CORE
506
488
CORE = self
507
489
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
+
508
512
# self.panel = CHORD_ANALYZER
509
513
self .menu_sz = 32 # 64
510
514
self .max_width = 25 # MAX WIDTH OF LINNSTRUMENT
@@ -522,7 +526,7 @@ def __init__(self):
522
526
self .lowest_note_midi = None # midi number of lowest note currently pressed
523
527
self .octave = 0
524
528
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
526
530
self .octave_base = - 2
527
531
self .transpose = 0
528
532
self .rotated = False # transpose -3 whole steps
@@ -787,7 +791,7 @@ def quit(self):
787
791
788
792
def mark (self , midinote , state , use_lights = False , only_row = None ):
789
793
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
791
795
rows = [self .board [only_row ]]
792
796
y = only_row
793
797
else :
@@ -797,10 +801,11 @@ def mark(self, midinote, state, use_lights=False, only_row=None):
797
801
x = 0
798
802
for x in range (len (row )):
799
803
idx = self .get_note_index (x , y )
804
+ # print(x, y, midinote%12, idx)
800
805
if midinote % 12 == idx :
801
806
octave = self .get_octave (x , y )
802
807
if octave == midinote // 12 :
803
- self .board [y ][x ] = state
808
+ self .board [y + self . flipped ][x ] = state
804
809
if use_lights :
805
810
if state :
806
811
self .set_light (x , y , 1 )
@@ -843,20 +848,19 @@ def logic(self, dt):
843
848
self .quit ()
844
849
else :
845
850
try :
846
- n = KEYS [ev .key ]
851
+ n = self . keys [ev .key ]
847
852
n -= 12
848
- self .mark (n , 1 , True )
853
+ self .mark (n + self . vis_octave * 12 , 1 , True )
849
854
data = [0x90 , n , 127 ]
850
855
if self .midi_out :
851
856
self .midi_write (self .midi_out , data , 0 )
852
- pass
853
857
except KeyError :
854
858
pass
855
859
elif ev .type == pygame .KEYUP :
856
860
try :
857
- n = KEYS [ev .key ]
861
+ n = self . keys [ev .key ]
858
862
n -= 12
859
- self .mark (n , 0 , True )
863
+ self .mark (n + self . vis_octave * 12 , 0 , True )
860
864
data = [0x80 , n , 0 ]
861
865
if self .midi_out :
862
866
self .midi_write (self .midi_out , data , 0 )
0 commit comments