def _setup_mixer_control(self): is_momentary = True mixer = MixerComponent(NUM_TRACKS, 2) for track in range(NUM_TRACKS): strip = mixer.channel_strip(track) strip.set_volume_control(SliderElement(MIDI_CC_TYPE, track, 23)) strip.set_pan_control( EncoderElement(MIDI_CC_TYPE, track, 10, Live.MidiMap.MapMode.absolute)) strip.set_send_controls( (EncoderElement(MIDI_CC_TYPE, track, 19, Live.MidiMap.MapMode.absolute), EncoderElement(MIDI_CC_TYPE, track, 20, Live.MidiMap.MapMode.absolute))) strip.set_solo_button( ButtonElement(is_momentary, MIDI_NOTE_TYPE, track, 64)) strip.set_mute_button( ButtonElement(is_momentary, MIDI_NOTE_TYPE, track, 63)) strip.set_crossfade_toggle( ButtonElement(is_momentary, MIDI_NOTE_TYPE, track, 65)) eq = mixer.track_eq(track) eq.set_gain_controls( tuple([ EncoderElement(MIDI_CC_TYPE, track, 18 - index, Live.MidiMap.MapMode.absolute) for index in range(3) ])) eq.set_cut_buttons( tuple([ ButtonElement(is_momentary, MIDI_NOTE_TYPE, track, 62 - index) for index in range(3) ])) filter = mixer.track_filter(track) filter.set_filter_controls( EncoderElement(MIDI_CC_TYPE, track, 22, Live.MidiMap.MapMode.absolute), EncoderElement(MIDI_CC_TYPE, track, 21, Live.MidiMap.MapMode.absolute)) for ret_track in range(2): strip = mixer.return_strip(ret_track) strip.set_volume_control( SliderElement(MIDI_CC_TYPE, 12, 22 + ret_track)) strip.set_pan_control( EncoderElement(MIDI_CC_TYPE, 12, 20 + ret_track, Live.MidiMap.MapMode.absolute)) strip.set_mute_button( ButtonElement(is_momentary, MIDI_NOTE_TYPE, 12, 78 + ret_track)) mixer.set_crossfader_control(SliderElement(MIDI_CC_TYPE, 12, 8)) mixer.set_prehear_volume_control( EncoderElement(MIDI_CC_TYPE, 12, 24, Live.MidiMap.MapMode.absolute)) mixer.master_strip().set_volume_control( SliderElement(MIDI_CC_TYPE, 12, 7)) mixer.master_strip().set_pan_control( EncoderElement(MIDI_CC_TYPE, 12, 10, Live.MidiMap.MapMode.absolute)) return mixer
def __init__(self, msg_type, channel, identifier, map_mode, send_channel=None, identifier_send_offset=0): EncoderElement.__init__(self, msg_type, channel, identifier, map_mode) self._identify_mode = False self._send_channel = send_channel self._identifier_send_offset = identifier_send_offset self._on_value = 127 self._off_value = 0 self._force_next_value = False
def _activate_track_control(self): if self._pad_control_device is not None: return if (len(self.mixer.selected_strip()._track.devices) > 0): devices = self.mixer.selected_strip()._track.devices self.actual_device = devices[0] self._track_control_device = DeviceComponent() device_controls = ( EncoderElement(MIDI_CC_TYPE, 10, 1, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 2, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 3, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 4, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 5, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 6, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 7, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 8, self._map_modes.absolute), ) self._track_control_device.set_device(self.actual_device) self._track_control_device.set_parameter_controls( tuple(device_controls)) self._track_control_device.set_lock_to_device( "lock", self.actual_device)
def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) AbletonPlus.__init__(self, options) self._main_encoders = [] self._main_buttons = [] self._effects_encoders = [] self._extra_buttons = [] self._mixer = None for index in range(0, 24): encoder = EncoderElement(MIDI_CC_TYPE, 0, 81 + index, Live.MidiMap.MapMode.absolute) self._main_encoders.append(encoder) for index in range(0, 16): button = ButtonElement(False, MIDI_CC_TYPE, 0, 76 + index) self._main_buttons.append(button) self._mixer = MixerComponent(8) self._remap_track_mixer_controls() self._enable_abletonplus() return None
def _init_device_component(self, device_controls, bank_controls, global_channel, macro_map_mode, device_component_class): is_momentary = True DeviceButton = partial(ButtonElement, is_momentary, MIDI_CC_TYPE) def make_bank_button(control, name): return DeviceButton(global_channel, (bank_controls[control]), name=name) if device_controls: device = device_component_class(device_selection_follows_track_selection=True, name='Device_Component') layer_specs = {} if bank_controls: if has_specification_for('NEXTBANK', bank_controls): layer_specs['bank_next_button'] = make_bank_button('NEXTBANK', 'Device_Next_Bank_Button') if has_specification_for('PREVBANK', bank_controls): layer_specs['bank_prev_button'] = make_bank_button('PREVBANK', 'Device_Previous_Bank_Button') if has_specification_for('TOGGLELOCK', bank_controls): layer_specs['lock_button'] = make_bank_button('TOGGLELOCK', 'Device_Lock_Button') if has_specification_for('ONOFF', bank_controls): layer_specs['on_off_button'] = make_bank_button('ONOFF', 'Device_On_Off_Button') bank_buttons_raw = [] for index in range(8): key = 'BANK{}'.format(index + 1) if key in list(bank_controls.keys()): control_info = bank_controls[key] channel = global_channel cc = control_info if isinstance(control_info, (tuple, list)): cc = control_info[0] if is_valid_midi_channel(control_info[1]): channel = control_info[1] if is_valid_midi_identifier(cc): if is_valid_midi_channel(channel): name = 'Device_Bank_{}_Button'.format(index) bank_buttons_raw.append(DeviceButton(channel, cc, name=name)) if len(bank_buttons_raw) > 0: layer_specs['bank_buttons'] = ButtonMatrixElement(rows=[ bank_buttons_raw], name='Device_Bank_Buttons') parameter_encoders_raw = [] for index, control_info in enumerate(device_controls): channel = global_channel cc = control_info if isinstance(control_info, (tuple, list)): cc = control_info[0] if is_valid_midi_channel(control_info[1]): channel = control_info[1] if is_valid_midi_identifier(cc): if is_valid_midi_channel(channel): name = 'Device_Parameter_%d_Control' % index parameter_encoders_raw.append(EncoderElement(MIDI_CC_TYPE, channel, cc, macro_map_mode, name=name)) if len(parameter_encoders_raw) > 0: layer_specs['parameter_controls'] = ButtonMatrixElement(rows=[ parameter_encoders_raw], name='Device_Parameter_Controls') device.layer = Layer(**layer_specs) self.set_device_component(device)
def _setup_device_and_transport_control(self): is_momentary = True device_param_controls = [] for index in range(8): device_param_controls.append( EncoderElement(MIDI_CC_TYPE, 15, 62 - index, Live.MidiMap.MapMode.absolute)) device = SpecialDeviceComponent() device.set_bank_nav_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 107), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 106)) device.set_parameter_controls(tuple(device_param_controls)) self.set_device_component(device) transport = SpecialTransportComponent() transport.set_play_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 20)) transport.set_stop_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 21)) transport.set_record_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 22)) transport.set_seek_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 24), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 25)) transport.set_tap_tempo_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 94)) transport.set_undo_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 23)) transport.set_redo_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 27)) transport.set_bts_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 26))
def _create_controls(self): self._device_encoders = ButtonMatrixElement(rows=[[EncoderElement(MIDI_CC_TYPE, 0, identifier, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name=('Encoder_%d_%d' % (column_index, row_index))) for column_index, identifier in enumerate(row)] for row_index, row in enumerate(( ENCODER_MSG_IDS[:4], ENCODER_MSG_IDS[8:12]))]) self._horizontal_scroll_encoder = EncoderElement(MIDI_CC_TYPE, 0, 75, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Horizontal_Scroll_Encoder') self._vertical_scroll_encoder = EncoderElement(MIDI_CC_TYPE, 0, 72, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Vertical_Scroll_Encoder') self._volume_encoder = EncoderElement(MIDI_CC_TYPE, 0, 91, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Volume_Encoder') self._pan_encoder = EncoderElement(MIDI_CC_TYPE, 0, 17, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Pan_Encoder') self._send_a_encoder = EncoderElement(MIDI_CC_TYPE, 0, 77, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Send_A_Encoder') self._send_b_encoder = EncoderElement(MIDI_CC_TYPE, 0, 93, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Send_B_Encoder') self._send_encoders = ButtonMatrixElement(rows=[ [ self._send_a_encoder, self._send_b_encoder]]) self._return_a_encoder = EncoderElement(MIDI_CC_TYPE, 0, 73, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Return_A_Encoder') self._return_b_encoder = EncoderElement(MIDI_CC_TYPE, 0, 79, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Return_B_Encoder') self._return_encoders = ButtonMatrixElement(rows=[ [ self._return_a_encoder, self._return_b_encoder]]) self._pads = ButtonMatrixElement(rows=[[ButtonElement(True, MIDI_NOTE_TYPE, PAD_CHANNEL, identifier, name=('Pad_%d_%d' % (col_index, row_index)), skin=(self._skin)) for col_index, identifier in enumerate(row)] for row_index, row in enumerate(PAD_MSG_IDS)]) self._stop_button = ButtonElement(True, MIDI_CC_TYPE, 0, 1, name='Stop_Button') self._play_button = ButtonElement(True, MIDI_CC_TYPE, 0, 2, name='Play_Button')
def _create_controls(self): self._device_controls = ButtonMatrixElement(rows=[[EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), identifier, (Live.MidiMap.MapMode.relative_smooth_two_compliment), name=('Encoder_%d_%d' % (column_index, row_index))) for column_index, identifier in enumerate(row)] for row_index, row in enumerate(( self.encoder_msg_ids[:4], self.encoder_msg_ids[8:12]))]) self._horizontal_scroll_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[7]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Horizontal_Scroll_Encoder') self._vertical_scroll_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[15]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Vertical_Scroll_Encoder') self._volume_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[13]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Volume_Encoder') self._pan_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[12]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Pan_Encoder') self._send_a_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[4]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Send_A_Encoder') self._send_b_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[5]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Send_B_Encoder') self._send_encoders = ButtonMatrixElement(rows=[ [ self._send_a_encoder, self._send_b_encoder]]) self._return_a_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[6]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Return_A_Encoder') self._return_b_encoder = EncoderElement(MIDI_CC_TYPE, (self.encoder_msg_channel), (self.encoder_msg_ids[14]), (Live.MidiMap.MapMode.relative_smooth_two_compliment), name='Return_B_Encoder') self._return_encoders = ButtonMatrixElement(rows=[ [ self._return_a_encoder, self._return_b_encoder]]) self._pads = ButtonMatrixElement(rows=[[ButtonElement(True, MIDI_NOTE_TYPE, (self.pad_channel), (col + 36 + 8 * row), name=('Pad_%d_%d' % (col, row))) for col in range(8)] for row in range(2)])
def _create_controls(self): self._device_encoders = ButtonMatrixElement(rows=[[ EncoderElement(MIDI_CC_TYPE, ENCODER_CHANNEL, identifier, (Live.MidiMap.MapMode. relative_smooth_binary_offset), name=('Device_Encoder_%d_%d' % (col_index, row_index))) for col_index, identifier in enumerate(row) ] for row_index, row in enumerate((ENCODER_MSG_IDS[:4], ENCODER_MSG_IDS[4:8]))]) self._horizontal_scroll_encoder = EncoderElement( MIDI_CC_TYPE, ENCODER_CHANNEL, (ENCODER_MSG_IDS[(-2)]), (Live.MidiMap.MapMode.relative_smooth_binary_offset), name='Horizontal_Scroll_Encoder') self._vertical_scroll_encoder = EncoderElement( MIDI_CC_TYPE, ENCODER_CHANNEL, (ENCODER_MSG_IDS[(-1)]), (Live.MidiMap.MapMode.relative_smooth_binary_offset), name='Vertical_Scroll_Encoder') self._volume_sliders = ButtonMatrixElement(rows=[[ SliderElement(MIDI_CC_TYPE, ENCODER_CHANNEL, identifier) for identifier in SLIDER_MSG_IDS[:-1] ]]) self._master_slider = SliderElement(MIDI_CC_TYPE, ENCODER_CHANNEL, SLIDER_MSG_IDS[(-1)]) def make_keylab_button(name): button = ButtonElement(True, MIDI_CC_TYPE, 0, (get_button_identifier_by_name(name)), name=(name.title())) return button for button_name in list(BUTTON_HARDWARE_AND_MESSAGE_IDS.keys()): setattr(self, '_' + button_name, make_keylab_button(button_name)) self._pads = ButtonMatrixElement(rows=[[ ButtonElement(True, MIDI_CC_TYPE, PAD_CHANNEL, (col_index + row_offset), name=('Pad_%d_%d' % (col_index, row_index))) for col_index in range(4) ] for row_index, row_offset in enumerate(range(48, 35, -4))])
def activate_pad_control(self, track, pad): self._do_deactivate_pad_control() with self.component_guard(): self._deactivate_track_control() track_id = track + 8 tracks = self.mixer.song().tracks if track_id < len(tracks): track = tracks[track_id] if (len(track.devices) > 0): drumpad = track.devices[0].drum_pads[36 + pad] if len(drumpad.chains) > 0: if len(drumpad.chains[0].devices) > 0: self.actual_device = drumpad.chains[0].devices[0] def log(msg): self.log_message(msg) self._pad_control_device = CustomDeviceComponent( log) device_controls = ( EncoderElement(MIDI_CC_TYPE, 10, 1, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 2, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 3, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 4, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 5, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 6, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 7, self._map_modes.absolute), EncoderElement(MIDI_CC_TYPE, 10, 8, self._map_modes.absolute), ) self.actual_device.playback_mode = 0 self.actual_device.parameters[31].value = 1.0 self._pad_control_device.set_device( self.actual_device) self._pad_control_device.set_parameter_controls( tuple(device_controls)) self._pad_control_device.set_lock_to_device( "lock", self.actual_device) self.log_message("AA " + str(self._pad_control_device. _current_bank_details()))
def _create_controls(self): self._encoders = ButtonMatrixElement(rows=[ [EncoderElement(MIDI_CC_TYPE, 0, identifier, (Live.MidiMap.MapMode.absolute), name=('Encoder_%d' % index)) for index, identifier in enumerate(ENCODER_IDS)]]) self._master_encoder = EncoderElement(MIDI_CC_TYPE, 0, 10, (Live.MidiMap.MapMode.absolute), name='Master_Encoder') self._sliders = ButtonMatrixElement(rows=[ [SliderElement(MIDI_CC_TYPE, 0, identifier, name=('Slider_%d' % index)) for index, identifier in enumerate(SLIDER_IDS)]]) self._master_slider = SliderElement(MIDI_CC_TYPE, 0, 7, name='Master_Slider') self._play_button = ButtonElement(True, MIDI_CC_TYPE, 0, 26) self._stop_button = ButtonElement(True, MIDI_CC_TYPE, 0, 25) self._record_button = ButtonElement(True, MIDI_CC_TYPE, 0, 28) self._forward_button = ButtonElement(True, MIDI_CC_TYPE, 0, 24) self._backward_button = ButtonElement(True, MIDI_CC_TYPE, 0, 21) self._ff_button = ButtonElement(True, MIDI_CC_TYPE, 0, 23) self._rw_button = ButtonElement(True, MIDI_CC_TYPE, 0, 22) self._device_mode_button = ButtonElement(True, MIDI_CC_TYPE, 0, 80) self._pan_mode_button = ButtonElement(True, MIDI_CC_TYPE, 0, 81) self._send_a_mode_button = ButtonElement(True, MIDI_CC_TYPE, 0, 82) self._send_b_mode_button = ButtonElement(True, MIDI_CC_TYPE, 0, 83) self._pads = ButtonMatrixElement(rows=[[ButtonElement(True, MIDI_NOTE_TYPE, 0, identifier) for identifier in row] for row in PAD_ROWS])
def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): is_momentary = True self._suggested_input_port = 'Oxygen' self._suggested_output_port = 'Oxygen' self._has_slider_section = True self._shift_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 57) self._shift_button.add_value_listener(self._shift_value) self._mixer = SpecialMixerComponent(NUM_TRACKS) self._mute_solo_buttons = [] self._track_up_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 111) self._track_down_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 110) self._master_slider = SliderElement(MIDI_CC_TYPE, GLOBAL_CHANNEL, 41) for index in range(NUM_TRACKS): self._mute_solo_buttons.append( ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 49 + index)) self._mixer.channel_strip(index).set_volume_control( SliderElement(MIDI_CC_TYPE, GLOBAL_CHANNEL, 33 + index)) self._shift_value(0) self._mixer.master_strip().set_volume_control(self._master_slider) self._mixer.selected_strip().set_volume_control(None) device = DeviceComponent( device_selection_follows_track_selection=True) device.set_parameter_controls( tuple([ EncoderElement(MIDI_CC_TYPE, GLOBAL_CHANNEL, 17 + index, Live.MidiMap.MapMode.absolute) for index in range(8) ])) self.set_device_component(device) ffwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 115) rwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 114) loop_button = ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 113) transport = TransportComponent() transport.set_stop_button( ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 116)) transport.set_play_button( ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 117)) transport.set_record_button( ButtonElement(is_momentary, MIDI_CC_TYPE, GLOBAL_CHANNEL, 118)) session = SessionComponent(0, 0) transport_view_modes = TransportViewModeSelector( transport, session, ffwd_button, rwd_button, loop_button)
def make_launch_control_encoder(identifier, name, channel=0): encoder = EncoderElement(MIDI_CC_TYPE, channel, identifier, Live.MidiMap.MapMode.absolute) encoder.reset = nop encoder.set_feedback_delay(-1) encoder.name = name return encoder
def __init__(self, *a, **k): (super(Alesis_V, self).__init__)(*a, **k) with self.component_guard(): encoders = ButtonMatrixElement(rows=[[ EncoderElement(MIDI_CC_TYPE, 0, (identifier + 20), (Live.MidiMap.MapMode.absolute), name=('Encoder_%d' % identifier)) for identifier in range(4) ]]) device = DeviceComponent( name='Device', is_enabled=False, layer=Layer(parameter_controls=encoders), device_selection_follows_track_selection=True) device.set_enabled(True) self.set_device_component(device)
def _setup_device_control(self): is_momentary = True device_bank_buttons = [] device_param_controls = [] for index in range(8): device_bank_buttons.append( ButtonElement(is_momentary, MIDI_NOTE_TYPE, 12, 70 + index)) device_param_controls.append( EncoderElement(MIDI_CC_TYPE, 12, 12 + index, Live.MidiMap.MapMode.absolute)) device = DeviceComponent() device.set_bank_buttons(tuple(device_bank_buttons)) device.set_parameter_controls(tuple(device_param_controls)) device_translation_selector = ChannelTranslationSelector() device_translation_selector.set_controls_to_translate( tuple(device_param_controls)) device_translation_selector.set_mode_buttons( tuple(device_bank_buttons)) self.set_device_component(device)
def __init__(self, msg_type, channel, identifier, map_mode): EncoderElement.__init__(self, msg_type, channel, identifier, map_mode) self._peek_mode = False
def make_encoder(cc_no, name): encoder = EncoderElement(MIDI_CC_TYPE, 0, cc_no, Live.MidiMap.MapMode.absolute) encoder.set_feedback_delay(-1) encoder.name = name return encoder
def __init__(self): self._midi_channel = 1 self.main_faders = [] self.encoder_groups = [] self.encoder_buttons = [] self.buttons = [] #we are going to input this manually, so that it is easy to update later on: ##FADERS## self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 32)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 33)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 34)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 35)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 36)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 37)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 38)) self.main_faders.append( SliderElement(MIDI_CC_TYPE, self._midi_channel, 39)) ##ENCODERS## #group 1, pan controls# self.encoder_groups.append([]) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 102, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 103, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 104, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 105, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 106, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 107, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 108, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 109, Live.MidiMap.MapMode.absolute)) #group 2, send A controls# self.encoder_groups.append([]) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 64, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 65, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 66, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 67, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 68, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 69, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 70, Live.MidiMap.MapMode.absolute)) self.encoder_groups[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 71, Live.MidiMap.MapMode.absolute)) #group 3, send B controls# self.encoder_groups.append([]) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 72, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 73, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 74, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 75, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 76, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 77, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 78, Live.MidiMap.MapMode.absolute)) self.encoder_groups[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 79, Live.MidiMap.MapMode.absolute)) #group 4, send C controls# self.encoder_groups.append([]) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 80, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 81, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 82, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 83, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 84, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 85, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 86, Live.MidiMap.MapMode.absolute)) self.encoder_groups[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 87, Live.MidiMap.MapMode.absolute)) ##BUTTONS## #encoder buttons, all control groups, record buttons# self.encoder_buttons.append([]) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 56)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 57)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 58)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 59)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 60)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 61)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 62)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 63)) self.encoder_buttons[0].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 64)) #top row buttons, Track Enable Buttons# self.buttons.append([]) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 40)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 41)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 42)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 43)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 44)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 45)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 46)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 47)) #bottom row self.buttons, Record Self.Buttons# self.buttons.append([]) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 48)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 49)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 50)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 51)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 52)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 53)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 54)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 55)) #bottom self.buttons, purpose TBD# self.buttons.append([]) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 89)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 90)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 91)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 92))
def make_mixer_encoder(cc, channel, name, map_mode=volume_map_mode): if is_valid_midi_identifier(cc): if is_valid_midi_channel(channel): return EncoderElement(MIDI_CC_TYPE, channel, cc, map_mode, name=name)
def make_encoder(identifier, name): return EncoderElement(MIDI_CC_TYPE, 0, identifier, (Live.MidiMap.MapMode.absolute), name=name)
def make_encoder(cc_no): return EncoderElement(MIDI_CC_TYPE, GLOBAL_CHANNEL, cc_no, Live.MidiMap.MapMode.absolute)
def _mainCtrl(self): self.show_message("Loading Korg nanoKontrol Studio mappings") # Main transport controls transport.set_record_button(ButtonElement(1, MIDI_CC_TYPE, 0, 81)) transport.set_loop_button(ButtonElement(1, MIDI_CC_TYPE, 0, 54)) transport.set_play_button(ButtonElement(1, MIDI_CC_TYPE, 0, 80)) transport.set_stop_button(ButtonElement(1, MIDI_CC_TYPE, 0, 63)) transport.set_tap_tempo_button(ButtonElement(1, MIDI_CC_TYPE, 0, 62)) # Seek/scrub controls: (is_momentary, MIDI_CC_TYPE, channel, CCnum). For this to work, nanoKontrol Studio's jog wheel should be set to: Inc/Dec 2, Acceleration 2. transport.set_seek_forward_button(ButtonElement( 0, MIDI_CC_TYPE, 0, 83)) transport.set_seek_backward_button( ButtonElement(0, MIDI_CC_TYPE, 0, 85)) transport.set_metronome_button(ButtonElement(1, MIDI_CC_TYPE, 0, 58)) transport.set_arrangement_overdub_button( ButtonElement(1, MIDI_CC_TYPE, 0, 59)) # nKS' 1st strip is always the current track, set with the Track < and > buttons. mixer.set_select_buttons(ButtonElement(1, MIDI_CC_TYPE, 0, 61), ButtonElement(1, MIDI_CC_TYPE, 0, 60)) mixer.selected_strip().set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 0, 21)) mixer.selected_strip().set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 0, 29)) mixer.selected_strip().set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 0, 38)) mixer.selected_strip().set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 0, 46)) mixer.selected_strip().set_pan_control( EncoderElement(MIDI_CC_TYPE, 0, 13, Live.MidiMap.MapMode.absolute)) mixer.selected_strip().set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 2)) # nKS' 8th strip is always Master. Fader is volume and pot is cue level. mixer.master_strip().set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 12)) mixer.set_prehear_volume_control( EncoderElement(MIDI_CC_TYPE, 0, 20, Live.MidiMap.MapMode.absolute) ) # Known as cue/preview in current versions of Live; controls e.g. metronome level in headphones # Scene 2 on the nKS should be factory defaults - ie same CCs as Scene 1 but on MIDI Channel 2 (1). This is set up like a conventional 8-track mix control surface. mixer.channel_strip(0).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 21)) mixer.channel_strip(1).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 22)) mixer.channel_strip(2).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 23)) mixer.channel_strip(3).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 24)) mixer.channel_strip(4).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 25)) mixer.channel_strip(5).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 26)) mixer.channel_strip(6).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 27)) mixer.channel_strip(7).set_mute_button( ButtonElement(1, MIDI_CC_TYPE, 1, 28)) mixer.channel_strip(0).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 29)) mixer.channel_strip(1).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 30)) mixer.channel_strip(2).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 31)) mixer.channel_strip(3).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 33)) mixer.channel_strip(4).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 34)) mixer.channel_strip(5).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 35)) mixer.channel_strip(6).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 36)) mixer.channel_strip(7).set_solo_button( ButtonElement(1, MIDI_CC_TYPE, 1, 37)) mixer.channel_strip(0).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 38)) mixer.channel_strip(1).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 39)) mixer.channel_strip(2).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 40)) mixer.channel_strip(3).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 41)) mixer.channel_strip(4).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 42)) mixer.channel_strip(5).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 43)) mixer.channel_strip(6).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 44)) mixer.channel_strip(7).set_arm_button( ButtonElement(1, MIDI_CC_TYPE, 1, 45)) mixer.channel_strip(0).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 46)) mixer.channel_strip(1).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 47)) mixer.channel_strip(2).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 48)) mixer.channel_strip(3).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 49)) mixer.channel_strip(4).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 50)) mixer.channel_strip(5).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 51)) mixer.channel_strip(6).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 52)) mixer.channel_strip(7).set_shift_button( ButtonElement(1, MIDI_CC_TYPE, 1, 53)) mixer.channel_strip(0).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 13, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(1).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 14, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(2).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 15, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(3).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 16, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(4).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 17, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(5).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 18, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(6).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 19, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(7).set_pan_control( EncoderElement(MIDI_CC_TYPE, 1, 20, Live.MidiMap.MapMode.absolute)) mixer.channel_strip(0).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 2)) mixer.channel_strip(1).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 3)) mixer.channel_strip(2).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 4)) mixer.channel_strip(3).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 5)) mixer.channel_strip(4).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 6)) mixer.channel_strip(5).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 8)) mixer.channel_strip(6).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 9)) mixer.channel_strip(7).set_volume_control( SliderElement(MIDI_CC_TYPE, 1, 12))
def __init__(self): """initializer for the BCR2000 controller->object mappings""" self._midi_channel = 0 self.main_encoders = [] self.buttons = [] self.encoder_groups = [] self.encoder_buttons = [] #Column 1 (Left) self.main_encoders.append([]) self.main_encoders[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 81, Live.MidiMap.MapMode.absolute)) self.main_encoders[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 89, Live.MidiMap.MapMode.absolute)) self.main_encoders[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 97, Live.MidiMap.MapMode.absolute)) #Column 2 self.main_encoders.append([]) self.main_encoders[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 82, Live.MidiMap.MapMode.absolute)) self.main_encoders[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 90, Live.MidiMap.MapMode.absolute)) self.main_encoders[1].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 98, Live.MidiMap.MapMode.absolute)) #Column 3 self.main_encoders.append([]) self.main_encoders[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 83, Live.MidiMap.MapMode.absolute)) self.main_encoders[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 91, Live.MidiMap.MapMode.absolute)) self.main_encoders[2].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 99, Live.MidiMap.MapMode.absolute)) #Column 4 self.main_encoders.append([]) self.main_encoders[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 84, Live.MidiMap.MapMode.absolute)) self.main_encoders[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 92, Live.MidiMap.MapMode.absolute)) self.main_encoders[3].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 100, Live.MidiMap.MapMode.absolute)) #Column 5 self.main_encoders.append([]) self.main_encoders[4].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 85, Live.MidiMap.MapMode.absolute)) self.main_encoders[4].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 93, Live.MidiMap.MapMode.absolute)) self.main_encoders[4].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 101, Live.MidiMap.MapMode.absolute)) #Column 6 self.main_encoders.append([]) self.main_encoders[5].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 86, Live.MidiMap.MapMode.absolute)) self.main_encoders[5].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 94, Live.MidiMap.MapMode.absolute)) self.main_encoders[5].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 102, Live.MidiMap.MapMode.absolute)) #Column 7 self.main_encoders.append([]) self.main_encoders[6].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 87, Live.MidiMap.MapMode.absolute)) self.main_encoders[6].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 95, Live.MidiMap.MapMode.absolute)) self.main_encoders[6].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 103, Live.MidiMap.MapMode.absolute)) #Column 8 self.main_encoders.append([]) self.main_encoders[7].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 88, Live.MidiMap.MapMode.absolute)) self.main_encoders[7].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 96, Live.MidiMap.MapMode.absolute)) self.main_encoders[7].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 104, Live.MidiMap.MapMode.absolute)) #top row self.buttons self.buttons.append([]) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 65)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 66)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 67)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 68)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 69)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 70)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 71)) self.buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 72)) #bottom row self.buttons self.buttons.append([]) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 73)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 74)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 75)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 76)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 77)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 78)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 79)) self.buttons[1].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 80)) #bottom self.buttons self.buttons.append([]) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 105)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 106)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 107)) self.buttons[2].append( ButtonElement(True, MIDI_CC_TYPE, self._midi_channel, 108)) #first encoder group self.encoder_groups.append([]) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 1, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 2, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 3, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 4, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 5, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 6, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 7, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 8, Live.MidiMap.MapMode.absolute)) #second encoder group self.encoder_groups.append([]) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 9, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 10, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 11, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 12, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 13, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 14, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 15, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 16, Live.MidiMap.MapMode.absolute)) #third encoder group self.encoder_groups.append([]) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 17, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 18, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 19, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 20, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 21, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 22, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 23, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 24, Live.MidiMap.MapMode.absolute)) #fourth encoder group self.encoder_groups.append([]) self.encoder_groups.append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 17, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 18, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 19, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 20, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 21, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 22, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 23, Live.MidiMap.MapMode.absolute)) self.encoder_groups[0].append( EncoderElement(MIDI_CC_TYPE, self._midi_channel, 24, Live.MidiMap.MapMode.absolute)) ##ENCODER SELF.BUTTONS## #group one self.encoder_buttons.append([]) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 33)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 34)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 35)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 36)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 37)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 38)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 39)) self.encoder_buttons[0].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 40)) #group two self.encoder_buttons.append([]) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 41)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 42)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 43)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 44)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 45)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 46)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 47)) self.encoder_buttons[1].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 48)) #group three self.encoder_buttons.append([]) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 49)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 50)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 51)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 52)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 53)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 54)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 55)) self.encoder_buttons[2].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 56)) #group four self.encoder_buttons.append([]) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 57)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 58)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 59)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 60)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 61)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 62)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 63)) self.encoder_buttons[3].append( ButtonElement(False, MIDI_CC_TYPE, self._midi_channel, 64))
def release_parameter(self): EncoderElement.release_parameter(self) self._update_led()
def connect_to(self, parameter): if parameter != self._parameter_to_map_to: if not self.is_mapped_manually(): self.send_value((self._off_value), force=True) EncoderElement.connect_to(self, parameter)
def make_encoder(name, identifier, channel=0): return EncoderElement(MIDI_CC_TYPE, channel, identifier, (Live.MidiMap.MapMode.absolute), name=name)
def _create_controls(self): make_color_button = partial(make_button, skin=(self._skin)) self._shift_button = make_button(0, 81, name='Shift_Button') self._matrix = ButtonMatrixElement(name='Button_Matrix') self._scene_launch_buttons = [ make_color_button(0, (index + 82), name=('Scene_%d_Launch_Button' % index)) for index in range(SESSION_HEIGHT) ] self._track_stop_buttons = [ make_color_button(index, 52, name=('Track_%d_Stop_Button' % index)) for index in range(SESSION_WIDTH) ] for scene_index in range(SESSION_HEIGHT): row = [ make_color_button(track_index, (scene_index + 53), name=('%d_Clip_%d_Button' % (track_index, scene_index))) for track_index in range(SESSION_WIDTH) ] self._matrix.add_row(row) self._selected_scene_launch_button = make_pedal_button( 64, name='Selected_Scene_Launch_Button') self._scene_launch_buttons = ButtonMatrixElement( name='Scene_Launch_Buttons', rows=[self._scene_launch_buttons]) self._solo_buttons = [ make_button(track_index, 49, name=('%d_Solo_Button' % track_index)) for track_index in range(MIXER_SIZE) ] self._mute_buttons = [ make_button(track_index, 50, name=('%d_Mute_Button' % track_index)) for track_index in range(MIXER_SIZE) ] self._master_volume_control = make_slider(0, 14, name='Master_Volume_Control') self._prehear_control = EncoderElement( MIDI_CC_TYPE, 0, 47, (MapMode.relative_two_compliment), name='Prehear_Volume_Control') self._master_select_button = make_button(0, 80, name='Master_Select_Button') self._select_buttons = [ make_button(track_index, 51, name=('%d_Select_Button' % track_index)) for track_index in range(8) ] self._arm_buttons = [ make_button(track_index, 48, name=('%d_Arm_Button' % track_index)) for track_index in range(8) ] self._sliders = [ make_slider(track_index, 7, name=('%d_Volume_Control' % track_index)) for track_index in range(8) ] self._note_matrix = ButtonMatrixElement(name='Note_Button_Matrix') self._note_buttons = [[ make_button(9, (note + i), name=('Note_%d_Button' % (note + i))) for i in range(4) ] for note in range(36, 75, 4)] for row in self._note_buttons: for button in row: button.send_depends_on_forwarding = False self._note_matrix.add_row(row)
def make_encoder(channel, identifier, *a, **k): return EncoderElement(MIDI_CC_TYPE, channel, identifier, MapMode.relative_two_compliment, *a, **k)
def make_encoder(channel, cc, name): map_mode = Live.MidiMap.MapMode.absolute return EncoderElement(MIDI_CC_TYPE, channel, cc, map_mode=map_mode, name=name)
def _mode1(self): self.show_message("_mode1 is active") # mixer global mixer # volumes self.mixer.channel_strip(7).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 25, _map_modes.absolute)) self.mixer.channel_strip(6).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 24, _map_modes.absolute)) self.mixer.channel_strip(5).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 23, _map_modes.absolute)) self.mixer.channel_strip(4).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 22, _map_modes.absolute)) self.mixer.channel_strip(3).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 17, _map_modes.absolute)) self.mixer.channel_strip(2).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 16, _map_modes.absolute)) self.mixer.channel_strip(1).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 15, _map_modes.absolute)) self.mixer.channel_strip(0).set_volume_control(EncoderElement(MIDI_CC_TYPE, 14, 14, _map_modes.absolute)) # pan self.mixer.channel_strip(7).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 29, _map_modes.absolute)) self.mixer.channel_strip(6).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 28, _map_modes.absolute)) self.mixer.channel_strip(5).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 27, _map_modes.absolute)) self.mixer.channel_strip(4).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 26, _map_modes.absolute)) self.mixer.channel_strip(3).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 21, _map_modes.absolute)) self.mixer.channel_strip(2).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 20, _map_modes.absolute)) self.mixer.channel_strip(1).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 19, _map_modes.absolute)) self.mixer.channel_strip(0).set_pan_control(EncoderElement(MIDI_CC_TYPE, 14, 18, _map_modes.absolute))