def __init__(self, *a, **k): (super(Elements, self).__init__)(*a, **k) self.shift_button = create_button(32, 'Shift_Button', resource_type=PrioritizedResource) self.zoom_button = create_button(104, 'Zoom_Button', resource_type=PrioritizedResource) self.note_repeat_button = create_button(24, 'Note_Repeat_Button') self.full_level_button = create_button(25, 'Full_Level_Button') self.bank_button = create_button(26, 'Bank_Button') self.preset_button = create_button(27, 'Preset_Button') self.show_hide_button = create_button(29, 'Show_Hide_Button') self.nudge_button = create_button(30, 'Nudge_Button') self.editor_button = create_button(31, 'Editor_Button') self.set_loop_button = create_button(85, 'Set_Loop_Button') self.setup_button = create_button(86, 'Setup_Button') self.up_button = create_button(87, 'Up_Button') self.down_button = create_button(89, 'Down_Button') self.left_button = create_button(90, 'Left_Button') self.right_button = create_button(102, 'Right_Button') self.select_button = create_button(103, 'Select_Button') self.click_button = create_button(105, 'Click_Button') self.record_button = create_button(107, 'Record_Button') self.play_button = create_button(109, 'Play_Button') self.stop_button = create_button(111, 'Stop_Button') self.pads_raw = [[ create_button((offset + col_index), ('{}_Pad_{}'.format(col_index, row_index)), msg_type=MIDI_NOTE_TYPE) for col_index in range(SESSION_WIDTH) ] for row_index, offset in enumerate(range(48, 32, -4))] self.pads = ButtonMatrixElement(rows=(self.pads_raw), name='Pads') def with_modifier(modifier_button, button): return ComboElement(control=button, modifier=modifier_button, name=('{}_With_{}'.format( button.name, modifier_button.name.split('_')[0]))) self.play_button_with_shift = with_modifier(self.shift_button, self.play_button) self.stop_button_with_shift = with_modifier(self.shift_button, self.stop_button) self.pads_with_shift = ButtonMatrixElement( name='Pads_With_Shift', rows=(recursive_map(partial(with_modifier, self.shift_button), self.pads_raw))) self.pads_with_zoom = ButtonMatrixElement( name='Pads_With_Zoom', rows=(recursive_map(partial(with_modifier, self.zoom_button), self.pads_raw))) self.encoders = ButtonMatrixElement(rows=[[ create_encoder(index + 14, 'Encoder_{}'.format(index)) for index in range(4) ]], name='Encoders') self.native_mode_reply_element = InputControlElement( MIDI_CC_TYPE, 15, 127, name='Native_Mode_Reply_Element')
def __init__(self, note_layout=None, *a, **k): raise note_layout is not None or AssertionError super(InstrumentPresetsComponent, self).__init__(*a, **k) self._note_layout = note_layout self._line_names = recursive_map(DisplayDataSource, (('Scale layout:', ), ('4th ^', '4th >', '3rd ^', '3rd >', 'Sequent ^', 'Sequent >', '', ''))) self.add_mode('scale_p4_vertical', partial(self._set_scale_mode, True, 3), self._line_names[1][0]) self.add_mode('scale_p4_horizontal', partial(self._set_scale_mode, False, 3), self._line_names[1][1]) self.add_mode('scale_m3_vertical', partial(self._set_scale_mode, True, 2), self._line_names[1][2]) self.add_mode('scale_m3_horizontal', partial(self._set_scale_mode, False, 2), self._line_names[1][3]) self.add_mode('scale_m6_vertical', partial(self._set_scale_mode, True, None), self._line_names[1][4]) self.add_mode('scale_m6_horizontal', partial(self._set_scale_mode, False, None), self._line_names[1][5])
def __init__(self, note_layout=None, *a, **k): raise note_layout is not None or AssertionError super(InstrumentScalesComponent, self).__init__(*a, **k) self._note_layout = note_layout self._key_center_buttons = [] self._encoder_touch_button_slots = self.register_slot_manager() self._encoder_touch_buttons = [] self._top_key_center_buttons = None self._bottom_key_center_buttons = None self._absolute_relative_button = None self._diatonic_chromatic_button = None self._info_sources = map(DisplayDataSource, ('Scale selection:', '', '')) self._line_sources = recursive_map(DisplayDataSource, (('', '', '', '', '', '', ''), ('', '', '', '', '', '', ''))) self._scale_sources = map( partial(DisplayDataSource, adjust_string_fn=adjust_string_crop), ('', '', '', '')) self._presets = self.register_component( InstrumentPresetsComponent(self._note_layout, is_enabled=False)) self._presets.selected_mode = 'scale_p4_vertical' self._scale_list = self.register_component( ListComponent(data_sources=self._scale_sources)) self._scale_list.scrollable_list.fixed_offset = 1 self._scale_list.scrollable_list.assign_items(SCALES) self._scale_list.scrollable_list.select_item_index_with_offset( list(SCALES).index(self._note_layout.scale), 1) self._on_selected_scale.subject = self._scale_list.scrollable_list self._update_data_sources()
def __init__(self, *a, **k): super(Elements, self).__init__(*a, **k) self.display_line1 = self._create_display_line(sysex.CLEAR_LINE1, sysex.WRITE_LINE1, 0) self.display_line2 = self._create_display_line(sysex.CLEAR_LINE2, sysex.WRITE_LINE2, 1) self.display_line3 = self._create_display_line(sysex.CLEAR_LINE3, sysex.WRITE_LINE3, 2) self.display_line4 = self._create_display_line(sysex.CLEAR_LINE4, sysex.WRITE_LINE4, 3) self.display_lines = [self.display_line1, self.display_line2, self.display_line3, self.display_line4] with_shift = partial(ComboElement, modifier=self.shift_button) self.shifted_matrix = ButtonMatrixElement(name='Shifted_Button_Matrix', rows=recursive_map(with_shift, self.matrix_rows_raw)) touch_strip_mode_element = SysexElement(send_message_generator=sysex.make_touch_strip_mode_message) touch_strip_light_element = SysexElement(send_message_generator=sysex.make_touch_strip_light_message) self.touch_strip_tap = create_note_button(12, 'Touch_Strip_Tap') self.touch_strip_control = TouchStripElement(name='Touch_Strip_Control', touch_button=self.touch_strip_tap, mode_element=touch_strip_mode_element, light_element=touch_strip_light_element) self.touch_strip_control.set_feedback_delay(-1) self.touch_strip_control.set_needs_takeover(False) base_message_generator = make_send_message_generator(sysex.SET_AFTERTOUCH_MODE) def make_aftertouch_mode_message(mode_id): raise mode_id in ('polyphonic', 'mono') or AssertionError mode_message = sysex.POLY_AFTERTOUCH if mode_id == 'polyphonic' else sysex.MONO_AFTERTOUCH return base_message_generator(mode_message) self.aftertouch_control = SysexElement(sysex_identifier=sysex.SET_AFTERTOUCH_MODE, send_message_generator=make_aftertouch_mode_message, default_value='polyphonic')
def __init__(self, *a, **k): (super(Elements, self).__init__)(a, continuous_mapping_sensitivity=CONTINUOUS_MAPPING_SENSITIVITY, fine_grained_continuous_mapping_sensitivity=FINE_GRAINED_CONTINUOUS_MAPPING_SENSITIVITY, **k) self.display_line1 = self._create_display_line(sysex.CLEAR_LINE1, sysex.WRITE_LINE1, 0) self.display_line2 = self._create_display_line(sysex.CLEAR_LINE2, sysex.WRITE_LINE2, 1) self.display_line3 = self._create_display_line(sysex.CLEAR_LINE3, sysex.WRITE_LINE3, 2) self.display_line4 = self._create_display_line(sysex.CLEAR_LINE4, sysex.WRITE_LINE4, 3) self.display_lines = [ self.display_line1, self.display_line2, self.display_line3, self.display_line4] with_shift = partial(ComboElement, modifier=(self.shift_button)) self.shifted_matrix = ButtonMatrixElement(name='Shifted_Button_Matrix', rows=(recursive_map(with_shift, self.matrix_rows_raw))) touch_strip_mode_element = SysexElement(send_message_generator=(sysex.make_touch_strip_mode_message)) touch_strip_light_element = SysexElement(send_message_generator=(sysex.make_touch_strip_light_message)) self.touch_strip_tap = create_note_button(12, 'Touch_Strip_Tap') self.touch_strip_control = TouchStripElement(name='Touch_Strip_Control', touch_button=(self.touch_strip_tap), mode_element=touch_strip_mode_element, light_element=touch_strip_light_element) self.touch_strip_control.set_feedback_delay(-1) self.touch_strip_control.set_needs_takeover(False) base_message_generator = make_send_message_generator(sysex.SET_AFTERTOUCH_MODE) def make_aftertouch_mode_message(mode_id): mode_message = sysex.POLY_AFTERTOUCH if mode_id == 'polyphonic' else sysex.MONO_AFTERTOUCH return base_message_generator(mode_message) self.aftertouch_control = SysexElement(sysex_identifier=(sysex.SET_AFTERTOUCH_MODE), send_message_generator=make_aftertouch_mode_message, default_value='polyphonic')
def __init__(self, note_layout = None, *a, **k): raise note_layout is not None or AssertionError super(InstrumentPresetsComponent, self).__init__(*a, **k) self._note_layout = note_layout self._line_names = recursive_map(DisplayDataSource, (('Scale layout:',), ('4th ^', '4th >', '3rd ^', '3rd >', 'Sequent ^', 'Sequent >', '', ''))) self.add_mode('scale_p4_vertical', partial(self._set_scale_mode, True, 3), self._line_names[1][0]) self.add_mode('scale_p4_horizontal', partial(self._set_scale_mode, False, 3), self._line_names[1][1]) self.add_mode('scale_m3_vertical', partial(self._set_scale_mode, True, 2), self._line_names[1][2]) self.add_mode('scale_m3_horizontal', partial(self._set_scale_mode, False, 2), self._line_names[1][3]) self.add_mode('scale_m6_vertical', partial(self._set_scale_mode, True, None), self._line_names[1][4]) self.add_mode('scale_m6_horizontal', partial(self._set_scale_mode, False, None), self._line_names[1][5])
def __init__(self, *a, **k): super(Elements, self).__init__(*a, **k) self.display_line1 = self._create_display_line(sysex.CLEAR_LINE1, sysex.WRITE_LINE1, 0) self.display_line2 = self._create_display_line(sysex.CLEAR_LINE2, sysex.WRITE_LINE2, 1) self.display_line3 = self._create_display_line(sysex.CLEAR_LINE3, sysex.WRITE_LINE3, 2) self.display_line4 = self._create_display_line(sysex.CLEAR_LINE4, sysex.WRITE_LINE4, 3) self.display_lines = [ self.display_line1, self.display_line2, self.display_line3, self.display_line4 ] with_shift = partial(ComboElement, modifier=self.shift_button) self.shifted_matrix = ButtonMatrixElement(name='Shifted_Button_Matrix', rows=recursive_map( with_shift, self.matrix_rows_raw)) touch_strip_mode_element = SysexElement( send_message_generator=sysex.make_touch_strip_mode_message) touch_strip_light_element = SysexElement( send_message_generator=sysex.make_touch_strip_light_message) self.touch_strip_tap = create_note_button(12, 'Touch_Strip_Tap') self.touch_strip_control = TouchStripElement( name='Touch_Strip_Control', touch_button=self.touch_strip_tap, mode_element=touch_strip_mode_element, light_element=touch_strip_light_element) self.touch_strip_control.set_feedback_delay(-1) self.touch_strip_control.set_needs_takeover(False) base_message_generator = make_send_message_generator( sysex.SET_AFTERTOUCH_MODE) def make_aftertouch_mode_message(mode_id): raise mode_id in ('polyphonic', 'mono') or AssertionError mode_message = sysex.POLY_AFTERTOUCH if mode_id == 'polyphonic' else sysex.MONO_AFTERTOUCH return base_message_generator(mode_message) self.aftertouch_control = SysexElement( sysex_identifier=sysex.SET_AFTERTOUCH_MODE, send_message_generator=make_aftertouch_mode_message, default_value='polyphonic')
def __init__(self, note_layout = None, *a, **k): raise note_layout is not None or AssertionError super(InstrumentScalesComponent, self).__init__(*a, **k) self._note_layout = note_layout self._key_center_buttons = [] self._encoder_touch_button_slots = self.register_slot_manager() self._encoder_touch_buttons = [] self._top_key_center_buttons = None self._bottom_key_center_buttons = None self._absolute_relative_button = None self._diatonic_chromatic_button = None self._info_sources = map(DisplayDataSource, ('Scale selection:', '', '')) self._line_sources = recursive_map(DisplayDataSource, (('', '', '', '', '', '', ''), ('', '', '', '', '', '', ''))) self._scale_sources = map(partial(DisplayDataSource, adjust_string_fn=adjust_string_crop), ('', '', '', '')) self._presets = self.register_component(InstrumentPresetsComponent(self._note_layout, is_enabled=False)) self._presets.selected_mode = 'scale_p4_vertical' self._scale_list = self.register_component(ListComponent(data_sources=self._scale_sources)) self._scale_list.scrollable_list.fixed_offset = 1 self._scale_list.scrollable_list.assign_items(SCALES) self._scale_list.scrollable_list.select_item_index_with_offset(list(SCALES).index(self._note_layout.scale), 1) self._on_selected_scale.subject = self._scale_list.scrollable_list self._update_data_sources()
def __init__(self, deleter = None, undo_handler = None, pad_sensitivity_update = None, playhead = None, *a, **k): raise deleter is not None or AssertionError raise undo_handler is not None or AssertionError raise playhead is not None or AssertionError super(Elements, self).__init__(*a, **k) self.foot_pedal_button = DoublePressElement(create_button(69, 'Foot_Pedal', is_rgb=True)) self.nav_up_button = create_button(46, 'Up_Arrow') self.nav_down_button = create_button(47, 'Down_Arrow') self.nav_left_button = create_button(44, 'Left_Arrow') self.nav_right_button = create_button(45, 'Right_Arrow') self.shift_button = create_modifier_button(49, 'Shift_Button') self.select_button = create_modifier_button(48, 'Select_Button') self.delete_button = create_modifier_button(118, 'Delete_Button', undo_step_handler=undo_handler) self.duplicate_button = create_modifier_button(88, 'Duplicate_Button', undo_step_handler=undo_handler) self.quantize_button = create_modifier_button(116, 'Quantization_Button', undo_step_handler=undo_handler) self.accent_button = create_modifier_button(57, 'Accent_Button') self.in_button = create_button(62, 'In_Button') self.out_button = create_button(63, 'Out_Button') self.master_select_button = create_button(28, 'Master_Select_Button') self.octave_down_button = create_button(54, 'Octave_Down_Button') self.octave_up_button = create_button(55, 'Octave_Up_Button') self.repeat_button = create_button(56, 'Repeat_Button') self.global_mute_button = create_modifier_button(60, 'Global_Mute_Button') self.global_solo_button = create_modifier_button(61, 'Global_Solo_Button') self.global_track_stop_button = create_modifier_button(29, 'Track_Stop_Button') self.scale_presets_button = create_button(58, 'Scale_Presets_Button') self.vol_mix_mode_button = create_button(114, 'Vol_Mix_Mode_Button') self.device_mode_button = create_button(110, 'Device_Mode_Button') self.clip_mode_button = create_button(113, 'Clip_Mode_Button') self.browse_mode_button = create_button(111, 'Browse_Mode_Button') self.single_track_mix_mode_button = create_button(112, 'Single_Track_Mode_Button') self.pan_send_mix_mode_button = create_button(115, 'Pan_Send_Mode_Button', resource_type=PrioritizedResource) self.note_mode_button = create_button(50, 'Note_Mode_Button') self.session_mode_button = create_button(51, 'Session_Mode_Button') self.play_button = create_button(85, 'Play_Button') self.new_button = create_button(87, 'New_Button') self.automation_button = create_button(89, 'Automation_Button') self.tap_tempo_button = create_button(3, 'Tap_Tempo_Button') self.metronome_button = create_button(9, 'Metronome_Button') self.fixed_length_button = create_button(90, 'Fixed_Length_Button') self.record_button = create_modifier_button(86, 'Record_Button') self.undo_button = create_button(119, 'Undo_Button') self.create_device_button = create_button(52, 'Create_Device_Button', undo_step_handler=undo_handler) self.create_track_button = create_button(53, 'Create_Track_Button', undo_step_handler=undo_handler) self.double_button = create_button(117, 'Double_Button', undo_step_handler=undo_handler) self.user_button = create_button(59, 'User_Button', undo_step_handler=undo_handler) self.select_buttons_raw = [ create_button(20 + idx, 'Track_Select_Button' + str(idx)) for idx in xrange(8) ] self.select_buttons = ButtonMatrixElement(name='Track_Select_Buttons', rows=[self.select_buttons_raw]) self.track_state_buttons_raw = [ create_button(102 + idx, 'Track_State_Button' + str(idx), is_rgb=True) for idx in xrange(8) ] self.track_state_buttons = ButtonMatrixElement(name='Track_State_Buttons', rows=[self.track_state_buttons_raw]) self.side_buttons_raw = [ create_button(36 + idx, 'Scene_Launch_Button' + str(idx)) for idx in reversed(xrange(8)) ] self.side_buttons = ButtonMatrixElement(name='Scene_Launch_Buttons', rows=[self.side_buttons_raw]) @depends(skin=None) def create_pad_button(pad_id, name, skin = None, **k): return PadButtonElement(pad_id, pad_sensitivity_update, True, MIDI_NOTE_TYPE, 0, (36 + pad_id), skin=skin, name=name, **k) self.matrix_rows_raw = [ [ create_pad_button((7 - row) * 8 + column, str(column) + '_Clip_' + str(row) + '_Button', is_rgb=True, default_states={True: 'DefaultMatrix.On', False: 'DefaultMatrix.Off'}) for column in xrange(8) ] for row in xrange(8) ] double_press_rows = recursive_map(DoublePressElement, self.matrix_rows_raw) self.matrix = ButtonMatrixElement(name='Button_Matrix', rows=self.matrix_rows_raw) self.double_press_matrix = ButtonMatrixElement(name='Double_Press_Matrix', rows=double_press_rows) self.single_press_event_matrix = ButtonMatrixElement(name='Single_Press_Event_Matrix', rows=recursive_map(lambda x: x.single_press, double_press_rows)) self.double_press_event_matrix = ButtonMatrixElement(name='Double_Press_Event_Matrix', rows=recursive_map(lambda x: x.double_press, double_press_rows)) self.tempo_control_tap = create_note_button(10, 'Tempo_Control_Tap') self.tempo_control = TouchEncoderElement(channel=0, identifier=14, map_mode=consts.GLOBAL_MAP_MODE, name='Tempo_Control', undo_step_handler=undo_handler, delete_handler=deleter, encoder_sensitivity=consts.ENCODER_SENSITIVITY, touch_element=self.tempo_control_tap) self.swing_control_tap = create_note_button(9, 'Swing_Control_Tap') self.swing_control = TouchEncoderElement(channel=0, identifier=15, map_mode=consts.GLOBAL_MAP_MODE, name='Swing_Control', undo_step_handler=undo_handler, delete_handler=deleter, encoder_sensitivity=consts.ENCODER_SENSITIVITY, touch_element=self.swing_control_tap) self.master_volume_control_tap = create_note_button(8, 'Master_Volume_Tap') self.master_volume_control = TouchEncoderElement(channel=0, identifier=79, map_mode=consts.GLOBAL_MAP_MODE, undo_step_handler=undo_handler, delete_handler=deleter, name='Master_Volume_Control', encoder_sensitivity=consts.ENCODER_SENSITIVITY, touch_element=self.master_volume_control_tap) self.master_volume_control.mapping_sensitivity = consts.CONTINUOUS_MAPPING_SENSITIVITY self.global_param_touch_buttons_raw = [ create_note_button(index, 'Track_Control_Touch_' + str(index), resource_type=PrioritizedResource) for index in range(8) ] self.global_param_touch_buttons = ButtonMatrixElement(name='Track_Control_Touches', rows=[self.global_param_touch_buttons_raw]) self.parameter_controls_raw = [ TouchEncoderElement(channel=0, identifier=71 + index, map_mode=consts.GLOBAL_MAP_MODE, undo_step_handler=undo_handler, delete_handler=deleter, encoder_sensitivity=consts.ENCODER_SENSITIVITY, name='Track_Control_' + str(index), touch_element=self.global_param_touch_buttons_raw[index]) for index in xrange(8) ] self.global_param_controls = ButtonMatrixElement(name='Track_Controls', rows=[self.parameter_controls_raw]) self.fine_grain_param_controls_raw = [ FineGrainWithModifierEncoderElement(encoder, self.shift_button, consts.FINE_GRAINED_CONTINUOUS_MAPPING_SENSITIVITY, consts.CONTINUOUS_MAPPING_SENSITIVITY) for encoder in self.parameter_controls_raw ] self.fine_grain_param_controls = ButtonMatrixElement(rows=[self.fine_grain_param_controls_raw]) self.any_touch_button = MultiElement(*self.global_param_touch_buttons.nested_control_elements()) self.playhead_element = PlayheadElement(playhead)