コード例 #1
0
class KeyLabEssential(ControlSurface):
    mixer_component_type = MixerComponent
    session_component_type = SessionComponent
    view_control_component_type = ViewControlComponent
    hardware_settings_component_type = HardwareSettingsComponent
    channel_strip_component_type = ChannelStripComponent

    def __init__(self, *a, **k):
        super(KeyLabEssential, self).__init__(*a, **k)
        with self.component_guard():
            with inject(skin=const(default_skin)).everywhere():
                self._create_controls()
            self._create_hardware_settings()
        self._on_focused_view_changed.subject = self.application.view
        self._hardware_settings.set_hardware_live_mode_enabled(True)
        self._on_memory_preset_changed_on_hardware.subject = self._hardware_settings
        self._hardware_settings.select_memory_preset(
            sysex.DAW_MEMORY_PRESET_INDEX)
        with self.component_guard():
            self._create_transport()
            self._create_undo()
            self._create_session()
            self._create_navigation()
            self._create_mixer()
            self._create_view_control()
            self._create_arrangement()
            self._create_jogwheel_modes()

    def port_settings_changed(self):
        super(KeyLabEssential, self).port_settings_changed()
        self._hardware_settings.set_hardware_live_mode_enabled(True)

    def _create_controls(self):
        self._hardware_live_mode_switch = SysexElement(
            send_message_generator=lambda b: sysex.LIVE_MODE_MESSAGE_HEADER +
            (b, sysex.END_BYTE),
            default_value=sysex.OFF_VALUE,
            name=u'Hardware_Live_Mode_Switch')
        self._memory_preset_switch = SysexElement(
            send_message_generator=lambda b: sysex.
            MEMORY_PRESET_SWITCH_MESSAGE_HEADER + (b, sysex.END_BYTE),
            sysex_identifier=sysex.MEMORY_PRESET_SWITCH_MESSAGE_HEADER,
            name=u'Memory_Preset_Switch')
        self._memory_preset_select_mode_switch = SysexElement(
            sysex_identifier=sysex.MEMORY_PRESET_SELECT_MODE_MESSAGE_HEADER,
            name=u'Memory_Preset_Select_Mode')
        self._play_button = create_button(94, u'Play_Button')
        self._stop_button = create_button(93, u'Stop_Button')
        self._punch_in_button = create_button(87, u'Punch_In_Button')
        self._punch_out_button = create_button(88, u'Punch_Out_Button')
        self._metronome_button = create_button(89, u'Metronome_Button')
        self._loop_button = create_button(86, u'Loop_Button')
        self._rwd_button = create_button(91, u'Rewind_Button')
        self._ff_button = create_button(92, u'Fast_Forward_Button')
        self._record_button = create_button(95, u'Record_Button')
        self._undo_button = create_button(81, u'Undo_Button')
        self._bank_left_button = create_button(46, u'Bank_Left_Button')
        self._bank_right_button = create_button(47, u'Bank_Right_Button')
        self._left_button = create_button(48, u'Left_Button')
        self._right_button = create_button(49, u'Right_Button')
        self._left_arrow_button = create_button(98, u'Left_Arrow_Button')
        self._right_arrow_button = create_button(99, u'Right_Arrow_Button')
        self._marker_button = create_button(84, u'Marker_Button')
        self._pads = ButtonMatrixElement(rows=[[
            create_button(col + 36, u'Pad_%d' % (col, ), channel=10)
            for col in xrange(8)
        ]],
                                         name=u'Pad_Matrix')
        self._pad_leds = ButtonMatrixElement(rows=[[
            create_pad_led(column + 112, u'Pad_LED_%d' % (column, ))
            for column in xrange(8)
        ]],
                                             name=u'Pad_LED_Matrix')
        self._faders = ButtonMatrixElement(rows=[[
            SliderElement(msg_type=MIDI_PB_TYPE,
                          channel=index,
                          identifier=None,
                          name=u'Fader_%d' % (index, )) for index in xrange(8)
        ]],
                                           name=u'Faders')
        self._master_fader = SliderElement(MIDI_PB_TYPE,
                                           8,
                                           identifier=None,
                                           name=u'Master_Fader')
        self._encoders = ButtonMatrixElement(rows=[[
            create_ringed_encoder(index + 16, index + 48, u'Encoder_%d' %
                                  (index, )) for index in xrange(8)
        ]])
        self._jogwheel = EncoderElement(
            MIDI_CC_TYPE,
            0,
            60,
            Live.MidiMap.MapMode.relative_smooth_signed_bit,
            name=u'Jogwheel')

    def _create_hardware_settings(self):
        self._hardware_settings = self.hardware_settings_component_type(
            is_enabled=False,
            layer=Layer(
                hardware_live_mode_switch=self._hardware_live_mode_switch,
                memory_preset_switch=self._memory_preset_switch,
                memory_preset_select_mode_switch=self.
                _memory_preset_select_mode_switch),
            name=u'Hardware_Settings')
        self._hardware_settings.set_enabled(True)

    def _create_transport(self):
        self._transport = TransportComponent(
            is_enabled=False,
            layer=Layer(play_button=self._play_button,
                        stop_button=self._stop_button,
                        punch_in_button=self._punch_in_button,
                        punch_out_button=self._punch_out_button,
                        loop_button=self._loop_button,
                        metronome_button=self._metronome_button,
                        record_button=self._record_button))
        self._transport.set_seek_buttons(self._ff_button, self._rwd_button)
        self._transport.set_enabled(True)

    def _create_undo(self):
        self._undo = UndoComponent(is_enabled=False,
                                   layer=Layer(undo_button=self._undo_button))
        self._undo.set_enabled(True)

    def _create_session(self):
        self._session_ring = SessionRingComponent(
            num_tracks=self._pads.width(),
            num_scenes=self._pads.height(),
            name=u'Session_Ring')
        self._session_ring.set_enabled(False)
        self._session = self.session_component_type(
            session_ring=self._session_ring,
            name=u'Session',
            is_enabled=False,
            layer=Layer(clip_launch_buttons=self._pads,
                        clip_slot_leds=self._pad_leds))
        self._session.set_enabled(True)

    def _create_navigation(self):
        self._session_navigation = SessionNavigationComponent(
            session_ring=self._session_ring,
            is_enabled=False,
            layer=Layer(page_left_button=self._bank_left_button,
                        page_right_button=self._bank_right_button,
                        left_button=self._left_button,
                        right_button=self._right_button),
            name=u'Session_Navigation')
        self._session_navigation.set_enabled(True)

    def _create_mixer(self):
        self._mixer = self.mixer_component_type(
            tracks_provider=self._session_ring,
            channel_strip_component_type=self.channel_strip_component_type,
            is_enabled=False,
            layer=Layer(volume_controls=self._faders,
                        pan_controls=self._encoders))
        self._mixer.master_strip().set_volume_control(self._master_fader)
        self._mixer.set_enabled(True)

    def _create_view_control(self):
        self._view_control = self.view_control_component_type(
            is_enabled=False,
            layer=Layer(prev_track_button=self._left_arrow_button,
                        next_track_button=self._right_arrow_button,
                        scene_scroll_encoder=self._jogwheel),
            name=u'View_Control')
        self._view_control.set_enabled(True)

    def _create_arrangement(self):
        self._arrangement = ArrangementComponent(
            is_enabled=False,
            layer=Layer(set_or_delete_cue_button=self._marker_button),
            name=u'Arrangement')
        self._arrangement.set_enabled(True)

    def _create_jogwheel_modes(self):
        self._jogwheel_modes = ModesComponent()
        self._jogwheel_modes.add_mode(
            u'Session',
            AddLayerMode(self._view_control,
                         Layer(scene_scroll_encoder=self._jogwheel)))
        self._jogwheel_modes.add_mode(
            u'Arranger',
            AddLayerMode(self._arrangement,
                         Layer(jump_encoder=self._jogwheel)))
        self._on_focused_view_changed()

    @listens(u'focused_document_view')
    def _on_focused_view_changed(self):
        view = self.application.view.focused_document_view
        if self._jogwheel_modes:
            self._jogwheel_modes.selected_mode = view

    @listens(u'daw_preset')
    def _on_memory_preset_changed_on_hardware(self, is_daw_preset_on):
        self._session.set_allow_update(is_daw_preset_on)
        if is_daw_preset_on:
            for control in self.controls:
                control.clear_send_cache()

        self._session.set_enabled(is_daw_preset_on)
コード例 #2
0
class IRigKeysIO(ControlSurface):
    def __init__(self, *a, **k):
        (super(IRigKeysIO, self).__init__)(*a, **k)
        with self.component_guard():
            self._create_controls()
            self._create_mixer()
            self._create_transport()

    def _create_controls(self):
        self._encoders = ButtonMatrixElement(rows=[[
            EncoderElement(MIDI_CC_TYPE,
                           0,
                           identifier,
                           map_mode=(Live.MidiMap.MapMode.absolute),
                           name=('Volume_Encoder_{}'.format(index)))
            for index, identifier in enumerate(range(12, 20))
        ]],
                                             name='Volume_Encoders')
        self._data_encoder = EncoderElement(
            MIDI_CC_TYPE,
            0,
            22,
            map_mode=(Live.MidiMap.MapMode.relative_smooth_two_compliment),
            name='Data_Encoder')
        self._data_encoder_button = ButtonElement(True,
                                                  MIDI_CC_TYPE,
                                                  0,
                                                  23,
                                                  name='Data_Encoder_Button',
                                                  skin=skin)
        self._play_button = ButtonElement(False,
                                          MIDI_CC_TYPE,
                                          0,
                                          118,
                                          name='Play_Button',
                                          skin=skin)
        self._record_button = ButtonElement(False,
                                            MIDI_CC_TYPE,
                                            0,
                                            119,
                                            name='Record_Button',
                                            skin=skin)
        self._record_stop_button = ButtonElement(False,
                                                 MIDI_CC_TYPE,
                                                 0,
                                                 116,
                                                 name='Record_Stop_Button',
                                                 skin=skin)
        self._stop_button = ButtonElement(False,
                                          MIDI_CC_TYPE,
                                          0,
                                          117,
                                          name='Stop_Button',
                                          skin=skin)
        self._pads = ButtonMatrixElement(rows=[[
            ButtonElement(True,
                          MIDI_NOTE_TYPE,
                          PAD_CHANNEL,
                          identifier,
                          name=('Pad_{}'.format(index)),
                          skin=skin)
            for index, identifier in enumerate(PAD_IDS)
        ]])

    def _create_mixer(self):
        self._session_ring = SelectedTrackFollowingSessionRingComponent(
            is_enabled=False,
            num_tracks=(self._encoders.width()),
            num_scenes=(self._encoders.height()),
            name='Session_Ring')
        self._mixer = MixerComponent(tracks_provider=(self._session_ring),
                                     name='Mixer')
        self._mixer.layer = Layer(
            volume_controls=(self._encoders),
            track_scroll_encoder=(self._data_encoder),
            selected_track_arm_button=(self._data_encoder_button),
            mute_buttons=(self._pads))

    def _create_transport(self):
        self._transport = TransportComponent(name='Transport')
        self._transport.layer = Layer(play_button=(self._play_button),
                                      stop_button=(self._stop_button))
        self._session_recording = SessionRecordingComponent(
            name='Session_Recording')
        self._session_recording.layer = Layer(
            record_button=(self._record_button),
            record_stop_button=(self._record_stop_button))