diff --git a/knobs.py b/knobs.py index b29875c..215201e 100644 --- a/knobs.py +++ b/knobs.py @@ -6,7 +6,7 @@ import random class Knobs: - def __init__(self, gui, is_left_side=True): + def __init__(self, gui, knob_names, is_left_side=True): self.gui = gui self.knobs_surface = pygame.Surface((gui.screenW, gui.screenH), pygame.SRCALPHA) @@ -15,20 +15,10 @@ class Knobs: self.fade_speed = 5 self.fade_in = False self.fade_out = False + self.knob_names = knob_names self.is_left_side = is_left_side - knob_names = [ - 'Delay Time', - 'Delay Vol', - 'Reverb Wet', - 'Reverb Size', - 'Filter Freq', - 'Distortion', - 'Detune', - 'Gain' - ] - # Create and position the knobs self.knobs_radius = self.gui.screenW / 25 knobs_spacing = self.knobs_radius * 2 diff --git a/lozenge_button.py b/lozenge_button.py index 49be085..a5fa4ab 100644 --- a/lozenge_button.py +++ b/lozenge_button.py @@ -5,7 +5,7 @@ from .fonts import * class LozengeButton: - def __init__(self, gui, name, position, radius_x, radius_y): + def __init__(self, gui, name, position, radius_x, radius_y, side): self.gui = gui self.screen = gui.screen self.name = name @@ -13,6 +13,7 @@ class LozengeButton: self.y = position[1] self.radius_x = radius_x self.radius_y = radius_y + self.side = side self.focused = False def display(self): @@ -21,12 +22,12 @@ class LozengeButton: pos = pygame.mouse.get_pos() if math.sqrt(math.pow(pos[0] - self.x, 2) + math.pow(pos[1] - self.y, 2)) < self.radius_y: self.focused = True - self.gui.set_fx_mode_by_name(self.name) + self.gui.set_fx_mode_by_name(self.side, self.name) if self.focused: w = 0 fx_mode_label = font_helvetica16.render(self.name, False, color_primary_light) - self.screen.blit(fx_mode_label, (self.x + 20, self.y - 8)) + self.screen.blit(fx_mode_label, (self.x + (20 if self.side == 0 else -20-fx_mode_label.get_width()), self.y - 8)) else: w = 2 fx_mode_label = font_helvetica16.render(str(self.name)[0:1], False, color_primary_light) diff --git a/main.py b/main.py index e8da36b..0ace40b 100755 --- a/main.py +++ b/main.py @@ -22,43 +22,83 @@ class GuiMain: self.label_surface = pygame.Surface((self.screenW, self.screenH), pygame.SRCALPHA) self.fx_mode_labels = [ - 'Strings', - 'Beat', - 'L-Loop', - 'R-Loop', - 'Jack', - 'Athmo' + [ + 'Strings', + 'L-Loop', + 'R-Loop', + 'Jack', + 'Athmo' + ], + [ + 'Mixer', + 'Beat' + ] + ] + + left_knob_names = [ + 'Delay Time', + 'Delay Vol', + 'Reverb Wet', + 'Reverb Size', + 'Filter Freq', + 'Distortion', + 'Detune', + 'Gain' + ] + + mixer_knob_names = [ + 'Jack Vol', + 'Athmo Vol', + 'Beat speed', + 'L-loop Vol', + '-unassigned-', + 'Beat Vol', + 'R-loop Vol', + 'Master Vol' ] # Create and position the fx_mode buttons - self.fx_mode_buttons = [] + self.fx_mode_buttons = [[],[]] - self.fx_mode = 0 + self.fx_mode = [0, 0] - for i in range(len(self.fx_mode_labels)): + for i in range(len(self.fx_mode_labels[0])): x = self.screenW * 2.5 / 19 y = i * self.screenH / 7.5 + 45 r_x = self.screenW * 0.35 / 19 r_y = (self.screenH-20) / 16 - self.fx_mode_buttons.append( - LozengeButton(self, self.fx_mode_labels[i], (x,y), r_x, r_y) + self.fx_mode_buttons[0].append( + LozengeButton(self, self.fx_mode_labels[0][i], (x,y), r_x, r_y, 0) + ) + + for i in range(len(self.fx_mode_labels[1])): + x = self.screenW - 30 + y = i * self.screenH / 7.5 + 90 + r_x = self.screenW * 0.35 / 19 + r_y = (self.screenH-20) / 16 + self.fx_mode_buttons[1].append( + LozengeButton(self, self.fx_mode_labels[1][i], (x,y), r_x, r_y, 1) ) - self.knobs = [] - for i in range(len(self.fx_mode_labels)): - self.knobs.append(Knobs(self)) + self.knobs = [[], []] + for i in range(len(self.fx_mode_labels[0])): + self.knobs[0].append(Knobs(self, left_knob_names)) + for i in range(len(self.fx_mode_labels[1])): + self.knobs[1].append(Knobs(self, left_knob_names if i==1 else mixer_knob_names, is_left_side=False)) - self.set_fx_mode(self.fx_mode) + self.set_fx_mode(0, self.fx_mode[0]) + self.set_fx_mode(1, self.fx_mode[1]) self.show_knobs = True + self.knobs_display_side = 0 self.mute_button = BinaryButton( self.screen, - (20, self.fx_mode_buttons[0].y-20), + (20, self.fx_mode_buttons[0][0].y-20), (40, 40), 'M', False) - self.beat_button = BeatButton(self, (40, self.fx_mode_buttons[1].y), 20) - self.rloop_button = LoopButton(self, (40, self.fx_mode_buttons[2].y), 20) - self.lloop_button = LoopButton(self, (40, self.fx_mode_buttons[3].y), 20) + self.beat_button = BeatButton(self, (40, self.fx_mode_buttons[0][1].y), 20) + self.rloop_button = LoopButton(self, (40, self.fx_mode_buttons[0][2].y), 20) + self.lloop_button = LoopButton(self, (40, self.fx_mode_buttons[0][3].y), 20) self.rec_button = BinaryButton( self.screen, @@ -98,18 +138,19 @@ class GuiMain: self.clock = pygame.time.Clock() self.running = True - def set_knob_value(self, index, value): - self.knobs[self.fx_mode].set_value(index, value) + def set_knob_value(self, side, index, value): + self.knobs[side][self.fx_mode[side]].set_value(index, value) - def set_fx_mode(self, i): - self.set_fx_mode_by_name(self.fx_mode_labels[i]) + def set_fx_mode(self, side, i): + self.set_fx_mode_by_name(side, self.fx_mode_labels[side][i]) - def set_fx_mode_by_name(self, mode): - self.knobs[self.fx_mode].opacity = 0 - self.fx_mode = self.fx_mode_labels.index(mode) - self.knobs[self.fx_mode].set_focused(None) - self.knobs[self.fx_mode].fade_in = True - for b in self.fx_mode_buttons: + def set_fx_mode_by_name(self, side, mode): + self.knobs_display_side = side + self.knobs[side][self.fx_mode[side]].opacity = 0 #checke + self.fx_mode[side] = self.fx_mode_labels[side].index(mode) + self.knobs[side][self.fx_mode[side]].set_focused(None) + self.knobs[side][self.fx_mode[side]].fade_in = True + for b in self.fx_mode_buttons[side]: b.focused = (b.name == mode) def show_athmos(self, show=True): @@ -171,18 +212,19 @@ class GuiMain: self.beatplayer.update() self.athmos.update() - self.knobs[self.fx_mode].display() + self.knobs[self.knobs_display_side][self.fx_mode[self.knobs_display_side]].display() - for button in self.fx_mode_buttons: - button.display() + for i in range(2): + for button in self.fx_mode_buttons[i]: + button.display() self.mute_button.display() for i in range(1,4): pygame.draw.line(self.screen, color_primary_dark, - (self.fx_mode_buttons[i].radius_x*0.5 + 60, self.fx_mode_buttons[i].y), - (self.fx_mode_buttons[i].x - self.fx_mode_buttons[i].radius_x * 1.5, - self.fx_mode_buttons[i].y)) + (self.fx_mode_buttons[0][i].radius_x*0.5 + 60, self.fx_mode_buttons[0][i].y), + (self.fx_mode_buttons[0][i].x - self.fx_mode_buttons[0][i].radius_x * 1.5, + self.fx_mode_buttons[0][i].y)) self.beat_button.display() self.lloop_button.display() self.rloop_button.display() @@ -195,7 +237,7 @@ class GuiMain: if self.loop_input_mode is not None: self.screen.blit(self.loop_input_mode, - ((self.fx_mode_buttons[3].x+self.lloop_button.position[0])/2-self.loop_input_mode.get_width()/2, + ((self.fx_mode_buttons[0][3].x+self.lloop_button.position[0])/2-self.loop_input_mode.get_width()/2, (self.lloop_button.position[1]+self.rloop_button.position[1])/2-self.loop_input_mode.get_height()/2)) pygame.draw.polygon(self.screen, "white", [(0, self.screenH/2), (self.screenW*3 / 19, self.screenH), (0, self.screenH)])