Пример #1
0
 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'
Пример #3
0
 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))
Пример #4
0
    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)
Пример #5
0
 def _setup_APC_detail_component(self):
     self._alt_device_navigator = DetailViewCntrlComponent()