Exemplo n.º 1
0
    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')
Exemplo n.º 2
0
 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])
Exemplo n.º 3
0
 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()
Exemplo n.º 9
0
    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)