Пример #1
0
    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')
Пример #2
0
 def _create_controls(self):
     self._play_button = MultiElement(create_button(16, u'Play_Button'), create_button(17, u'Play_Button_With_Shift'))
     self._record_button = create_button(18, u'Record_Button')
     self._count_in_button = create_button(19, u'Count_In_Button')
     self._stop_button = create_button(20, u'Stop_Button')
     self._clear_button = create_button(21, u'Clear_Button')
     self._loop_button = create_button(22, u'Loop_Button')
     self._metronome_button = create_button(23, u'Metronome_Button')
     self._tap_tempo_button = create_button(24, u'Tap_Tempo_Button')
     self._undo_button = create_button(32, u'Undo_Button')
     self._redo_button = create_button(33, u'Redo_Button')
     self._quantize_button = create_button(34, u'Quantize_Button')
     self._automation_button = create_button(35, u'Automation_Button')
     self._clip_launch_button = create_button(96, u'Clip_Launch_Button')
     self._track_stop_button = create_button(97, u'Track_Stop_Button')
     self._jump_encoder = create_encoder(52, u'Jump_Encoder')
     self._loop_encoder = create_encoder(53, u'Loop_Encoder')
     self._volume_encoders = ButtonMatrixElement(rows=[[ create_encoder(index + 80, u'Volume_Encoder_{}'.format(index), is_s_mk2=self.is_s_mk2) for index in xrange(NUM_TRACKS) ]], name=u'Volume_Encoders')
     self._pan_encoders = ButtonMatrixElement(rows=[[ create_encoder(index + 88, u'Pan_Encoder_{}'.format(index), is_s_mk2=self.is_s_mk2) for index in xrange(NUM_TRACKS) ]], name=u'Pan_Encoders')
     self._track_name_displays = ButtonMatrixElement(rows=[[ create_display_line(sysex.TRACK_NAME_DISPLAY_HEADER, index, u'Track_Name_Display_{}'.format(index), width=33 if self.is_s_mk2 else 11) for index in xrange(NUM_TRACKS) ]], name=u'Track_Name_Displays')
     self._track_volume_displays = ButtonMatrixElement(rows=[[ create_display_line(sysex.TRACK_VOLUME_DISPLAY_HEADER, index, u'Track_Volume_Display_{}'.format(index), width=12) for index in xrange(NUM_TRACKS) ]], name=u'Track_Volume_Displays')
     self._track_panning_displays = ButtonMatrixElement(rows=[[ create_display_line(sysex.TRACK_PANNING_DISPLAY_HEADER, index, u'Track_Panning_Display_{}'.format(index), width=12) for index in xrange(NUM_TRACKS) ]], name=u'Track_Panning_Displays')
     self._track_type_displays = ButtonMatrixElement(rows=[[ create_sysex_element(sysex.TRACK_TYPE_DISPLAY_HEADER, index, u'Track_Type_Display_{}'.format(index)) for index in xrange(NUM_TRACKS) ]], name=u'Track_Type_Displays')
     self._track_mute_displays = ButtonMatrixElement(rows=[[ create_sysex_element(sysex.TRACK_MUTE_DISPLAY_HEADER, index, u'Track_Mute_Display_{}'.format(index)) for index in xrange(NUM_TRACKS) ]], name=u'Track_Mute_Displays')
     self._track_solo_displays = ButtonMatrixElement(rows=[[ create_sysex_element(sysex.TRACK_SOLO_DISPLAY_HEADER, index, u'Track_Solo_Display_{}'.format(index)) for index in xrange(NUM_TRACKS) ]], name=u'Track_Solo_Displays')
     self._track_muted_via_solo_displays = ButtonMatrixElement(rows=[[ create_sysex_element(sysex.TRACK_MUTED_VIA_SOLO_DISPLAY_HEADER, index, u'Track_Muted_via_Solo_Display_{}'.format(index)) for index in xrange(NUM_TRACKS) ]], name=u'Track_Muted_via_Solo_Displays')
     self._track_selection_displays = ButtonMatrixElement(rows=[[ create_sysex_element(sysex.TRACK_SELECT_DISPLAY_HEADER, index, u'Track_Selection_Display_{}'.format(index)) for index in xrange(NUM_TRACKS) ]], name=u'Track_Selection_Displays')
     self._focus_follow_control = SysexElement(lambda value: sysex.TRACK_CHANGED_DISPLAY_HEADER + value + (midi.SYSEX_END,), name=u'Focus_Follow_Control')
     self._handshake_control = create_button(1, u'Handshake_Control')
     self._handshake_control.reset = nop
     self._on_handshake_response.subject = self._handshake_control
Пример #3
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')
 def __init__(self, skin=None, *a, **k):
     (super(Elements, self).__init__)(*a, **k)
     self._create_drum_pads()
     self._create_scale_pads()
     self._create_scale_feedback_switch()
     self.note_mode_button = create_button(96, 'Note_Mode_Button')
     self.custom_mode_button = create_button(97, 'Custom_Mode_Button')
     self.record_button = create_button(98, 'Record_Button')
     self.button_faders = ButtonMatrixElement(rows=[
      [create_slider(index + self.button_fader_cc_offset, 'Button_Fader_{}'.format(index)) for index in range(SESSION_WIDTH)]],
       name='Button_Faders')
     self.button_fader_color_elements_raw = [create_button((index + self.button_fader_cc_offset), ('Button_Fader_Color_Element_{}'.format(index)), channel=BUTTON_FADER_COLOR_CHANNEL) for index in range(SESSION_WIDTH)]
     self.button_fader_color_elements = ButtonMatrixElement(rows=[
      self.button_fader_color_elements_raw],
       name='Button_Fader_Color_Elements')
     self.note_layout_switch = SysexElement(name='Note_Layout_Switch',
       send_message_generator=(lambda v: sysex.STD_MSG_HEADER + (
      ids.LP_X_ID, sysex.NOTE_LAYOUT_COMMAND_BYTE, v, sysex.SYSEX_END_BYTE)),
       default_value=(sysex.SCALE_LAYOUT_BYTE))
     session_button_color_identifier = sysex.STD_MSG_HEADER + (ids.LP_X_ID, 20)
     self.session_button_color_element = ColorSysexElement(name='Session_Button_Color_Element',
       sysex_identifier=session_button_color_identifier,
       send_message_generator=(lambda v: session_button_color_identifier + v + (sysex.SYSEX_END_BYTE,)),
       skin=skin)
     self.button_fader_setup_element = SysexElement(name='Button_Fader_Setup_Element',
       send_message_generator=(partial(self._fader_setup_message_generator, 0)))
 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)
     ]])
Пример #6
0
 def _create_controls(self):
     self._pads_raw = [
         ButtonElement(True,
                       MIDI_NOTE_TYPE,
                       0,
                       identifier,
                       name=u'Pad_{}'.format(identifier),
                       skin=skin) for identifier in range(100)
     ]
     self._session_matrix = ButtonMatrixElement(
         rows=[[self._pads_raw[offset + col] for col in range(NUM_TRACKS)]
               for offset in range(80, 49, -10)],
         name=u'Session_Matrix')
     self._scene_launch_button_matrix = ButtonMatrixElement(
         rows=[[
             self._pads_raw[identifier]
             for identifier in range(89, 58, -10)
         ]],
         name=u'Scene_Launch_Button_Matrix')
     self._stop_all_clips_button = ButtonElement(
         True,
         MIDI_NOTE_TYPE,
         0,
         127,
         skin=skin,
         name=u'Stop_All_Clips_Button')
     self._nav_down_button = self._pads_raw[90]
     self._nav_up_button = self._pads_raw[91]
     self._nav_left_button = self._pads_raw[92]
     self._nav_right_button = self._pads_raw[93]
     self._mode_cycle_button = ButtonElement(True,
                                             MIDI_CC_TYPE,
                                             0,
                                             127,
                                             skin=skin,
                                             name=u'Mode_Button')
     self._drum_pads = ButtonMatrixElement(
         rows=[[self._pads_raw[offset + col] for col in range(4)]
               for offset in range(48, 35, -4)],
         name=u'Drum_Pads')
     self._tempo_encoder = EncoderElement(
         MIDI_PB_TYPE,
         0,
         0,
         Live.MidiMap.MapMode.absolute,
         send_should_depend_on_forwarding=False,
         name=u'Tempo_Encoder')
     self._tempo_encoder.reset = nop
     self._sysex_element = SysexElement(sysex_identifier=SYSEX_HEADER,
                                        name=u'Sysex_Element')
     self._sysex_element.add_value_listener(nop)
     self._surface_update_message_element = ButtonElement(
         True, MIDI_CC_TYPE, 0, 64, name=u'Surface_Update_Message_Element')
     self.__on_surface_update_message_received.subject = self._surface_update_message_element
Пример #7
0
	def _setup_controls(self):
		is_momentary = True
		optimized = False
		resource = PrioritizedResource
		self._livid = DoublePressElement(MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = LIVID, name = 'Livid_Button', script = self, skin = self._skin, color_map = COLOR_MAP, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge))
		self._dial = [[CodecEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = CODE_DIALS[row][column], name = 'Dial_' + str(column) + '_' +	str(row), num = (column + (row*8)), script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge)	for row in range(4)] for column in range(8)]
		self._button = [[MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = CODE_BUTTONS[row][column], name = 'Button_' + str(column) + '_' + str(row), script = self, skin = self._skin, color_map = COLOR_MAP, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for row in range(4)] for column in range(8)]
		self._column_button = [MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = CODE_COLUMN_BUTTONS[index], name = 'Column_Button_' + str(index), script = self, skin = self._skin, color_map = COLOR_MAP, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(8)]		
		self._row_button = [MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = CODE_ROW_BUTTONS[index], name = 'Row_Button_' + str(index), script = self, skin = self._skin, color_map = COLOR_MAP, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(4)]	
		self._code_keys = ButtonMatrixElement(name = 'Code_Keys', rows = [self._column_button])
		self._code_buttons = ButtonMatrixElement(name = 'Code_Buttons', rows = [self._row_button])
		self._encoder_matrix = ButtonMatrixElement(name = 'Encoder_Matrix', rows = [[self._dial[column][row] for column in range(8)] for row in range(4)])
		self._button_matrix = ButtonMatrixElement(name = 'Button_Matrix', rows = [[self._button[column][row] for column in range(8)] for row in range(4)])
 def __init__(self,
              arrow_button_identifiers=(91, 92, 93, 94),
              session_mode_button_identifier=95,
              *a,
              **k):
     (super(LaunchpadElements, self).__init__)(*a, **k)
     self.up_button = create_button(arrow_button_identifiers[0],
                                    'Up_Button')
     self.down_button = create_button(arrow_button_identifiers[1],
                                      'Down_Button')
     self.left_button = create_button(arrow_button_identifiers[2],
                                      'Left_Button')
     self.right_button = create_button(arrow_button_identifiers[3],
                                       'Right_Button')
     self.session_mode_button = create_button(
         session_mode_button_identifier, 'Session_Mode_Button')
     self.scene_launch_buttons_raw = [
         create_button(identifier,
                       'Scene_Launch_Button_{}'.format(row_index))
         for row_index, identifier in enumerate(range(89, 18, -10))
     ]
     self.scene_launch_buttons = ButtonMatrixElement(
         rows=[self.scene_launch_buttons_raw], name='Scene_Launch_Buttons')
     self.clip_launch_matrix = ButtonMatrixElement(
         rows=[[
             create_button(
                 (offset + col_index),
                 ('{}_Clip_Launch_Button_{}'.format(col_index, row_index)),
                 msg_type=MIDI_NOTE_TYPE)
             for col_index in range(SESSION_WIDTH)
         ] for row_index, offset in enumerate(range(81, 10, -10))],
         name='Clip_Launch_Matrix')
     self.firmware_mode_switch = SysexElement(
         name='Firmware_Mode_Switch',
         send_message_generator=(
             lambda v: sysex.STD_MSG_HEADER +
             (self.model_id, sysex.FIRMWARE_MODE_COMMAND_BYTE, v, sysex.
              SYSEX_END_BYTE)),
         default_value=(sysex.STANDALONE_MODE_BYTE),
         optimized=True)
     layout_switch_identifier = sysex.STD_MSG_HEADER + (
         self.model_id, sysex.LAYOUT_COMMAND_BYTE)
     self.layout_switch = SysexElement(
         name='Layout_Switch',
         sysex_identifier=layout_switch_identifier,
         send_message_generator=(lambda v: layout_switch_identifier +
                                 (v if type(v) is tuple else
                                  (v, )) + (sysex.SYSEX_END_BYTE, )),
         default_value=(self.default_layout),
         enquire_message=(layout_switch_identifier +
                          (sysex.SYSEX_END_BYTE, )))
Пример #9
0
 def _setup_controls(self):
     is_momentary = True
     optimized = True
     resource = PrioritizedResource
     self._fader = [
         MonoEncoderElement(msg_type=MIDI_CC_TYPE,
                            channel=CHANNEL,
                            identifier=ALIAS_FADERS[index],
                            name='Fader_' + str(index),
                            num=index,
                            script=self,
                            optimized_send_midi=optimized,
                            resource_type=resource,
                            monobridge=self._monobridge)
         for index in range(9)
     ]
     self._button = [
         MonoButtonElement(is_momentary=is_momentary,
                           msg_type=MIDI_NOTE_TYPE,
                           channel=CHANNEL,
                           identifier=ALIAS_BUTTONS[index],
                           name='Button_' + str(index),
                           script=self,
                           skin=self._skin,
                           optimized_send_midi=optimized,
                           resource_type=resource,
                           monobridge=self._monobridge)
         for index in range(16)
     ]
     self._dial = [
         MonoEncoderElement(msg_type=MIDI_CC_TYPE,
                            channel=CHANNEL,
                            identifier=ALIAS_DIALS[index],
                            name='Dial_' + str(index),
                            num=index + 8,
                            script=self) for index in range(16)
     ]
     self._encoder = MonoEncoderElement(msg_type=MIDI_CC_TYPE,
                                        channel=CHANNEL,
                                        identifier=ALIAS_ENCODER,
                                        name='Encoder',
                                        script=self,
                                        optimized_send_midi=optimized,
                                        resource_type=resource,
                                        monobridge=self._monobridge)
     self._fader_matrix = ButtonMatrixElement(name='FaderMatrix',
                                              rows=[self._fader[:8]])
     self._button_matrix = ButtonMatrixElement(
         name='ButtonMatrix', rows=[self._button[:8], self._button[8:]])
     self._dial_matrix = ButtonMatrixElement(
         name='DialMatrix', rows=[self._dial[:8], self._dial[8:]])
Пример #10
0
    def _setup_controls(self):
        self._pedal = [None for index in range(14)]
        for index in range(5):
            self._pedal[index] = DoublePressElement(
                MonoButtonElement(is_momentary=True,
                                  msg_type=MIDI_NOTE_TYPE,
                                  channel=0,
                                  identifier=PEDAL_DEFS[index],
                                  name='Pedal_' + str(index),
                                  script=self,
                                  skin=self._skin))
            self._pedal[index]._report = False
        for index in range(7):
            self._pedal[index + 5] = MonoButtonElement(
                is_momentary=True,
                msg_type=MIDI_NOTE_TYPE,
                channel=0,
                identifier=PEDAL_DEFS[index + 5],
                name='Pedal_' + str(index + 5),
                script=self,
                skin=self._skin)
            self._pedal[index + 5]._report = False
        self._pedal[12] = LoopPedalExpressionElement(
            script=self,
            msg_type=MIDI_CC_TYPE,
            channel=0,
            identifier=102,
            map_mode=Live.MidiMap.MapMode.absolute)
        self._pedal[12].name = 'Pedal_' + str(12)
        self._pedal[12]._report = False
        self._pedal[13] = LoopPedalExpressionElement(
            script=self,
            msg_type=MIDI_CC_TYPE,
            channel=0,
            identifier=103,
            map_mode=Live.MidiMap.MapMode.absolute)
        self._pedal[13].name = 'Pedal_' + str(13)
        self._pedal[13]._report = False
        self._leds = self._pedal[5:9]
        self._select_buttons = ButtonMatrixElement()
        self._select_buttons.name = 'SelectMatrix'
        self._select_buttons.add_row(
            [self._pedal[5], self._pedal[6], self._pedal[7], self._pedal[8]])
        #self._doublepress_select_buttons = ButtonMatrixElement()
        #self._doublepress_select_buttons.name = 'DoublepressSelectMatrix'
        #self._doublepress_select_buttons.add_row([self._pedal[9].double_press, self._pedal[8].double_press, self._pedal[7].double_press, self._pedal[6].double_press])

        self._overdub_button = self._pedal[0]
        self._record_button = self._pedal[1]
        self._mute_button = self._pedal[2]
        self._reverse_button = self._pedal[3]
Пример #11
0
	def _setup_controls(self):
		is_momentary = True
		optimized = True
		resource = PrioritizedResource
		self._button = [MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = BUTTONS[index], name = 'Button_' + str(index), script = self, skin = self._skin, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(10)]
		self._fader = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = SLIDERS[index], name = 'Fader_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(3)]
		self._fader_button = [MonoEncoderElement(msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = SLIDERS[index], name = 'Fader_Button_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(3)]
		self._ccs = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = CCS[index], name = 'CCs_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(4)]
		self._pad =  [MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = PADS[index], name = 'Pad_' + str(index), script = self, skin = self._skin, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(5)]
		self._padCC = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = PADS[index], name = 'PadCC_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(5)]
		self._accel = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = ACCELS[index], name = 'Accel_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(3)]

		self._parameter_control_matrix = ButtonMatrixElement(rows = [ [ self._fader[0], self._fader[1], self._fader[2], self._accel[2], self._ccs[0], self._ccs[1], self._ccs[2], self._ccs[3] ]])
		self._scene_launch_matrix = ButtonMatrixElement(rows = [self._pad[:4]])
Пример #12
0
    def _setup_controls(self):
        self._pedal = [None for index in range(8)]
        for index in range(7):
            self._pedal[index] = DoublePressElement(
                MonoButtonElement(is_momentary=True,
                                  msg_type=MIDI_CC_TYPE,
                                  channel=0,
                                  identifier=PEDAL_DEFS[index],
                                  name='Pedal_' + str(index),
                                  script=self))
            self._pedal[index]._report = False
        self._pedal[7] = LoopPedalExpressionElement(
            script=self,
            msg_type=MIDI_CC_TYPE,
            channel=0,
            identifier=1,
            map_mode=Live.MidiMap.MapMode.absolute)
        self._pedal[7].name = 'Pedal_' + str(7)
        self._pedal[7]._report = False
        self._leds = [None for index in range(4)]
        for index in range(4):
            red_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index])
            green_led = ButtonElement(True, MIDI_NOTE_TYPE, 0,
                                      LED_DEFS[index] + 4)
            blue_led = ButtonElement(True, MIDI_NOTE_TYPE, 0,
                                     LED_DEFS[index] + 8)
            self._leds[index] = RGB_LED(red_led,
                                        green_led,
                                        blue_led,
                                        is_momentary=True,
                                        msg_type=MIDI_NOTE_TYPE,
                                        channel=0,
                                        identifier=index + 13,
                                        name='LED_' + str(index),
                                        script=self)
        self._select_buttons = ButtonMatrixElement()
        self._select_buttons.name = 'SelectMatrix'
        self._select_buttons.add_row(
            [self._pedal[6], self._pedal[5], self._pedal[4], self._pedal[3]])
        self._doublepress_select_buttons = ButtonMatrixElement()
        self._doublepress_select_buttons.name = 'DoublepressSelectMatrix'
        self._doublepress_select_buttons.add_row([
            self._pedal[6].double_press, self._pedal[5].double_press,
            self._pedal[4].double_press, self._pedal[3].double_press
        ])

        self._record_button = self._pedal[1]
        self._mute_button = self._pedal[2]
        self._overdub_button = self._pedal[0]
 def __init__(self, *a, **k):
     super(Elements, self).__init__(*a, **k)
     self.encoder_push_button = create_button(102, u'Encoder_Push_Button')
     self.back_button = create_button(104, u'Back_Button')
     self.bank_left_button = create_button(110, u'Bank_Left_Button')
     self.bank_right_button = create_button(111, u'Bank_Right_Button')
     self.loop_button = create_button(114, u'Loop_Button')
     self.rewind_button = create_button(115, u'Rewind_Button')
     self.fastforward_button = create_button(116, u'Fastforward_Button')
     self.stop_button = create_button(117, u'Stop_Button')
     self.play_button = create_button(118, u'Play_Button')
     self.record_button = create_button(119, u'Record_Button')
     self.fader_buttons = ButtonMatrixElement(rows=[[
         create_button(index + 32,
                       u'Fader_Button_{}'.format(index),
                       is_momentary=False) for index in range(SESSION_WIDTH)
     ]],
                                              name=u'Fader_Buttons')
     self.scene_launch_buttons = ButtonMatrixElement(
         rows=[[
             create_button(index + 107,
                           u'Scene_Launch_Button_{}'.format(index))
             for index in range(SESSION_HEIGHT)
         ]],
         name=u'Scene_Launch_Buttons')
     pad_ids = ((40, 41, 42, 43, 48, 49, 50, 51), (36, 37, 38, 39, 44, 45,
                                                   46, 47))
     self.pads = ButtonMatrixElement(rows=[[
         create_button(ident,
                       u'{}_Pad_{}'.format(row_index,
                                           ident % SESSION_WIDTH),
                       msg_type=MIDI_NOTE_TYPE)
         for ident in pad_ids[row_index]
     ] for row_index in range(SESSION_HEIGHT)],
                                     name=u'Pads')
     self.encoder = create_encoder(
         103, u'Encoder', map_mode=Live.MidiMap.MapMode.relative_signed_bit)
     self.master_fader = create_encoder(41, u'Master_Fader')
     self.faders = ButtonMatrixElement(rows=[[
         create_encoder(index + 12, u'Fader_{}'.format(index))
         for index in range(SESSION_WIDTH)
     ]],
                                       name=u'Faders')
     self.knobs = ButtonMatrixElement(rows=[[
         create_encoder(index + 22, u'Knob_{}'.format(index))
         for index in range(8)
     ]],
                                      name=u'Knobs')
Пример #14
0
def create_selection_field_line(v_position):
    lines_raw = [ create_selection_field(index, v_position) for index in xrange(SESSION_WIDTH)
                ]
    return (
     lines_raw,
     ButtonMatrixElement(rows=[
      lines_raw], name=('Selection_Field_Line_{}').format(v_position)))
Пример #15
0
    def __init__(self, *a, **k):
        super(Elements, self).__init__(continuous_mapping_sensitivity=CONTINUOUS_MAPPING_SENSITIVITY, fine_grained_continuous_mapping_sensitivity=FINE_GRAINED_CONTINUOUS_MAPPING_SENSITIVITY, *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=u'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, u'Touch_Strip_Tap')
        self.touch_strip_control = TouchStripElement(name=u'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):
            assert mode_id in (u'polyphonic', u'mono')
            mode_message = sysex.POLY_AFTERTOUCH if mode_id == u'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=u'polyphonic')
Пример #16
0
def create_display_color_element_line(v_position, **k):
    raw_line = [ create_display_color_element(index, v_position, ('Color_Field_{}_{}').format(index, v_position), **k) for index in xrange(SESSION_WIDTH)
               ]
    return (
     raw_line,
     ButtonMatrixElement(rows=[
      raw_line], name=('Color_Field_Line_{}').format(v_position)))
 def _create_scale_pads(self):
     self.scale_pads = ButtonMatrixElement(rows=[[
         create_button(identifier, ('Scale_Pad_{}'.format(identifier)),
                       msg_type=MIDI_NOTE_TYPE,
                       channel=15) for identifier in range(128)
     ]],
                                           name='Scale_Pads')
Пример #18
0
 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))
def create_parameter_display_matrix(command_byte, start_index, name):
    return ButtonMatrixElement(rows=[[
        create_display_element((command_byte, start_index + index),
                               u'_Display_{}'.format(name, index))
        for index in range(8)
    ]],
                               name=u'{}_Displays'.format(name))
Пример #20
0
    def add_matrix(self, name, element_factory, channel, numbers,
                   midi_message_type):
        assert name not in self.keys()

        def one_dimensional_name(base_name, x, _y):
            return u'%s_%d' % (base_name, x)

        def two_dimensional_name(base_name, x, y):
            return u'%s_%d_%d' % (base_name, x, y)

        name_factory = two_dimensional_name if len(
            numbers) > 1 else one_dimensional_name
        elements = []
        id_dict = {}
        for row, identifiers in enumerate(numbers):
            element_row = []
            for column, identifier in enumerate(identifiers):
                element_row.append(
                    element_factory(name_factory(name, column, row), channel,
                                    identifier, midi_message_type))
                id_dict[identifier] = (column, row)

            elements.append(element_row)

        self[u'%s_Raw' % name] = elements
        self[u'%s_Ids' % name] = id_dict
        self[name] = ButtonMatrixElement(rows=elements, name=name)
Пример #21
0
 def _setup_controls(self):
     is_momentary = True
     optimized = True
     resource = PrioritizedResource
     #self._pads_raw = [ ButtonElement(True, MIDI_NOTE_TYPE, 0, identifier, name=u'Pad_{}'.format(identifier), skin=skin) for identifier in xrange(100) ]
     self._pad = [
         MonoButtonElement(is_momentary=is_momentary,
                           msg_type=MIDI_NOTE_TYPE,
                           channel=CHANNEL,
                           identifier=BLOCKS_PADS[index],
                           name='Pad_' + str(index),
                           script=self,
                           monobridge=self._monobridge,
                           skin=self._skin,
                           color_map=COLOR_MAP,
                           optimized_send_midi=optimized,
                           resource_type=resource) for index in range(64)
     ]
     for button in self._pad:
         button.set_color_map(tuple(range(128)))
     self._matrix = ButtonMatrixElement(
         name='Matrix',
         rows=[
             self._pad[(index * 8):(index * 8) + 8] for index in range(8)
         ])
Пример #22
0
 def _create_controls(self):
     self._jump_to_start_button = make_button(21, 'Jump_To_Start_Button')
     self._rwd_button = make_button(22, 'RWD_Button')
     self._ff_button = make_button(23, 'FF_Button')
     self._stop_button = make_button(25, 'Stop_Button')
     self._play_button = make_button(26, 'Play_Button')
     self._record_button = make_button(28, 'Record_Button')
     self._encoders = ButtonMatrixElement(rows=[[ make_encoder(index + 70, 'Encoder_%d' % (index,)) for index in xrange(6) ]], name='Encoders')
     self._volume_mode_button = make_button(16, 'Volume_Mode_Button')
     self._pan_mode_button = make_button(17, 'Pan_Mode_Button')
     self._send_a_mode_button = make_button(18, 'Send_A_Mode_Button')
     self._send_b_mode_button = make_button(19, 'Send_B_Mode_Button')
     self._s1_button = make_button(14, 'S1_Button')
     self._s2_button = make_button(15, 'S2_Button')
     self._pads = ButtonMatrixElement(rows=[ [ make_button(col_index + offset, 'Pad_%d_%d' % (col_index, row_index), msg_type=MIDI_NOTE_TYPE) for col_index in xrange(4) ] for row_index, offset in enumerate(xrange(72, 59, -4))
                                           ], name='Pads')
 def __init__(self, *a, **k):
     (super(Elements, self).__init__)(*a, **k)
     self.foot_switches = ButtonMatrixElement(rows=[
      [create_button(i, 'Foot_Switch_{}'.format(i)) for i in range(NUM_LOOPER_SWITCHES)]],
       name='Foot_Switches')
     self.time_display = TimeDisplayElement(SYSEX_HEADER + NUMERIC_DISPLAY_COMMAND, (SYSEX_END,))
     self.live_integration_mode_switch = SysexElement(name='Live_Integration_Mode_Switch',
       send_message_generator=(lambda v: LIVE_INTEGRATION_MODE_ID + (v, SYSEX_END)))
    def __init__(self, *a, **k):
        super(Elements, self).__init__(*a, **k)
        self.display_encoder = create_encoder(29, u'Display_Encoder')
        self.shift_button = create_button(31, u'Shift_Button', resource_type=PrioritizedResource)
        self.plus_button = create_button(0, u'Plus_Button', msg_type=MIDI_NOTE_TYPE, skin=rgb_skin)
        self.minus_button = create_button(1, u'Minus_Button', msg_type=MIDI_NOTE_TYPE, skin=rgb_skin)
        self.song_mode_button = create_button(32, u'Song_Mode_Button')
        self.instrument_mode_button = create_button(33, u'Instrument_Mode_Button')
        self.editor_mode_button = create_button(34, u'Editor_Mode_Button')
        self.user_mode_button = create_button(35, u'User_Mode_Button')
        self.display_left_button = create_button(42, u'Display_Left_Button')
        self.display_right_button = create_button(43, u'Display_Right_Button')
        self.up_button = create_button(87, u'Up_Button')
        self.down_button = create_button(89, u'Down_Button')
        self.left_button = create_button(90, u'Left_Button')
        self.right_button = create_button(102, u'Right_Button')
        self.click_button = create_button(105, u'Click_Button')
        self.record_button = create_button(107, u'Record_Button')
        self.play_button = create_button(109, u'Play_Button', skin=rgb_skin)
        self.stop_button = create_button(111, u'Stop_Button')
        for i, name in enumerate(BANK_BUTTON_NAMES):
            setattr(self, name, create_button(i, name.title(), skin=rgb_skin))

        def with_shift(button):
            return ComboElement(control=button, modifier=self.shift_button, name=u'{}_With_Shift'.format(button.name))

        self.play_button_with_shift = with_shift(self.play_button)
        self.stop_button_with_shift = with_shift(self.stop_button)
        self.record_button_with_shift = with_shift(self.record_button)
        self.up_button_with_shift = with_shift(self.up_button)
        self.down_button_with_shift = with_shift(self.down_button)
        self.display_buttons_raw = [ create_button(index + 36, u'Display_Button_{}'.format(index)) for index in range(6) ]
        self.display_buttons = ButtonMatrixElement(rows=[self.display_buttons_raw], name=u'Display_Buttons')
        self.lower_pads = ButtonMatrixElement(rows=[[ create_button(36 + index, u'Lower_Pad_{}'.format(index), msg_type=MIDI_NOTE_TYPE, skin=rgb_skin) for index in range(SESSION_WIDTH) ]], name=u'Lower_Pads')
        self.upper_pads = ButtonMatrixElement(rows=[[ create_button(52 + index, u'Upper_Pad_{}'.format(index), msg_type=MIDI_NOTE_TYPE, skin=rgb_skin) for index in range(SESSION_WIDTH) ]], name=u'Upper_Pads')
        self.encoders_raw = [ create_encoder(index + 14, u'Encoder_{}'.format(index)) for index in range(8) ]
        self.encoders = ButtonMatrixElement(rows=[self.encoders_raw], name=u'Encoders')
        self.button_label_display_matrix = ButtonMatrixElement(rows=[[ create_display_element(strip_id, u'Button_Label_Display_{}'.format(index), **DISPLAY_RGB_VALUES) for index, strip_id in enumerate((0, 1, 2, 11, 12, 13)) ]], name=u'Button_Label_Displays')
        self.track_name_display = create_display_element(6, u'Track_Name_Display', **DISPLAY_RGB_VALUES)
        self.device_name_display = create_display_element(7, u'Device_Name_Display', **DISPLAY_RGB_VALUES)
        self.lower_firmware_toggle_switch = SysexElement(name=u'Lower_Firmware_Toggle_Switch', send_message_generator=lambda v: midi.LOWER_FIRMWARE_TOGGLE_HEADER + (v, midi.SYSEX_END_BYTE))
        self.upper_firmware_toggle_switch = SysexElement(name=u'Upper_Firmware_Toggle_Switch', send_message_generator=lambda v: midi.UPPER_FIRMWARE_TOGGLE_HEADER + (v, midi.SYSEX_END_BYTE))
        self.touch_strip_tap = create_button(64, u'Touch_Strip_Tap')
        self.touch_strip_leds = [ create_button(led_id, u'Touch_Strip_LED_{}'.format(index)) for index, led_id in enumerate(TOUCH_STRIP_LED_CC_RANGE) ]
        self.touch_strip = TouchStripElement(name=u'Touch_Strip', msg_type=MIDI_PB_TYPE, channel=15, touch_element=self.touch_strip_tap, leds=self.touch_strip_leds)
        self.touch_strip.set_needs_takeover(False)
 def __init__(self, *a, **k):
     (super(LaunchkeyElements, self).__init__)(*a, **k)
     self.right_button = create_button(102, 'Right_Button')
     self.left_button = create_button(103, 'Left_Button')
     self.shift_button = create_button(108,
                                       'Shift_Button',
                                       resource_type=PrioritizedResource,
                                       channel=0)
     self.play_button = create_button(115, 'Play_Button')
     self.record_button = create_button(117, 'Record_Button')
     self.play_button_with_shift = self.with_shift(self.play_button)
     self.scene_launch_buttons_raw = [
         create_button(104, 'Scene_Launch_Button', channel=0),
         create_button(105, 'Stop_Solo_Mute_Button', channel=0)
     ]
     self.scene_launch_buttons = ButtonMatrixElement(
         rows=[self.scene_launch_buttons_raw], name='Scene_Launch_Buttons')
     self.clip_launch_matrix = ButtonMatrixElement(
         rows=[[
             create_button(
                 (offset + col_index),
                 ('{}_Clip_Launch_Button_{}'.format(col_index, row_index)),
                 msg_type=MIDI_NOTE_TYPE,
                 channel=0) for col_index in range(SESSION_WIDTH)
         ] for row_index, offset in enumerate(range(96, 119, 16))],
         name='Clip_Launch_Matrix')
     drum_pad_rows = ((48, 49, 50, 51), (44, 45, 46, 47), (40, 41, 42, 43),
                      (36, 37, 38, 39))
     self.drum_pads = ButtonMatrixElement(rows=[[
         create_button((row_identifiers[col_index]),
                       ('Drum_Pad_{}_{}'.format(col_index, row_index)),
                       msg_type=MIDI_NOTE_TYPE,
                       channel=DRUM_CHANNEL) for col_index in range(4)
     ] for row_index, row_identifiers in enumerate(drum_pad_rows)],
                                          name='Drum_Pads')
     self.pots = ButtonMatrixElement(rows=[[
         create_encoder(index + 21, 'Pot_{}'.format(index))
         for index in range(SESSION_WIDTH)
     ]],
                                     name='Pots')
     self.incontrol_mode_switch = create_button(12,
                                                'InControl_Mode_Switch',
                                                msg_type=MIDI_NOTE_TYPE)
     self.pad_layout_switch = create_button(3, 'Pad_Layout_Switch')
     self.pot_layout_switch = create_button(9, 'Pot_Layout_Switch')
Пример #26
0
    def _setup_controls(self):
        is_momentary = True
        optimized = True
        resource = PrioritizedResource
        self._encoder = [
            CodecEncoderElement(msg_type=MIDI_CC_TYPE,
                                channel=CHANNEL,
                                identifier=TWISTER_DIALS[index],
                                name='Encoder_' + str(index),
                                num=TWISTER_DIALS[index],
                                script=self,
                                optimized_send_midi=optimized,
                                resource_type=resource,
                                monobridge=self._monobridge)
            for index in range(16)
        ]
        self._encoder_button = [
            TwisterButtonElement(is_momentary=is_momentary,
                                 msg_type=MIDI_CC_TYPE,
                                 channel=1,
                                 identifier=TWISTER_DIAL_BUTTONS[index],
                                 name='Encoder_Button_' + str(index),
                                 script=self,
                                 skin=self._skin,
                                 color_map=COLOR_MAP,
                                 optimized_send_midi=optimized,
                                 resource_type=resource,
                                 monobridge=self._monobridge)
            for index in range(16)
        ]

        self._dial_matrix = ButtonMatrixElement(
            name='Dial_Matrix',
            rows=[
                self._encoder[index * 4:(index * 4) + 4] for index in range(4)
            ])
        self._dial_button_matrix = ButtonMatrixElement(
            name='Dial_Button_Matrix',
            rows=[
                self._encoder_button[index * 4:(index * 4) + 4]
                for index in range(4)
            ])
Пример #27
0
 def _create_device_component(self):
     device_component_layer = Layer(
         parameter_touch_buttons=ButtonMatrixElement(
             rows=[self.elements.global_param_touch_buttons_raw]),
         shift_button=u'shift_button')
     return DeviceComponentProvider(
         device_component_layer=device_component_layer,
         device_decorator_factory=self._device_decorator_factory,
         device_bank_registry=self._device_bank_registry,
         banking_info=self._banking_info,
         name=u'DeviceComponent',
         is_enabled=False,
         delete_button=self.elements.delete_button)
 def __init__(self, *a, **k):
     (super(Elements, self).__init__)(*a, **k)
     self.fader_button_modes_button = create_button(45, 'Fader_Button_Modes_Button')
     self.device_select_button = create_button(51, 'Device_Select_Button')
     self.device_lock_button = create_button(52, 'Device_Lock_Button')
     self.capture_midi_button = create_button(74, 'Capture_MIDI_Button')
     self.quantize_button = create_button(75, 'Quantize_Button')
     self.click_button = create_button(76, 'Click_Button')
     self.undo_button = create_button(77, 'Undo_Button')
     self.up_button = create_rgb_button(106, 'Up_Button')
     self.down_button = create_rgb_button(107, 'Down_Button')
     self.stop_button = create_button(116, 'Stop_Button')
     self.loop_button = create_button(118, 'Loop_Button')
     self.secondary_up_button = create_button(104, '')
     self.secondary_down_button = create_button(105, '')
     self.device_select_matrix = ButtonMatrixElement(rows=[[create_button((offset + col_index), ('{}_Device_Select_Button_{}'.format(col_index, row_index)), msg_type=MIDI_NOTE_TYPE, channel=0) for col_index in range(SESSION_WIDTH)] for row_index, offset in enumerate(range(64, 87, 16))],
       name='Device_Select_Matrix')
     self.fader_layout_switch = create_button(10, 'Fader_Layout_Switch')
     self.fader_buttons = ButtonMatrixElement(rows=[
      [create_rgb_button(index + 37, 'Fader_Button_{}'.format(index)) for index in range(SESSION_WIDTH)]],
       name='Fader_Button')
     self.faders = ButtonMatrixElement(rows=[
      [create_encoder(index + 53, 'Fader_{}'.format(index)) for index in range(SESSION_WIDTH)]],
       name='Faders')
     self.master_fader = create_encoder(61, 'Master_Fader')
     self.notification_display = ButtonMatrixElement(rows=[
      [create_display_element(midi.NOTIFICATION_DISPLAY_COMMAND_BYTES[index], 'Notification_Display_Line_{}'.format(index)) for index in range(2)]],
       name='Notification_Display')
     self.pot_parameter_name_displays = create_parameter_display_matrix(midi.PARAMETER_NAME_DISPLAY_COMMAND_BYTE, midi.POT_PARAMETER_DISPLAY_START_INDEX, 'Pot_Parameter_Name')
     self.pot_parameter_value_displays = create_parameter_display_matrix(midi.PARAMETER_VALUE_DISPLAY_COMMAND_BYTE, midi.POT_PARAMETER_DISPLAY_START_INDEX, 'Pot_Parameter_Value')
     self.fader_parameter_name_displays = create_parameter_display_matrix(midi.PARAMETER_NAME_DISPLAY_COMMAND_BYTE, midi.FADER_PARAMETER_DISPLAY_START_INDEX, 'Fader_Parameter_Name')
     self.fader_parameter_value_displays = create_parameter_display_matrix(midi.PARAMETER_VALUE_DISPLAY_COMMAND_BYTE, midi.FADER_PARAMETER_DISPLAY_START_INDEX, 'Fader_Parameter_Value')
     self.master_fader_parameter_name_display = create_display_element((
      midi.PARAMETER_NAME_DISPLAY_COMMAND_BYTE,
      midi.MASTER_PARAMETER_DISPLAY_INDEX), 'Master_Fader_Parameter_Name_Display')
     self.master_fader_parameter_value_display = create_display_element((
      midi.PARAMETER_VALUE_DISPLAY_COMMAND_BYTE,
      midi.MASTER_PARAMETER_DISPLAY_INDEX), 'Master_Fader_Parameter_Value_Display')
 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=b'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=b'Memory_Preset_Switch')
     self._memory_preset_select_mode_switch = SysexElement(sysex_identifier=sysex.MEMORY_PRESET_SELECT_MODE_MESSAGE_HEADER, name=b'Memory_Preset_Select_Mode')
     self._play_button = create_button(94, b'Play_Button')
     self._stop_button = create_button(93, b'Stop_Button')
     self._punch_in_button = create_button(87, b'Punch_In_Button')
     self._punch_out_button = create_button(88, b'Punch_Out_Button')
     self._metronome_button = create_button(89, b'Metronome_Button')
     self._loop_button = create_button(86, b'Loop_Button')
     self._rwd_button = create_button(91, b'Rewind_Button')
     self._ff_button = create_button(92, b'Fast_Forward_Button')
     self._record_button = create_button(95, b'Record_Button')
     self._undo_button = create_button(81, b'Undo_Button')
     self._bank_left_button = create_button(46, b'Bank_Left_Button')
     self._bank_right_button = create_button(47, b'Bank_Right_Button')
     self._left_button = create_button(48, b'Left_Button')
     self._right_button = create_button(49, b'Right_Button')
     self._left_arrow_button = create_button(98, b'Left_Arrow_Button')
     self._right_arrow_button = create_button(99, b'Right_Arrow_Button')
     self._marker_button = create_button(84, b'Marker_Button')
     self._pads = ButtonMatrixElement(rows=[
      [ create_button(col + 36, b'Pad_%d' % (col,), channel=10) for col in xrange(8)
      ]], name=b'Pad_Matrix')
     self._pad_leds = ButtonMatrixElement(rows=[
      [ create_pad_led(column + 112, b'Pad_LED_%d' % (column,)) for column in xrange(8)
      ]], name=b'Pad_LED_Matrix')
     self._faders = ButtonMatrixElement(rows=[
      [ SliderElement(msg_type=MIDI_PB_TYPE, channel=index, identifier=None, name=b'Fader_%d' % (index,)) for index in xrange(8)
      ]], name=b'Faders')
     self._master_fader = SliderElement(MIDI_PB_TYPE, 8, identifier=None, name=b'Master_Fader')
     self._encoders = ButtonMatrixElement(rows=[
      [ create_ringed_encoder(index + 16, index + 48, b'Encoder_%d' % (index,)) for index in xrange(8)
      ]])
     self._jogwheel = EncoderElement(MIDI_CC_TYPE, 0, 60, Live.MidiMap.MapMode.relative_smooth_signed_bit, name=b'Jogwheel')
     return
Пример #30
0
	def _setup_controls(self):
		self._pedal = [None for index in range(8)]
		for index in range(7):
			self._pedal[index] = DoublePressElement(MonoButtonElement(is_momentary = True, msg_type = MIDI_CC_TYPE, channel = 0, identifier = PEDAL_DEFS[index], name = 'Pedal_'+str(index), script = self))
			self._pedal[index]._report = False
		self._pedal[7] = LoopPedalExpressionElement(script = self, msg_type = MIDI_CC_TYPE, channel = 0, identifier = 1, map_mode = Live.MidiMap.MapMode.absolute)
		self._pedal[7].name = 'Pedal_'+str(7)
		self._pedal[7]._report = False
		self._leds = [None for index in range(4)]
		for index in range(4):
				red_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index])
				green_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+4)
				blue_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+8)
				self._leds[index] =  RGB_LED(red_led, green_led, blue_led, is_momentary = True, msg_type = MIDI_NOTE_TYPE, channel = 0, identifier = index+13, name = 'LED_' + str(index), script = self)
		self._select_buttons = ButtonMatrixElement()
		self._select_buttons.name = 'SelectMatrix'
		self._select_buttons.add_row([self._pedal[6], self._pedal[5], self._pedal[4], self._pedal[3]])
		self._doublepress_select_buttons = ButtonMatrixElement()
		self._doublepress_select_buttons.name = 'DoublepressSelectMatrix'
		self._doublepress_select_buttons.add_row([self._pedal[6].double_press, self._pedal[5].double_press, self._pedal[4].double_press, self._pedal[3].double_press])

		self._record_button = self._pedal[1]
		self._mute_button = self._pedal[2]
		self._overdub_button = self._pedal[0]
Пример #31
0
 def _setup_device_selector(self):
     self._device_selector = DeviceSelectorComponent(self)
     self._device_selector.name = 'Device_Selector'
     #self._device_selector.select_layer = AddLayerMode(self._device_selector, Layer(priority = 6 , matrix = self._matrix.submatrix[:, :]))
     self._device_selector.select_layer = AddLayerMode(
         self._device_selector,
         Layer(priority=6,
               matrix=ButtonMatrixElement(rows=[
                   self._grid[:4], self._grid[4:8], self._grid[8:12],
                   self._grid[12:14]
               ])))
     self._device_selector.assign_layer = AddLayerMode(
         self._device_selector,
         Layer(priority=7, assign_button=self._grid[14]))
     self._device_selector.set_enabled(False)
Пример #32
0
class MonoPedal(ControlSurface):


	def __init__(self, *a, **k):
		self.log_message = logger.warning
		super(MonoPedal, self).__init__(*a, **k)
		self._monomod_version = 'b996'
		self._codec_version = 'b996'
		self._cntrlr_version = 'b996'
		self._cntrlr = None
		self._host_name = 'MonoPedal'
		self._color_type = 'OhmRGB'
		self.hosts = []
		self._timer = 0
		self.flash_status = 1
		self._touched = 0
		self._last_main_mode = 'looper'
		with self.component_guard():
			self._setup_monobridge()
			self._setup_controls()
			self._setup_looper()
			self._setup_launcher()
			self._setup_device_control()
			self._setup_modes()
		self.schedule_message(1, self._open_log)
		#self._loop_selector.set_enabled(True)
	

	"""script initialization methods"""
	def _open_log(self):
		self.log_message("<<<<<<<<<<<<<<<<<<<<= " + str(self._host_name) + " " + str(self._monomod_version) + " log opened =>>>>>>>>>>>>>>>>>>>") 
		self.show_message(str(self._host_name) + ' Control Surface Loaded')
	

	def _setup_monobridge(self):
		self._monobridge = MonoBridgeElement(self)
		self._monobridge.name = 'MonoBridge'
	

	def _setup_controls(self):
		self._pedal = [None for index in range(8)]
		for index in range(7):
			self._pedal[index] = DoublePressElement(MonoButtonElement(is_momentary = True, msg_type = MIDI_CC_TYPE, channel = 0, identifier = PEDAL_DEFS[index], name = 'Pedal_'+str(index), script = self))
			self._pedal[index]._report = False
		self._pedal[7] = LoopPedalExpressionElement(script = self, msg_type = MIDI_CC_TYPE, channel = 0, identifier = 1, map_mode = Live.MidiMap.MapMode.absolute)
		self._pedal[7].name = 'Pedal_'+str(7)
		self._pedal[7]._report = False
		self._leds = [None for index in range(4)]
		for index in range(4):
				red_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index])
				green_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+4)
				blue_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+8)
				self._leds[index] =  RGB_LED(red_led, green_led, blue_led, is_momentary = True, msg_type = MIDI_NOTE_TYPE, channel = 0, identifier = index+13, name = 'LED_' + str(index), script = self)
		self._select_buttons = ButtonMatrixElement()
		self._select_buttons.name = 'SelectMatrix'
		self._select_buttons.add_row([self._pedal[6], self._pedal[5], self._pedal[4], self._pedal[3]])
		self._doublepress_select_buttons = ButtonMatrixElement()
		self._doublepress_select_buttons.name = 'DoublepressSelectMatrix'
		self._doublepress_select_buttons.add_row([self._pedal[6].double_press, self._pedal[5].double_press, self._pedal[4].double_press, self._pedal[3].double_press])

		self._record_button = self._pedal[1]
		self._mute_button = self._pedal[2]
		self._overdub_button = self._pedal[0]
	

	def _setup_looper(self):
		self._looper = MonolooperComponent(self._leds, self)
		self._looper.layer = Layer(select_buttons = self._select_buttons, 
									doublepress_select_buttons = self._doublepress_select_buttons,
									overdub_button = self._pedal[2], 
									record_button = self._pedal[1], 
									mute_button = self._pedal[0],
									expression_pedal = self._pedal[7],)
	

	def _setup_launcher(self):
		self._launcher = LauncherComponent(self._leds, self)
		self._launcher.set_enabled(False)
		self._launcher.layer = Layer(select_buttons = self._select_buttons, 
									doublepress_select_buttons = self._doublepress_select_buttons,
									fire1_button = self._pedal[2], 
									fire2_button = self._pedal[1], 
									fire3_button = self._pedal[0],
									expression_pedal = self._pedal[7])
	

	def _setup_device_control(self):
		self._device_control = DeviceControlComponent(self._leds, self)
		self._device_control.set_enabled(False)
		self._device_control.layer = Layer(select_buttons = self._select_buttons, 
									doublepress_select_buttons = self._doublepress_select_buttons,
									toggle1_button = self._pedal[2], 
									toggle2_button = self._pedal[1], 
									toggle3_button = self._pedal[0],
									expression_pedal = self._pedal[7])
	

	def _setup_modes(self):
		self._button_modes = ModesComponent(name='Button_Modes')
		self._button_modes.add_mode('launcher', self._launcher)
		self._button_modes.add_mode('looper', self._looper)
		self._button_modes.add_mode('device', self._device_control)
		self._button_modes.selected_mode = 'looper'
		self._button_modes.set_enabled(True)
	

	def receive_led(self, button, value):
		#self.log_message('receive led: ' + str(index) + ' ' + str(value))
		pass
	

	def toggle_mode(self):
		self._button_modes.selected_mode = 'launcher' if self._button_modes.selected_mode is 'looper' else 'looper'
		self._last_main_mode = self._button_modes.selected_mode
		#self.log_message('toggle mode to: ' + str(self._button_modes.selected_mode))
	

	def toggle_device_control(self, x):
		self._button_modes.selected_mode = 'device' if not self._button_modes.selected_mode is 'device' else self._last_main_mode
		if self._button_modes.selected_mode is 'device':
			self._device_control.set_bank(x)
	

	"""called on timer"""
	def update_display(self):
		super(MonoPedal, self).update_display()
		self._timer = (self._timer + 1) % 256
		self.flash()
	

	def flash(self):
		if(self.flash_status > 0):
			for control in self.controls:
				if isinstance(control, MonoButtonElement):
					control.flash(self._timer)
    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)