def _create_controls(self): super(KeyLabMkII, self)._create_controls() def make_button_row(index_offset, name): return ButtonMatrixElement(rows=[ [ create_button(index + index_offset, name=('{}_{}').format(name, index)) for index in xrange(8) ]], name=('{}s').format(name)) self._select_buttons = make_button_row(24, 'Select_Button') self._solo_buttons = make_button_row(8, 'Solo_Button') self._mute_buttons = make_button_row(16, 'Mute_Button') self._record_arm_buttons = make_button_row(0, 'Record_Arm_Buttons') self._automation_button = create_button(56, name='Automation_Button') self._re_enable_automation_button = create_button(57, name='Re_Enable_Automation_Button') self._view_button = create_button(74, name='View_Button') self._pads = ButtonMatrixElement(rows=[ [ create_button(identifier, channel=9, name=('Pad_{}_{}').format(col_index, row_index)) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_IDS) ]) self._pad_leds = ButtonMatrixElement(rows=[ [ create_pad_led(identifier, ('Pad_LED_{}_{}').format(col_index, row_index)) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_LED_IDS) ], name='Pad_LED_Matrix') self._display = PhysicalDisplayElement(DISPLAY_LINE_WIDTH, name='Display') self._display.set_message_parts(sysex.LCD_SET_STRING_MESSAGE_HEADER + (sysex.LCD_LINE_1_ITEM_ID,), ( sysex.NULL, sysex.LCD_LINE_2_ITEM_ID) + (ord(' '),) * DISPLAY_LINE_WIDTH + (sysex.NULL, sysex.END_BYTE)) self._mixer_mode_cycle_button = create_button(51, name='Mixer_Mode_Cycle_Button') self._vegas_mode_switch = SysexElement(send_message_generator=lambda b: sysex.VEGAS_MODE_MESSAGE_HEADER + ( b, sysex.END_BYTE), name='Vegas_Mode_Switch')
class KeyLabMkII(KeyLabEssential): 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(KeyLabMkII, self).__init__(*a, **k) with self.component_guard(): self._create_session_recording() def _create_controls(self): super(KeyLabMkII, self)._create_controls() def make_button_row(index_offset, name): return ButtonMatrixElement(rows=[ [ create_button(index + index_offset, name=('{}_{}').format(name, index)) for index in xrange(8) ]], name=('{}s').format(name)) self._select_buttons = make_button_row(24, 'Select_Button') self._solo_buttons = make_button_row(8, 'Solo_Button') self._mute_buttons = make_button_row(16, 'Mute_Button') self._record_arm_buttons = make_button_row(0, 'Record_Arm_Buttons') self._automation_button = create_button(56, name='Automation_Button') self._re_enable_automation_button = create_button(57, name='Re_Enable_Automation_Button') self._view_button = create_button(74, name='View_Button') self._pads = ButtonMatrixElement(rows=[ [ create_button(identifier, channel=9, name=('Pad_{}_{}').format(col_index, row_index)) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_IDS) ]) self._pad_leds = ButtonMatrixElement(rows=[ [ create_pad_led(identifier, ('Pad_LED_{}_{}').format(col_index, row_index)) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_LED_IDS) ], name='Pad_LED_Matrix') self._display = PhysicalDisplayElement(DISPLAY_LINE_WIDTH, name='Display') self._display.set_message_parts(sysex.LCD_SET_STRING_MESSAGE_HEADER + (sysex.LCD_LINE_1_ITEM_ID,), ( sysex.NULL, sysex.LCD_LINE_2_ITEM_ID) + (ord(' '),) * DISPLAY_LINE_WIDTH + (sysex.NULL, sysex.END_BYTE)) self._mixer_mode_cycle_button = create_button(51, name='Mixer_Mode_Cycle_Button') self._vegas_mode_switch = SysexElement(send_message_generator=lambda b: sysex.VEGAS_MODE_MESSAGE_HEADER + ( b, sysex.END_BYTE), name='Vegas_Mode_Switch') def _create_mixer(self): super(KeyLabMkII, self)._create_mixer() self._mixer.layer += Layer(track_select_buttons=self._select_buttons, solo_buttons=self._solo_buttons, mute_buttons=self._mute_buttons, arm_buttons=self._record_arm_buttons, selected_track_name_display=self._display) self._mixer_modes = ModesComponent(name='Mixer_Modes') self._mixer_modes.add_mode('volume_mode', AddLayerMode(self._mixer, Layer(volume_controls=self._faders))) self._mixer_modes.add_mode('sends_a_mode', AddLayerMode(self._mixer, Layer(send_controls=self._faders))) self._mixer_modes.layer = Layer(cycle_mode_button=self._mixer_mode_cycle_button) self._mixer_modes.selected_mode = 'volume_mode' def _create_session_recording(self): self._session_recording = SessionRecordingComponent(name='Session_Recording', is_enabled=False, layer=Layer(automation_button=self._automation_button, re_enable_automation_button=self._re_enable_automation_button)) self._session_recording.set_enabled(True) def _create_view_control(self): super(KeyLabMkII, self)._create_view_control() self._view_control.layer += Layer(document_view_toggle_button=self._view_button) def _create_hardware_settings(self): super(KeyLabMkII, self)._create_hardware_settings() self._hardware_settings.layer += Layer(vegas_mode_switch=self._vegas_mode_switch)
class KeyLabMkII(KeyLabEssential): 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(KeyLabMkII, self).__init__)(*a, **k) with self.component_guard(): self._create_device_parameters() self._create_encoder_modes() self._create_session_recording() def _create_controls(self): super(KeyLabMkII, self)._create_controls() def make_button_row(index_offset, name): return ButtonMatrixElement(rows=[[ create_button((index + index_offset), name=('{}_{}'.format(name, index))) for index in range(8) ]], name=('{}s'.format(name))) self._select_buttons = make_button_row(24, 'Select_Button') self._solo_buttons = make_button_row(8, 'Solo_Button') self._mute_buttons = make_button_row(16, 'Mute_Button') self._record_arm_buttons = make_button_row(0, 'Record_Arm_Buttons') self._automation_button = create_button(56, name='Automation_Button') self._re_enable_automation_button = create_button( 57, name='Re_Enable_Automation_Button') self._view_button = create_button(74, name='View_Button') self._pads = ButtonMatrixElement(rows=[[ InputOnlyButton(True, MIDI_NOTE_TYPE, 9, identifier, name=('Pad_{}_{}'.format(col_index, row_index))) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_IDS)]) self._pad_leds = ButtonMatrixElement(rows=[[ create_pad_led(identifier, 'Pad_LED_{}_{}'.format(col_index, row_index)) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate(PAD_LED_IDS)], name='Pad_LED_Matrix') self._display = PhysicalDisplayElement(DISPLAY_LINE_WIDTH, name='Display') self._display.set_message_parts( sysex.LCD_SET_STRING_MESSAGE_HEADER + (sysex.LCD_LINE_1_ITEM_ID, ), (sysex.NULL, sysex.LCD_LINE_2_ITEM_ID) + (ord(' '), ) * DISPLAY_LINE_WIDTH + (sysex.NULL, sysex.END_BYTE)) self._encoder_mode_cycle_button = InputOnlyButton( True, MIDI_NOTE_TYPE, 0, 51, name='Mixer_Mode_Cycle_Button') self._vegas_mode_switch = SysexElement( send_message_generator=(lambda b: sysex.VEGAS_MODE_MESSAGE_HEADER + (b, sysex.END_BYTE)), name='Vegas_Mode_Switch') self._encoder_mode_led = create_pad_led(42, name='Encoder_Mode_Led') def _create_mixer(self): super(KeyLabMkII, self)._create_mixer() self._mixer.layer += Layer(track_select_buttons=(self._select_buttons), solo_buttons=(self._solo_buttons), mute_buttons=(self._mute_buttons), arm_buttons=(self._record_arm_buttons), selected_track_name_display=(self._display), volume_controls=(self._faders)) def _create_encoder_modes(self): self._encoder_modes = ModesComponent(name='Mixer_Modes') self._encoder_modes.add_mode( 'pan_mode', (AddLayerMode(self._mixer, Layer(pan_controls=(self._encoders))), partial(self._encoder_mode_led.send_value, ENCODER_MODE_TO_COLOR['pan_mode']))) self._encoder_modes.add_mode( 'sends_a_mode', (AddLayerMode( self._mixer, Layer(send_a_controls=(self._encoders))), partial(self._encoder_mode_led.send_value, ENCODER_MODE_TO_COLOR['sends_a_mode']))) self._encoder_modes.add_mode( 'sends_b_mode', (AddLayerMode( self._mixer, Layer(send_b_controls=(self._encoders))), partial(self._encoder_mode_led.send_value, ENCODER_MODE_TO_COLOR['sends_b_mode']))) self._encoder_modes.layer = Layer( cycle_mode_button=(self._encoder_mode_cycle_button)) self._encoder_modes.add_mode( 'device_mode', (self._device_parameters, partial(self._encoder_mode_led.send_value, ENCODER_MODE_TO_COLOR['device_mode']))) self._encoder_modes.selected_mode = 'pan_mode' def _create_device_parameters(self): self._device_parameters = SimpleDeviceParameterComponent( name='Device_Parameters', is_enabled=False, device_bank_registry=(self._device_bank_registry), layer=Layer(parameter_controls=(self._encoders))) def _create_session_recording(self): self._session_recording = SessionRecordingComponent( name='Session_Recording', is_enabled=False, layer=Layer(automation_button=(self._automation_button), re_enable_automation_button=( self._re_enable_automation_button))) self._session_recording.set_enabled(True) def _create_view_control(self): super(KeyLabMkII, self)._create_view_control() self._view_control.layer += Layer( document_view_toggle_button=(self._view_button)) def _create_hardware_settings(self): super(KeyLabMkII, self)._create_hardware_settings() self._hardware_settings.layer += Layer( vegas_mode_switch=(self._vegas_mode_switch)) @listens('daw_preset') def _on_memory_preset_changed_on_hardware(self, is_daw_preset_on): super(KeyLabMkII, self)._on_memory_preset_changed_on_hardware(is_daw_preset_on) if is_daw_preset_on: self._encoder_mode_led.send_value( ENCODER_MODE_TO_COLOR[self._encoder_modes.selected_mode])