def _detail_control(self): toggler = DetailViewCntrlComponent( is_enabled=False, layer=Layer( device_nav_left_button=self.control_surface.utility_buttons[4], device_nav_right_button=self.control_surface.utility_buttons[5] )) toggler.device_nav_right_button._set_color('Alt') toggler.device_nav_left_button._set_color('Alt') return toggler
def _create_view_control(self): self._view_control = DetailViewCntrlComponent(name='View_Control', is_enabled=False, layer=Layer(device_nav_left_button=self._prev_device_button, device_nav_right_button=self._next_device_button, device_clip_toggle_button=self._clip_device_button, detail_toggle_button=self._detail_view_button)) self._view_control.device_clip_toggle_button.pressed_color = 'DefaultButton.On'
def _create_detail_view_control(self): self._detail_view_toggler = DetailViewCntrlComponent(name='Detail_View_Control', is_enabled=False, layer=Layer(device_clip_toggle_button=self._device_clip_toggle_button, detail_toggle_button=self._detail_toggle_button, device_nav_left_button=self._detail_left_button, device_nav_right_button=self._detail_right_button))
def _build_components(self): self._buttons = {} for identifier in range(5, 53) + range(64, 68): # We create the shift button in a special way if identifier == OP1_SHIFT_BUTTON: continue # Encoders present as buttons when values are changed button = APCUtils.make_pedal_button(identifier) button.add_value_listener(self.debug_button_handler) self._buttons[identifier] = button # Encoder buttons # See notes below for explanation of exclusion of first button # for identifier in [OP1_ENCODER_2_BUTTON, OP1_ENCODER_3_BUTTON, OP1_ENCODER_4_BUTTON]: # button = APCUtils.make_pedal_button(identifier) # button.add_value_listener(self.debug_button_handler) # APCUtils.make_pedal_button(identifier] = butto) self._notes = {} for identifier in range(OP1_MIN_NOTE, OP1_MAX_NOTE + 1): note = APCUtils.make_button(CHANNEL, identifier) note.add_value_listener(self.debug_note_handler) self._notes[identifier] = note # Buttons self._button_shift = ButtonElement( is_momentary=True, msg_type=MIDI_CC_TYPE, channel=0, identifier=OP1_SHIFT_BUTTON, # Required for modifier buttons resource_type=PrioritizedResource, name='ShiftButton', ) # self._button_shift.add_value_listener(self.on_shift_button) self._button_mode_synth = self._buttons[OP1_MODE_1_BUTTON] self._button_mode_drum = self._buttons[OP1_MODE_2_BUTTON] self._button_mode_tape = self._buttons[OP1_MODE_3_BUTTON] self._button_mode_mixer = self._buttons[OP1_MODE_4_BUTTON] self._button_mode_1 = self._buttons[OP1_T1_BUTTON] self._button_mode_2 = self._buttons[OP1_T2_BUTTON] self._button_mode_3 = self._buttons[OP1_T3_BUTTON] self._button_mode_4 = self._buttons[OP1_T4_BUTTON] self._button_down = self._buttons[OP1_ARROW_DOWN_BUTTON] self._button_up = self._buttons[OP1_ARROW_UP_BUTTON] self._button_left = self._buttons[OP1_LEFT_ARROW] self._button_right = self._buttons[OP1_RIGHT_ARROW] self._button_metronome = self._buttons[OP1_METRONOME_BUTTON] self._button_scissors = self._buttons[OP1_SCISSOR_BUTTON] self._button_ss1 = self._buttons[OP1_SS1_BUTTON] self._button_ss2 = self._buttons[OP1_SS2_BUTTON] self._button_ss3 = self._buttons[OP1_SS3_BUTTON] self._button_ss4 = self._buttons[OP1_SS4_BUTTON] self._button_ss5 = self._buttons[OP1_SS5_BUTTON] self._button_ss6 = self._buttons[OP1_SS6_BUTTON] self._button_ss7 = self._buttons[OP1_SS7_BUTTON] self._button_ss8 = self._buttons[OP1_SS8_BUTTON] self._button_record = self._buttons[OP1_REC_BUTTON] self._button_play = self._buttons[OP1_PLAY_BUTTON] self._button_stop = self._buttons[OP1_STOP_BUTTON] self._button_microphone = self._buttons[OP1_MICROPHONE] self._button_com = self._buttons[OP1_COM] self._button_sequencer = self._buttons[OP1_SEQUENCER] # Encoders self._encoder_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_1, ENCODER_MODE) self._encoder_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_2, ENCODER_MODE) self._encoder_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_3, ENCODER_MODE) self._encoder_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_4, ENCODER_MODE) self._unshift_encoder_1 = ShiftEnabledControl(self._encoder_1, self._button_shift, False, self) self._unshift_encoder_2 = ShiftEnabledControl(self._encoder_2, self._button_shift, False, self) self._unshift_encoder_3 = ShiftEnabledControl(self._encoder_3, self._button_shift, False, self) self._unshift_encoder_4 = ShiftEnabledControl(self._encoder_4, self._button_shift, False, self) self._shift_encoder_1 = ShiftEnabledControl(self._encoder_1, self._button_shift, True, self) self._shift_encoder_2 = ShiftEnabledControl(self._encoder_2, self._button_shift, True, self) self._shift_encoder_3 = ShiftEnabledControl(self._encoder_3, self._button_shift, True, self) self._shift_encoder_4 = ShiftEnabledControl(self._encoder_4, self._button_shift, True, self) self._encoder_u01_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_1, ENCODER_MODE) self._encoder_u01_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_2, ENCODER_MODE) self._encoder_u01_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_3, ENCODER_MODE) self._encoder_u01_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_4, ENCODER_MODE) self._unshift_encoder_u01_1 = ShiftEnabledControl( self._encoder_u01_1, self._button_shift, False, self) self._unshift_encoder_u01_2 = ShiftEnabledControl( self._encoder_u01_2, self._button_shift, False, self) self._unshift_encoder_u01_3 = ShiftEnabledControl( self._encoder_u01_3, self._button_shift, False, self) self._unshift_encoder_u01_4 = ShiftEnabledControl( self._encoder_u01_4, self._button_shift, False, self) self._shift_encoder_u01_1 = ShiftEnabledControl( self._encoder_u01_1, self._button_shift, True, self) self._shift_encoder_u01_2 = ShiftEnabledControl( self._encoder_u01_2, self._button_shift, True, self) self._shift_encoder_u01_3 = ShiftEnabledControl( self._encoder_u01_3, self._button_shift, True, self) self._shift_encoder_u01_4 = ShiftEnabledControl( self._encoder_u01_4, self._button_shift, True, self) self._encoder_u02_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_1, ENCODER_MODE) self._encoder_u02_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_2, ENCODER_MODE) self._encoder_u02_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_3, ENCODER_MODE) self._encoder_u02_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_4, ENCODER_MODE) # NOTE: encoder_1_button conflicts with encoder_U03_4 self._encoder_button_1 = self._buttons[OP1_ENCODER_1_BUTTON] self._encoder_button_2 = self._buttons[OP1_ENCODER_2_BUTTON] self._encoder_button_3 = self._buttons[OP1_ENCODER_3_BUTTON] self._encoder_button_4 = self._buttons[OP1_ENCODER_4_BUTTON] self._mixer = MixerComponent( num_tracks=NUM_TRACKS, num_returns=2, ) # self._mixer.set_select_buttons( # prev_button=self._button_up, # next_button=self._button_down, # ) # self.map_mixer_controls_for_current_track() def on_down_button(value): if value == BUTTON_ON: self.set_selected_scene(self.scene_offset + 1) def on_up_button(value): if value == BUTTON_ON: self.set_selected_scene(self.scene_offset - 1) self.scene_offset = 0 self.song().view.add_selected_scene_listener( self.selected_scene_changed) self._button_right.add_value_listener(on_down_button) self._button_left.add_value_listener(on_up_button) self._transport = TransportComponent() self._transport.set_metronome_button(self._button_metronome) # # Controls for navigating the bottom detail pane # self._device_navigation = DetailViewCntrlComponent() # Toggle hide/show of bottom detail pane self._device_navigation.set_detail_toggle_button(self._button_ss1) # Toggle between clip detail and effects detail in bottom detail pane self._device_navigation.set_device_clip_toggle_button(self._button_ss2) # Nav left/right in the device chain detail view in bottom pane self._device_navigation.device_nav_left_button.set_control_element( self._button_ss7) self._device_navigation.device_nav_right_button.set_control_element( self._button_ss8) # Clip firing self._notes[OP1_F3_NOTE].add_value_listener(partial( self.clip_fired, 0)) self._notes[OP1_G3_NOTE].add_value_listener(partial( self.clip_fired, 1)) self._notes[OP1_A3_NOTE].add_value_listener(partial( self.clip_fired, 2)) self._notes[OP1_B3_NOTE].add_value_listener(partial( self.clip_fired, 3)) self._notes[OP1_C4_NOTE].add_value_listener(partial( self.clip_fired, 4)) self._notes[OP1_D4_NOTE].add_value_listener(partial( self.clip_fired, 5)) self._notes[OP1_E4_NOTE].add_value_listener(partial( self.clip_fired, 6)) self._notes[OP1_F4_NOTE].add_value_listener(partial( self.clip_fired, 7)) self._button_scissors.add_value_listener(self.selected_clip_deleted)
def _setup_APC_detail_component(self): self._alt_device_navigator = DetailViewCntrlComponent()