def _setup_mixer_control(self): num_tracks = GRIDSIZE[ 0] # Here we define the mixer width in tracks (a mixer has only one dimension) global mixer # We want to instantiate the global mixer as a MixerComponent object (it was a global "None" type up until now...) mixer = MixerComponent( num_tracks) #(num_tracks, num_returns, with_eqs, with_filters) mixer.set_track_offset( 0) #Sets start point for mixer strip (offset from left) """set up the mixer buttons""" self.song().view.selected_track = mixer.channel_strip(0)._track master = mixer.master_strip() master.set_volume_control( SliderElement(MIDI_CC_TYPE, CHANNEL_USER, MASTER_VOLUME)) mixer.set_prehear_volume_control( SliderElement(MIDI_CC_TYPE, CHANNEL_USER, PREHEAR)) for index in range(GRIDSIZE[0]): mixer.channel_strip(index).set_volume_control( SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, MIX_FADERS[index])) # mixer.channel_strip(index).set_volume_control(SliderElement(MIDI_CC_TYPE, CHANNEL_INST, MIX_FADERS[index])) mixer.channel_strip(index).set_pan_control( SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, PAN_CONTROLS[index])) mixer.channel_strip(index).set_arm_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL_INST, ARM_BUTTONS[index])) #sets the record arm button mixer.channel_strip(index).set_solo_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL_INST, SOLO_BUTTONS[index])) mixer.channel_strip(index).set_mute_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL_INST, MUTE_BUTTONS[index])) mixer.channel_strip(index).set_select_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL_INST, TRACK_SELECTS[index])) mixer.channel_strip(index).set_send_controls([ SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, SEND_CONTROLS[index][0]), SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, SEND_CONTROLS[index][1]), SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, SEND_CONTROLS[index][2]), SliderElement(MIDI_CC_TYPE, CHANNEL_MIXER, SEND_CONTROLS[index][3]) ]) """TRANSPORT CONTROLS""" stop_button = ButtonElement(False, MIDI_CC_TYPE, CHANNEL_MIXER, STOP_BUTTON) play_button = ButtonElement(False, MIDI_CC_TYPE, CHANNEL_MIXER, PLAY_BUTTON) record_button = ButtonElement(False, MIDI_CC_TYPE, CHANNEL_MIXER, RECORD_BUTTON) overdub_button = ButtonElement(False, MIDI_CC_TYPE, CHANNEL_MIXER, OVERDUB_BUTTON) transport = TransportComponent() transport.TEMPO_TOP = 188 transport.set_stop_button(stop_button) transport.set_play_button(play_button) transport.set_overdub_button(overdub_button) transport.set_record_button(record_button) transport.set_seek_buttons( ButtonElement(False, MIDI_CC_TYPE, 0, SEEK_LEFT), ButtonElement(False, MIDI_CC_TYPE, 0, SEEK_RIGHT)) transport.set_tempo_control( SliderElement(MIDI_CC_TYPE, CHANNEL_USER, TEMPO)) transport.set_metronome_button( ButtonElement(False, MIDI_CC_TYPE, CHANNEL_USER, METRONOME)) transport.set_tap_tempo_button( ButtonElement(False, MIDI_CC_TYPE, CHANNEL_USER, TAP_TEMPO))
def __init__(self, *a, **k): super(MPK261MXLOOP, self).__init__(*a, **k) self.show_message("-----------------------= MPK261MXLOOP LOADING - maxcloutier13 says hi =----------------------------------------------------------") self.log_message("-----------------------= MPK261MXLOOP LOADING - maxcloutier13 says hi =----------------------------------------------------------") with self.component_guard(): midimap = MidiMap() #Sustain pedal 1 = Play/Record/Overdub switch for live looping self._LoopRecordButton = ButtonElement(True, MIDI_CC_TYPE, 0, 64) self._LoopRecordButton.add_value_listener(self._launch_clip, False) #Sustain pedal 2 = Sustain pour l'instant ;o) #self._LoopRecordButton = ButtonElement(True, MIDI_CC_TYPE, 0, 65) #Control up/down/left/right using the daw controls self._UpButton = ButtonElement(False, MIDI_CC_TYPE, 0, 88, name='UpButton') self._DownButton = ButtonElement(False, MIDI_CC_TYPE, 0, 89, name='DownButton') self._LeftButton = ButtonElement(False, MIDI_CC_TYPE, 0, 20, name='LeftButton') self._RightButton = ButtonElement(False, MIDI_CC_TYPE, 0, 21, name='RightButton') #Listeners for the functions self._UpButton.add_value_listener(self._move_up, False) self._DownButton.add_value_listener(self._move_down, False) self._LeftButton.add_value_listener(self._move_left, False) self._RightButton.add_value_listener(self._move_right, False) #Super crude manual init for the custom buttons and faders #Control Bank A - Channel 1 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder0 = EncoderElement(MIDI_CC_TYPE,1,22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder0') self._Encoder1 = EncoderElement(MIDI_CC_TYPE,1,23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder1') self._Encoder2 = EncoderElement(MIDI_CC_TYPE,1,24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder2') self._Encoder3 = EncoderElement(MIDI_CC_TYPE,1,25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder3') self._Encoder4 = EncoderElement(MIDI_CC_TYPE,1,26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder4') self._Encoder5 = EncoderElement(MIDI_CC_TYPE,1,27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder5') self._Encoder6 = EncoderElement(MIDI_CC_TYPE,1,28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder6') self._Encoder7 = EncoderElement(MIDI_CC_TYPE,1,29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder7') self._ArmButton0 = ButtonElement(False, MIDI_CC_TYPE, 0, 32, name='ArmButton0') self._ArmButton1 = ButtonElement(False, MIDI_CC_TYPE, 0, 33, name='ArmButton1') self._ArmButton2 = ButtonElement(False, MIDI_CC_TYPE, 0, 34, name='ArmButton2') self._ArmButton3 = ButtonElement(False, MIDI_CC_TYPE, 0, 35, name='ArmButton3') self._ArmButton4 = ButtonElement(False, MIDI_CC_TYPE, 0, 36, name='ArmButton4') self._ArmButton5 = ButtonElement(False, MIDI_CC_TYPE, 0, 37, name='ArmButton5') self._ArmButton6 = ButtonElement(False, MIDI_CC_TYPE, 0, 38, name='ArmButton6') self._ArmButton7 = ButtonElement(False, MIDI_CC_TYPE, 0, 39, name='ArmButton7') self._VolumeSlider0 = SliderElement(MIDI_CC_TYPE, 0, 12, name='VolumeSlider0') self._VolumeSlider1 = SliderElement(MIDI_CC_TYPE, 0, 13, name='VolumeSlider1') self._VolumeSlider2 = SliderElement(MIDI_CC_TYPE, 0, 14, name='VolumeSlider2') self._VolumeSlider3 = SliderElement(MIDI_CC_TYPE, 0, 15, name='VolumeSlider3') self._VolumeSlider4 = SliderElement(MIDI_CC_TYPE, 0, 16, name='VolumeSlider4') self._VolumeSlider5 = SliderElement(MIDI_CC_TYPE, 0, 17, name='VolumeSlider5') self._VolumeSlider6 = SliderElement(MIDI_CC_TYPE, 0, 18, name='VolumeSlider6') self._VolumeSlider7 = SliderElement(MIDI_CC_TYPE, 0, 19, name='VolumeSlider7') #Control Bank B - Channel 2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder8 = EncoderElement(MIDI_CC_TYPE,2,22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder8') self._Encoder9 = EncoderElement(MIDI_CC_TYPE,2,23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder9') self._Encoder10 = EncoderElement(MIDI_CC_TYPE,2,24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder10') self._Encoder11 = EncoderElement(MIDI_CC_TYPE,2,25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder11') self._Encoder12 = EncoderElement(MIDI_CC_TYPE,2,26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder12') self._Encoder13 = EncoderElement(MIDI_CC_TYPE,2,27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder13') self._Encoder14 = EncoderElement(MIDI_CC_TYPE,2,28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder14') self._Encoder15 = EncoderElement(MIDI_CC_TYPE,2,29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder15') self._ArmButton8 = ButtonElement(False, MIDI_CC_TYPE, 1, 32, name='ArmButton8') self._ArmButton9 = ButtonElement(False, MIDI_CC_TYPE, 1, 33, name='ArmButton9') self._ArmButton10 = ButtonElement(False, MIDI_CC_TYPE, 1, 34, name='ArmButton10') self._ArmButton11 = ButtonElement(False, MIDI_CC_TYPE, 1, 35, name='ArmButton11') self._ArmButton12 = ButtonElement(False, MIDI_CC_TYPE, 1, 36, name='ArmButton12') self._ArmButton13 = ButtonElement(False, MIDI_CC_TYPE, 1, 37, name='ArmButton13') self._ArmButton14 = ButtonElement(False, MIDI_CC_TYPE, 1, 38, name='ArmButton14') self._ArmButton15 = ButtonElement(False, MIDI_CC_TYPE, 1, 39, name='ArmButton15') self._VolumeSlider8 = SliderElement(MIDI_CC_TYPE, 1, 12, name='VolumeSlider8') self._VolumeSlider9 = SliderElement(MIDI_CC_TYPE, 1, 13, name='VolumeSlider9') self._VolumeSlider10 = SliderElement(MIDI_CC_TYPE, 1, 14, name='VolumeSlider10') self._VolumeSlider11 = SliderElement(MIDI_CC_TYPE, 1, 15, name='VolumeSlider11') self._VolumeSlider12 = SliderElement(MIDI_CC_TYPE, 1, 16, name='VolumeSlider12') self._VolumeSlider13 = SliderElement(MIDI_CC_TYPE, 1, 17, name='VolumeSlider13') self._VolumeSlider14 = SliderElement(MIDI_CC_TYPE, 1, 18, name='VolumeSlider14') self._VolumeSlider15 = SliderElement(MIDI_CC_TYPE, 1, 19, name='VolumeSlider15') #Control Bank C - Channel 3 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder16 = EncoderElement(MIDI_CC_TYPE,3,22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder16') self._Encoder17 = EncoderElement(MIDI_CC_TYPE,3,23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder17') self._Encoder18 = EncoderElement(MIDI_CC_TYPE,3,24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder18') self._Encoder19 = EncoderElement(MIDI_CC_TYPE,3,25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder19') self._Encoder20 = EncoderElement(MIDI_CC_TYPE,3,26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder20') self._Encoder21 = EncoderElement(MIDI_CC_TYPE,3,27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder21') self._Encoder22 = EncoderElement(MIDI_CC_TYPE,3,28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder22') self._Encoder23 = EncoderElement(MIDI_CC_TYPE,3,29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder23') self._ArmButton16 = ButtonElement(False, MIDI_CC_TYPE, 2, 32, name='ArmButton16') self._ArmButton17 = ButtonElement(False, MIDI_CC_TYPE, 2, 33, name='ArmButton17') self._ArmButton18 = ButtonElement(False, MIDI_CC_TYPE, 2, 34, name='ArmButton18') self._ArmButton19 = ButtonElement(False, MIDI_CC_TYPE, 2, 35, name='ArmButton19') self._ArmButton20 = ButtonElement(False, MIDI_CC_TYPE, 2, 36, name='ArmButton20') self._ArmButton21 = ButtonElement(False, MIDI_CC_TYPE, 2, 37, name='ArmButton21') self._ArmButton22 = ButtonElement(False, MIDI_CC_TYPE, 2, 38, name='ArmButton22') self._ArmButton23 = ButtonElement(False, MIDI_CC_TYPE, 2, 39, name='ArmButton23') self._VolumeSlider16 = SliderElement(MIDI_CC_TYPE, 2, 12, name='VolumeSlider16') self._VolumeSlider17 = SliderElement(MIDI_CC_TYPE, 2, 13, name='VolumeSlider17') self._VolumeSlider18 = SliderElement(MIDI_CC_TYPE, 2, 14, name='VolumeSlider18') self._VolumeSlider19 = SliderElement(MIDI_CC_TYPE, 2, 15, name='VolumeSlider19') self._VolumeSlider20 = SliderElement(MIDI_CC_TYPE, 2, 16, name='VolumeSlider20') self._VolumeSlider21 = SliderElement(MIDI_CC_TYPE, 2, 17, name='VolumeSlider21') self._VolumeSlider22 = SliderElement(MIDI_CC_TYPE, 2, 18, name='VolumeSlider22') self._VolumeSlider23 = SliderElement(MIDI_CC_TYPE, 2, 19, name='VolumeSlider23') #Drum Bank A - Channel 4-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Pad0 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 81, name='Pad0') self._Pad1 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 83, name='Pad1') self._Pad2 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 84, name='Pad2') self._Pad3 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 86, name='Pad3') self._Pad4 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 74, name='Pad4') self._Pad5 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 76, name='Pad5') self._Pad6 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 77, name='Pad6') self._Pad7 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 79, name='Pad7') self._Pad8 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 67, name='Pad8') self._Pad9 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 69, name='Pad9') self._Pad10 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 71, name='Pad10') self._Pad11 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 72, name='Pad11') self._Pad12 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 60, name='Pad12') self._Pad13 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 62, name='Pad13') self._Pad14 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 64, name='Pad14') self._Pad15 = ButtonElement(True, MIDI_NOTE_TYPE, 3, 65, name='Pad15') self._Pads = ButtonMatrixElement(rows=[[self._Pad0, self._Pad1, self._Pad2, self._Pad3], [self._Pad4, self._Pad5, self._Pad6, self._Pad7], [self._Pad8, self._Pad9, self._Pad10, self._Pad11], [self._Pad12, self._Pad13, self._Pad14, self._Pad15]]) #Drum Bank B ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #Drum Bank C ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #Drum Bank D ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # #Drum rack ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- drum_rack = DrumRackComponent(name='Drum_Rack', is_enabled=False, layer=Layer(pads=self._Pads)) drum_rack.set_enabled(True) #Transport ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- transport = TransportComponent(name='Transport', is_enabled=False, layer=Layer(play_button=midimap['Play'], record_button=midimap['Record'], stop_button=midimap['Stop'], loop_button=midimap['Loop'])) #, seek_forward_button=midimap['Forward'], seek_backward_button=midimap['Backward'] transport.set_enabled(True) #Make the Back/Fwd button just normal mapable CC senders self._BackButton = ButtonElement(False, MIDI_CC_TYPE, 0, 116, name='BackButton') self._FwdButton = ButtonElement(False, MIDI_CC_TYPE, 0, 115, name='FwdButton') #Device ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._device = DeviceComponent(name='Device', is_enabled=False, layer=Layer(parameter_controls=midimap['Encoders']), device_selection_follows_track_selection=True) self._device.set_enabled(True) self.set_device_component(self._device) #Mixer ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mixer_size = 24 self._mixer = MixerComponent(mixer_size, name='Mixer', is_enabled=False) #Super crude and repetitive mapping because after all this shit I'm not spending time learning how to loop this crap hehe #Bank A self._mixer.channel_strip(0).layer = Layer(volume_control = self._VolumeSlider0, arm_button=self._ArmButton0, pan_control=self._Encoder0) self._mixer.channel_strip(1).layer = Layer(volume_control = self._VolumeSlider1, arm_button=self._ArmButton1, pan_control=self._Encoder1) self._mixer.channel_strip(2).layer = Layer(volume_control = self._VolumeSlider2, arm_button=self._ArmButton2, pan_control=self._Encoder2) self._mixer.channel_strip(3).layer = Layer(volume_control = self._VolumeSlider3, arm_button=self._ArmButton3, pan_control=self._Encoder3) self._mixer.channel_strip(4).layer = Layer(volume_control = self._VolumeSlider4, arm_button=self._ArmButton4, pan_control=self._Encoder4) self._mixer.channel_strip(5).layer = Layer(volume_control = self._VolumeSlider5, arm_button=self._ArmButton5, pan_control=self._Encoder5) self._mixer.channel_strip(6).layer = Layer(volume_control = self._VolumeSlider6, arm_button=self._ArmButton6, pan_control=self._Encoder6) self._mixer.channel_strip(7).layer = Layer(volume_control = self._VolumeSlider7, arm_button=self._ArmButton7, pan_control=self._Encoder7) #Bank B self._mixer.channel_strip(8).layer = Layer(volume_control = self._VolumeSlider8, arm_button=self._ArmButton8, pan_control=self._Encoder8) self._mixer.channel_strip(9).layer = Layer(volume_control = self._VolumeSlider9, arm_button=self._ArmButton9, pan_control=self._Encoder9) self._mixer.channel_strip(10).layer = Layer(volume_control = self._VolumeSlider10, arm_button=self._ArmButton10, pan_control=self._Encoder10) self._mixer.channel_strip(11).layer = Layer(volume_control = self._VolumeSlider11, arm_button=self._ArmButton11, pan_control=self._Encoder11) self._mixer.channel_strip(12).layer = Layer(volume_control = self._VolumeSlider12, arm_button=self._ArmButton12, pan_control=self._Encoder12) self._mixer.channel_strip(13).layer = Layer(volume_control = self._VolumeSlider13, arm_button=self._ArmButton13, pan_control=self._Encoder13) self._mixer.channel_strip(14).layer = Layer(volume_control = self._VolumeSlider14, arm_button=self._ArmButton14, pan_control=self._Encoder14) self._mixer.channel_strip(15).layer = Layer(volume_control = self._VolumeSlider15, arm_button=self._ArmButton15, pan_control=self._Encoder15) #Bank C self._mixer.channel_strip(16).layer = Layer(volume_control = self._VolumeSlider16, arm_button=self._ArmButton16, pan_control=self._Encoder16) self._mixer.channel_strip(17).layer = Layer(volume_control = self._VolumeSlider17, arm_button=self._ArmButton17, pan_control=self._Encoder17) self._mixer.channel_strip(18).layer = Layer(volume_control = self._VolumeSlider18, arm_button=self._ArmButton18, pan_control=self._Encoder18) self._mixer.channel_strip(19).layer = Layer(volume_control = self._VolumeSlider19, arm_button=self._ArmButton19, pan_control=self._Encoder19) self._mixer.channel_strip(20).layer = Layer(volume_control = self._VolumeSlider20, arm_button=self._ArmButton20, pan_control=self._Encoder20) self._mixer.channel_strip(21).layer = Layer(volume_control = self._VolumeSlider21, arm_button=self._ArmButton21, pan_control=self._Encoder21) self._mixer.channel_strip(22).layer = Layer(volume_control = self._VolumeSlider22, arm_button=self._ArmButton22, pan_control=self._Encoder22) self._mixer.channel_strip(23).layer = Layer(volume_control = self._VolumeSlider23, arm_button=self._ArmButton23, pan_control=self._Encoder23) self._mixer.set_enabled(True) #Track change listener self.song().view.add_selected_track_listener(self._update_selected_device)
def _create_transport(self): self._transport = TransportComponent(is_enabled=False, name='Transport', layer=Layer(play_button=self._play_button, stop_button=self._stop_button, loop_button=self._loop_button, record_button=self._record_button)) self._transport.set_enabled(True)
def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): is_momentary = True self._device_selection_follows_track_selection = True self.set_pad_translations(PAD_TRANSLATIONS) self._suggested_input_port = 'HyperControl' self._suggested_output_port = 'HyperControl' self._display_on_button = ButtonElement(not is_momentary, MIDI_CC_TYPE, 15, 79) self._waiting_for_first_response = True mixer1 = DisplayingMixerComponent(0) mixer1.set_select_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 111), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 110)) mixer1.set_mute_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 12)) mixer1.set_solo_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 13)) mixer2 = NotifyingMixerComponent(8) mixer2.set_bank_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 15), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 14)) mixer2.master_strip().set_volume_control( SliderElement(MIDI_CC_TYPE, 15, 41)) for index in range(8): mixer2.channel_strip(index).set_volume_control( SliderElement(MIDI_CC_TYPE, 15, 33 + index)) device = PageableDeviceComponent() self.set_device_component(device) ffwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 115) rwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 114) loop_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 113) transport = TransportComponent() transport.set_stop_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 116)) transport.set_play_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 117)) transport.set_record_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 118)) session = SessionComponent(0, 0) transport_view_modes = TransportViewModeSelector( transport, session, ffwd_button, rwd_button, loop_button) select_button_modes = SelectButtonModeSelector( mixer2, tuple([ ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 49 + offset) for offset in range(8) ])) select_button_modes.set_mode_toggle( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 57)) self._mixer_encoder_modes = EncoderMixerModeSelector(mixer2) encoders = [] for offset in range(8): encoders.append( PeekableEncoderElement( MIDI_CC_TYPE, 15, 17 + offset, Live.MidiMap.MapMode.relative_smooth_two_compliment)) encoders[-1].set_feedback_delay(-1) mixer_or_device = MixerOrDeviceModeSelector( self._mixer_encoder_modes, device, tuple(encoders), tuple([ ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 74 + offset) for offset in range(4) ])) mixer_or_device.set_mode_toggle( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 109)) mixer_or_device.set_peek_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 78)) self._track_display = PhysicalDisplayElement(8, 1) self._track_display.set_clear_all_message(SYSEX_START + (16, 247)) self._track_display.set_message_parts(SYSEX_START + (17, 1, 0, 0), (247, )) self._track_display.segment(0).set_data_source( mixer1.selected_strip().track_name_data_source()) device_display = PhysicalDisplayElement(8, 1) device_display.set_message_parts(SYSEX_START + (17, 1, 0, 10), (247, )) parameter_display = PhysicalDisplayElement(16, 1) parameter_display.set_message_parts(SYSEX_START + (17, 2, 0, 0), (247, )) select_button_modes.set_mode_display(parameter_display) mixer1.set_display(parameter_display) mixer2.set_bank_display(parameter_display) page_displays = [] for index in range(4): page_displays.append(PhysicalDisplayElement(5, 1)) page_displays[-1].set_message_parts( SYSEX_START + (17, 4, index, 0), (247, )) encoder_display = PhysicalDisplayElement(80, 8) encoder_display.set_message_parts(SYSEX_START + (17, 3), (247, )) for index in range(8): pos_id = tuple() if index != 0: pos_id += (0, ) if index > 3: pos_id += (index % 4, 13) else: pos_id += (index % 4, 0) encoder_display.segment(index).set_position_identifier(pos_id) mixer_or_device.set_displays(encoder_display, parameter_display, device_display, tuple(page_displays)) for component in self.components: component.set_enabled(False)
def _create_transport(self): self._transport = TransportComponent(is_enabled=True, name='Transport') self._transport.layer = Layer(play_button=self._play_button, stop_button=self._stop_button, record_button=self._record_button)
def _create_transport(self): def play_toggle_model_transform(value): return False if self._shift_button.is_pressed() else value return TransportComponent(name='Transport', is_enabled=False, play_toggle_model_transform=play_toggle_model_transform, layer=Layer(play_button=self._play_button, record_button=self._record_button))
def _build_components(self): self._buttons = {} for identifier in range(5, 53) + range(64, 68): # We create the shift button in a special way if identifier == OP1_SHIFT_BUTTON: continue # Encoders present as buttons when values are changed button = APCUtils.make_pedal_button(identifier) button.add_value_listener(self.debug_button_handler) self._buttons[identifier] = button # Encoder buttons # See notes below for explanation of exclusion of first button # for identifier in [OP1_ENCODER_2_BUTTON, OP1_ENCODER_3_BUTTON, OP1_ENCODER_4_BUTTON]: # button = APCUtils.make_pedal_button(identifier) # button.add_value_listener(self.debug_button_handler) # APCUtils.make_pedal_button(identifier] = butto) self._notes = {} for identifier in range(OP1_MIN_NOTE, OP1_MAX_NOTE + 1): note = APCUtils.make_button(CHANNEL, identifier) note.add_value_listener(self.debug_note_handler) self._notes[identifier] = note # Buttons self._button_shift = ButtonElement( is_momentary=True, msg_type=MIDI_CC_TYPE, channel=0, identifier=OP1_SHIFT_BUTTON, # Required for modifier buttons resource_type=PrioritizedResource, name='ShiftButton', ) # self._button_shift.add_value_listener(self.on_shift_button) self._button_mode_synth = self._buttons[OP1_MODE_1_BUTTON] self._button_mode_drum = self._buttons[OP1_MODE_2_BUTTON] self._button_mode_tape = self._buttons[OP1_MODE_3_BUTTON] self._button_mode_mixer = self._buttons[OP1_MODE_4_BUTTON] self._button_mode_1 = self._buttons[OP1_T1_BUTTON] self._button_mode_2 = self._buttons[OP1_T2_BUTTON] self._button_mode_3 = self._buttons[OP1_T3_BUTTON] self._button_mode_4 = self._buttons[OP1_T4_BUTTON] self._button_down = self._buttons[OP1_ARROW_DOWN_BUTTON] self._button_up = self._buttons[OP1_ARROW_UP_BUTTON] self._button_left = self._buttons[OP1_LEFT_ARROW] self._button_right = self._buttons[OP1_RIGHT_ARROW] self._button_metronome = self._buttons[OP1_METRONOME_BUTTON] self._button_scissors = self._buttons[OP1_SCISSOR_BUTTON] self._button_ss1 = self._buttons[OP1_SS1_BUTTON] self._button_ss2 = self._buttons[OP1_SS2_BUTTON] self._button_ss3 = self._buttons[OP1_SS3_BUTTON] self._button_ss4 = self._buttons[OP1_SS4_BUTTON] self._button_ss5 = self._buttons[OP1_SS5_BUTTON] self._button_ss6 = self._buttons[OP1_SS6_BUTTON] self._button_ss7 = self._buttons[OP1_SS7_BUTTON] self._button_ss8 = self._buttons[OP1_SS8_BUTTON] self._button_record = self._buttons[OP1_REC_BUTTON] self._button_play = self._buttons[OP1_PLAY_BUTTON] self._button_stop = self._buttons[OP1_STOP_BUTTON] self._button_microphone = self._buttons[OP1_MICROPHONE] self._button_com = self._buttons[OP1_COM] self._button_sequencer = self._buttons[OP1_SEQUENCER] # Encoders self._encoder_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_1, ENCODER_MODE) self._encoder_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_2, ENCODER_MODE) self._encoder_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_3, ENCODER_MODE) self._encoder_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_4, ENCODER_MODE) self._unshift_encoder_1 = ShiftEnabledControl(self._encoder_1, self._button_shift, False, self) self._unshift_encoder_2 = ShiftEnabledControl(self._encoder_2, self._button_shift, False, self) self._unshift_encoder_3 = ShiftEnabledControl(self._encoder_3, self._button_shift, False, self) self._unshift_encoder_4 = ShiftEnabledControl(self._encoder_4, self._button_shift, False, self) self._shift_encoder_1 = ShiftEnabledControl(self._encoder_1, self._button_shift, True, self) self._shift_encoder_2 = ShiftEnabledControl(self._encoder_2, self._button_shift, True, self) self._shift_encoder_3 = ShiftEnabledControl(self._encoder_3, self._button_shift, True, self) self._shift_encoder_4 = ShiftEnabledControl(self._encoder_4, self._button_shift, True, self) self._encoder_u01_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_1, ENCODER_MODE) self._encoder_u01_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_2, ENCODER_MODE) self._encoder_u01_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_3, ENCODER_MODE) self._encoder_u01_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U01_ENCODER_4, ENCODER_MODE) self._unshift_encoder_u01_1 = ShiftEnabledControl( self._encoder_u01_1, self._button_shift, False, self) self._unshift_encoder_u01_2 = ShiftEnabledControl( self._encoder_u01_2, self._button_shift, False, self) self._unshift_encoder_u01_3 = ShiftEnabledControl( self._encoder_u01_3, self._button_shift, False, self) self._unshift_encoder_u01_4 = ShiftEnabledControl( self._encoder_u01_4, self._button_shift, False, self) self._shift_encoder_u01_1 = ShiftEnabledControl( self._encoder_u01_1, self._button_shift, True, self) self._shift_encoder_u01_2 = ShiftEnabledControl( self._encoder_u01_2, self._button_shift, True, self) self._shift_encoder_u01_3 = ShiftEnabledControl( self._encoder_u01_3, self._button_shift, True, self) self._shift_encoder_u01_4 = ShiftEnabledControl( self._encoder_u01_4, self._button_shift, True, self) self._encoder_u02_1 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_1, ENCODER_MODE) self._encoder_u02_2 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_2, ENCODER_MODE) self._encoder_u02_3 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_3, ENCODER_MODE) self._encoder_u02_4 = EncoderElement(MIDI_CC_TYPE, CHANNEL, OP1_U02_ENCODER_4, ENCODER_MODE) # NOTE: encoder_1_button conflicts with encoder_U03_4 self._encoder_button_1 = self._buttons[OP1_ENCODER_1_BUTTON] self._encoder_button_2 = self._buttons[OP1_ENCODER_2_BUTTON] self._encoder_button_3 = self._buttons[OP1_ENCODER_3_BUTTON] self._encoder_button_4 = self._buttons[OP1_ENCODER_4_BUTTON] self._mixer = MixerComponent( num_tracks=NUM_TRACKS, num_returns=2, ) # self._mixer.set_select_buttons( # prev_button=self._button_up, # next_button=self._button_down, # ) # self.map_mixer_controls_for_current_track() def on_down_button(value): if value == BUTTON_ON: self.set_selected_scene(self.scene_offset + 1) def on_up_button(value): if value == BUTTON_ON: self.set_selected_scene(self.scene_offset - 1) self.scene_offset = 0 self.song().view.add_selected_scene_listener( self.selected_scene_changed) self._button_right.add_value_listener(on_down_button) self._button_left.add_value_listener(on_up_button) self._transport = TransportComponent() self._transport.set_metronome_button(self._button_metronome) # # Controls for navigating the bottom detail pane # self._device_navigation = DetailViewCntrlComponent() # Toggle hide/show of bottom detail pane self._device_navigation.set_detail_toggle_button(self._button_ss1) # Toggle between clip detail and effects detail in bottom detail pane self._device_navigation.set_device_clip_toggle_button(self._button_ss2) # Nav left/right in the device chain detail view in bottom pane self._device_navigation.device_nav_left_button.set_control_element( self._button_ss7) self._device_navigation.device_nav_right_button.set_control_element( self._button_ss8) # Clip firing self._notes[OP1_F3_NOTE].add_value_listener(partial( self.clip_fired, 0)) self._notes[OP1_G3_NOTE].add_value_listener(partial( self.clip_fired, 1)) self._notes[OP1_A3_NOTE].add_value_listener(partial( self.clip_fired, 2)) self._notes[OP1_B3_NOTE].add_value_listener(partial( self.clip_fired, 3)) self._notes[OP1_C4_NOTE].add_value_listener(partial( self.clip_fired, 4)) self._notes[OP1_D4_NOTE].add_value_listener(partial( self.clip_fired, 5)) self._notes[OP1_E4_NOTE].add_value_listener(partial( self.clip_fired, 6)) self._notes[OP1_F4_NOTE].add_value_listener(partial( self.clip_fired, 7)) self._button_scissors.add_value_listener(self.selected_clip_deleted)
def _setup_components(self): # Session self._session = SessionComponent(8, len(self._scene_launch_buttons)) self._session.name = 'Session_Control' self._session.selected_scene().name = 'Selected_Scene' self._session.selected_scene().set_launch_button( self._scene_launch_button) self._session.set_stop_all_clips_button(self._scene_stop_button) for index in range(8): clip_slot = self._session.selected_scene().clip_slot(index) clip_slot.set_launch_button(self._clip_launch_buttons[index]) clip_slot.name = 'Selected_Clip_Slot_' + str(index) self._session.set_stop_track_clip_buttons( tuple(self._clip_stop_buttons)) # Undo self._do_undo.subject = self._clip_undo_button # Transport transport = TransportComponent() transport.name = 'Transport' transport.set_stop_button(self._stop_button) transport.set_play_button(self._play_button) transport.set_record_button(self._rec_button) transport.set_loop_button(self._loop_button) self._transport_view_modes = TransportViewModeSelector( transport, self._session, self._ffwd_button, self._rwd_button) self._transport_view_modes.name = 'Transport_View_Modes' session_recording = SessionRecordingComponent( ClipCreator(), ViewControlComponent(), name='Session_Recording', is_enabled=False, layer=Layer(record_button=self._overdub_button)) # Device # device = DeviceComponent() # device.name = 'Device_Component' # self.set_device_component(device) # device.set_parameter_controls(self._encoders) # Navigation self._session_navigation = SessionNavigationComponent( name='Session_Navigation') self._session_navigation.set_next_track_button(self._next_track_button) self._session_navigation.set_prev_track_button(self._prev_track_button) # Playing # self._session.set_scene_launch_buttons(tuple(self._scene_launch_buttons)) for index in range(len(self._scene_launch_buttons)): scene = self._session.scene(index) scene.set_launch_button(self._scene_launch_buttons[index])
def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) transport = TransportComponent() #Instantiate a Transport Component transport.set_play_button(ButtonElement(True, 0, 0, 61)) #ButtonElement(is_momentary, msg_type, channel, identifier) transport.set_stop_button(ButtonElement(True, 0, 0, 63)) transport.set_record_button(ButtonElement(True, 0, 0, 66))
def _init_transport_component(self, transport_controls, global_channel, macro_map_mode): is_momentary = True if transport_controls: transport = TransportComponent() transport.name = 'Transport' #THIS IS NEW STUFF #if 'TEMPO' in transport_control.keys() and transport_controls['TEMPO'] in range(128): tempo_slider = EncoderElement(MIDI_CC_TYPE, global_channel, 1, macro_map_mode) tempo_slider.name = 'Tempo_Slider' transport.set_tempo_control(tempo_slider) #END NEW STUFF if 'STOP' in transport_controls.keys( ) and transport_controls['STOP'] in range(128): stop_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, transport_controls['STOP']) stop_button.name = 'Stop_Button' transport.set_stop_button(stop_button) if 'PLAY' in transport_controls.keys( ) and transport_controls['PLAY'] in range(128): play_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, transport_controls['PLAY']) play_button.name = 'Play_Button' transport.set_play_button(play_button) if 'REC' in transport_controls.keys( ) and transport_controls['REC'] in range(128): rec_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, transport_controls['REC']) rec_button.name = 'Record_Button' transport.set_record_button(rec_button) if 'LOOP' in transport_controls.keys( ) and transport_controls['LOOP'] in range(128): loop_button = ButtonElement(is_momentary, MIDI_CC_TYPE, global_channel, transport_controls['LOOP']) loop_button.name = 'Loop_Button' transport.set_loop_button(loop_button) ffwd_button = None rwd_button = None momentary_seek = 'NORELEASE' not in transport_controls.keys() if 'FFWD' in transport_controls.keys( ) and transport_controls['FFWD'] in range(128): ffwd_button = ButtonElement(momentary_seek, MIDI_CC_TYPE, global_channel, transport_controls['FFWD']) ffwd_button.name = 'FFwd_Button' if 'RWD' in transport_controls.keys( ) and transport_controls['RWD'] in range(128): rwd_button = ButtonElement(momentary_seek, MIDI_CC_TYPE, global_channel, transport_controls['RWD']) rwd_button.name = 'Rwd_Button' transport.set_seek_buttons(ffwd_button, rwd_button)
def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): self.c_instance = c_instance self.retries_count = 0 self.device_connected = False self.clip_color_callbacks = {} self.slot_callbacks = {} self.text_start_sequence = (0xf0, 0x0, 0x20, 0x76, 0x00, 0x03) self.text_end_sequence = (0xf7, ) self.enable_sequence = (0xf0, 0x00, 0x20, 0x76, 0x00, 0x01, 0x02, 0xf7) self.disable_sequence = (0xf0, 0x00, 0x20, 0x76, 0x00, 0x01, 0x00, 0xf7) self.id_sequence = (0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7) self.text_color_start_sequence = (0xf0, 0x0, 0x20, 0x76, 0x00, 0x04) # self.log('INITIALIZING') self.app = Live.Application.get_application() #maj = self.app.get_major_version() #min = self.app.get_minor_version() #bug = self.app.get_bugfix_version() #self.show_message(str(maj) + "." + str(min) + "." + str(bug)) self.show_message("Version: " + VERSION) # reseting text self.write_text(' ') # reset display clips self.reset_display_clips() # getting browser visible state self.session_browser_visible = self.app.view.is_view_visible( "Browser") # getting browser visible state self.arrange_browser_visible = self.app.view.is_view_visible( "Browser") # getting session view visible state self.session_visible = self.app.view.is_view_visible("Session") # getting arrange view visible state self.arrange_visible = self.app.view.is_view_visible("Arranger") # getting detail view visible state self.detail_visible = self.app.view.is_view_visible("Detail") # getting back to arranger state self.back_to_arranger_state = self.song().back_to_arranger # initializing channel strip to null self._channel_strip = None # initializing mixer component self._mixer = MixerComponent(NUM_TRACKS, 2) # initializing session component self._session = SessionComponent(NUM_TRACKS, NUM_ROWS) self._session.add_offset_listener(self.session_offset_changed) self.set_highlighting_session_component(self._session) self._suppress_session_highlight = False # initializing transport component self._transport = TransportComponent() # configuring operation mode selector buttons self._operation_mode_buttons = ButtonElement( True, MIDI_CC_TYPE, CHANNEL, OP1_MODE_1_BUTTON), ButtonElement( True, MIDI_CC_TYPE, CHANNEL, OP1_MODE_2_BUTTON), ButtonElement( True, MIDI_CC_TYPE, CHANNEL, OP1_MODE_3_BUTTON), ButtonElement( True, MIDI_CC_TYPE, CHANNEL, OP1_MODE_4_BUTTON), # initializing operation mode selector self._operation_mode_selector = OP1ModeSelectorComponent( self, self._transport, self._mixer, self._session) # setting operation mode selector buttons self._operation_mode_selector.set_mode_buttons( self._operation_mode_buttons) # adding value listener for operation mode index self._operation_mode_selector.add_mode_index_listener( self.mode_index_changed) # setting global transport assignments self._transport.set_record_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_REC_BUTTON)) self._transport.set_stop_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_STOP_BUTTON)) self._transport.set_metronome_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_METRONOME_BUTTON)) self._transport.set_tap_tempo_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_HELP_BUTTON)) # self._transport.set_punch_buttons(ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_SS1_BUTTON), ButtonElement(True,MIDI_CC_TYPE, CHANNEL, OP1_SS2_BUTTON)) self._transport.set_loop_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_SS3_BUTTON)) self._transport.set_overdub_button( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_SS4_BUTTON)) self._play_button = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_PLAY_BUTTON) # self._transport.set_play_button(self._play_button) self.shift_pressed = False self._play_button.add_value_listener(self.play_button_callback) # setting global session assignments self._session.set_scene_bank_buttons( ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_COM), ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_MICRO)) # encoder for transport control - leave it empty for now self._encoder_1 = EncoderElement( MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_1, Live.MidiMap.MapMode.relative_two_compliment) self._encoder_2 = EncoderElement( MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_2, Live.MidiMap.MapMode.relative_two_compliment) self._encoder_3 = EncoderElement( MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_3, Live.MidiMap.MapMode.relative_two_compliment) self._encoder_4 = EncoderElement( MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_4, Live.MidiMap.MapMode.relative_two_compliment) # setting misc listeners self._encoder_1_push = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_1_PUSH) self._encoder_2_push = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_2_PUSH) self._encoder_3_push = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_3_PUSH) self._encoder_4_push = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_ENCODER_4_PUSH) self._encoder_3_push.add_value_listener(self.e3_push_callback) self._e3_pressed = False self.mainview_toggle_button = ButtonElement( False, MIDI_CC_TYPE, CHANNEL, OP1_ARROW_DOWN_BUTTON) self.mainview_toggle_button.add_value_listener( self.mainview_toggle_button_callback) self.detailview_toggle_button = ButtonElement( False, MIDI_CC_TYPE, CHANNEL, OP1_SCISSOR_BUTTON) self.detailview_toggle_button.add_value_listener( self.detailview_toggle_button_callback) self.clear_track_button = ButtonElement(True, MIDI_CC_TYPE, CHANNEL, OP1_SS8_BUTTON) self.clear_track_button.add_value_listener( self.clear_track_button_callback) self.back_to_arranger_button = ButtonElement( True, MIDI_CC_TYPE, CHANNEL, OP1_SEQ_BUTTON) self.back_to_arranger_button.add_value_listener( self.back_to_arranger_button_callback) # adding value listener for selected track change self.song().view.add_selected_track_listener( self.selected_track_changed) # adding value listener for selected scene change self.song().view.add_selected_scene_listener( self.selected_scene_changed) # setting assignments for currently selected track self.selected_track_changed() # setting assignments for currently selected scene self.selected_scene_changed()
def __init__(self, *a, **k): super(MPK261MX, self).__init__(*a, **k) self.show_message( "-----------------------= MPK261MX LOADING - maxcloutier13 says hi =----------------------------------------------------------" ) self.log_message( "-----------------------= MPK261MX LOADING - maxcloutier13 says hi =----------------------------------------------------------" ) with self.component_guard(): midimap = MidiMap() #Super crude manual init for the custom buttons and faders #Bank A - Channel 1 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder0 = EncoderElement( MIDI_CC_TYPE, 1, 22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder0') self._Encoder1 = EncoderElement( MIDI_CC_TYPE, 1, 23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder1') self._Encoder2 = EncoderElement( MIDI_CC_TYPE, 1, 24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder2') self._Encoder3 = EncoderElement( MIDI_CC_TYPE, 1, 25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder3') self._Encoder4 = EncoderElement( MIDI_CC_TYPE, 1, 26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder4') self._Encoder5 = EncoderElement( MIDI_CC_TYPE, 1, 27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder5') self._Encoder6 = EncoderElement( MIDI_CC_TYPE, 1, 28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder6') self._Encoder7 = EncoderElement( MIDI_CC_TYPE, 1, 29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder7') self._ArmButton0 = ButtonElement(False, MIDI_CC_TYPE, 0, 32, name='ArmButton0') self._ArmButton1 = ButtonElement(False, MIDI_CC_TYPE, 0, 33, name='ArmButton1') self._ArmButton2 = ButtonElement(False, MIDI_CC_TYPE, 0, 34, name='ArmButton2') self._ArmButton3 = ButtonElement(False, MIDI_CC_TYPE, 0, 35, name='ArmButton3') self._ArmButton4 = ButtonElement(False, MIDI_CC_TYPE, 0, 36, name='ArmButton4') self._ArmButton5 = ButtonElement(False, MIDI_CC_TYPE, 0, 37, name='ArmButton5') self._ArmButton6 = ButtonElement(False, MIDI_CC_TYPE, 0, 38, name='ArmButton6') self._ArmButton7 = ButtonElement(False, MIDI_CC_TYPE, 0, 39, name='ArmButton7') self._VolumeSlider0 = SliderElement(MIDI_CC_TYPE, 0, 12, name='VolumeSlider0') self._VolumeSlider1 = SliderElement(MIDI_CC_TYPE, 0, 13, name='VolumeSlider1') self._VolumeSlider2 = SliderElement(MIDI_CC_TYPE, 0, 14, name='VolumeSlider2') self._VolumeSlider3 = SliderElement(MIDI_CC_TYPE, 0, 15, name='VolumeSlider3') self._VolumeSlider4 = SliderElement(MIDI_CC_TYPE, 0, 16, name='VolumeSlider4') self._VolumeSlider5 = SliderElement(MIDI_CC_TYPE, 0, 17, name='VolumeSlider5') self._VolumeSlider6 = SliderElement(MIDI_CC_TYPE, 0, 18, name='VolumeSlider6') self._VolumeSlider7 = SliderElement(MIDI_CC_TYPE, 0, 19, name='VolumeSlider7') #Bank B - Channel 2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder8 = EncoderElement( MIDI_CC_TYPE, 2, 22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder8') self._Encoder9 = EncoderElement( MIDI_CC_TYPE, 2, 23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder9') self._Encoder10 = EncoderElement( MIDI_CC_TYPE, 2, 24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder10') self._Encoder11 = EncoderElement( MIDI_CC_TYPE, 2, 25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder11') self._Encoder12 = EncoderElement( MIDI_CC_TYPE, 2, 26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder12') self._Encoder13 = EncoderElement( MIDI_CC_TYPE, 2, 27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder13') self._Encoder14 = EncoderElement( MIDI_CC_TYPE, 2, 28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder14') self._Encoder15 = EncoderElement( MIDI_CC_TYPE, 2, 29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder15') self._ArmButton8 = ButtonElement(False, MIDI_CC_TYPE, 1, 32, name='ArmButton8') self._ArmButton9 = ButtonElement(False, MIDI_CC_TYPE, 1, 33, name='ArmButton9') self._ArmButton10 = ButtonElement(False, MIDI_CC_TYPE, 1, 34, name='ArmButton10') self._ArmButton11 = ButtonElement(False, MIDI_CC_TYPE, 1, 35, name='ArmButton11') self._ArmButton12 = ButtonElement(False, MIDI_CC_TYPE, 1, 36, name='ArmButton12') self._ArmButton13 = ButtonElement(False, MIDI_CC_TYPE, 1, 37, name='ArmButton13') self._ArmButton14 = ButtonElement(False, MIDI_CC_TYPE, 1, 38, name='ArmButton14') self._ArmButton15 = ButtonElement(False, MIDI_CC_TYPE, 1, 39, name='ArmButton15') self._VolumeSlider8 = SliderElement(MIDI_CC_TYPE, 1, 12, name='VolumeSlider8') self._VolumeSlider9 = SliderElement(MIDI_CC_TYPE, 1, 13, name='VolumeSlider9') self._VolumeSlider10 = SliderElement(MIDI_CC_TYPE, 1, 14, name='VolumeSlider10') self._VolumeSlider11 = SliderElement(MIDI_CC_TYPE, 1, 15, name='VolumeSlider11') self._VolumeSlider12 = SliderElement(MIDI_CC_TYPE, 1, 16, name='VolumeSlider12') self._VolumeSlider13 = SliderElement(MIDI_CC_TYPE, 1, 17, name='VolumeSlider13') self._VolumeSlider14 = SliderElement(MIDI_CC_TYPE, 1, 18, name='VolumeSlider14') self._VolumeSlider15 = SliderElement(MIDI_CC_TYPE, 1, 19, name='VolumeSlider15') #Bank C - Channel 3 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._Encoder16 = EncoderElement( MIDI_CC_TYPE, 3, 22, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder16') self._Encoder17 = EncoderElement( MIDI_CC_TYPE, 3, 23, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder17') self._Encoder18 = EncoderElement( MIDI_CC_TYPE, 3, 24, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder18') self._Encoder19 = EncoderElement( MIDI_CC_TYPE, 3, 25, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder19') self._Encoder20 = EncoderElement( MIDI_CC_TYPE, 3, 26, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder20') self._Encoder21 = EncoderElement( MIDI_CC_TYPE, 3, 27, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder21') self._Encoder22 = EncoderElement( MIDI_CC_TYPE, 3, 28, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder22') self._Encoder23 = EncoderElement( MIDI_CC_TYPE, 3, 29, Live.MidiMap.MapMode.relative_two_compliment, name='Encoder23') self._ArmButton16 = ButtonElement(False, MIDI_CC_TYPE, 2, 32, name='ArmButton16') self._ArmButton17 = ButtonElement(False, MIDI_CC_TYPE, 2, 33, name='ArmButton17') self._ArmButton18 = ButtonElement(False, MIDI_CC_TYPE, 2, 34, name='ArmButton18') self._ArmButton19 = ButtonElement(False, MIDI_CC_TYPE, 2, 35, name='ArmButton19') self._ArmButton20 = ButtonElement(False, MIDI_CC_TYPE, 2, 36, name='ArmButton20') self._ArmButton21 = ButtonElement(False, MIDI_CC_TYPE, 2, 37, name='ArmButton21') self._ArmButton22 = ButtonElement(False, MIDI_CC_TYPE, 2, 38, name='ArmButton22') self._ArmButton23 = ButtonElement(False, MIDI_CC_TYPE, 2, 39, name='ArmButton23') self._VolumeSlider16 = SliderElement(MIDI_CC_TYPE, 2, 12, name='VolumeSlider16') self._VolumeSlider17 = SliderElement(MIDI_CC_TYPE, 2, 13, name='VolumeSlider17') self._VolumeSlider18 = SliderElement(MIDI_CC_TYPE, 2, 14, name='VolumeSlider18') self._VolumeSlider19 = SliderElement(MIDI_CC_TYPE, 2, 15, name='VolumeSlider19') self._VolumeSlider20 = SliderElement(MIDI_CC_TYPE, 2, 16, name='VolumeSlider20') self._VolumeSlider21 = SliderElement(MIDI_CC_TYPE, 2, 17, name='VolumeSlider21') self._VolumeSlider22 = SliderElement(MIDI_CC_TYPE, 2, 18, name='VolumeSlider22') self._VolumeSlider23 = SliderElement(MIDI_CC_TYPE, 2, 19, name='VolumeSlider23') #Drum rack ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- drum_rack = DrumRackComponent( name='Drum_Rack', is_enabled=False, layer=Layer(pads=midimap['Drum_Pads'])) drum_rack.set_enabled(True) #Transport ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- transport = TransportComponent(name='Transport', is_enabled=False, layer=Layer( play_button=midimap['Play'], record_button=midimap['Record'], stop_button=midimap['Stop'], loop_button=midimap['Loop'])) #, seek_forward_button=midimap['Forward'], seek_backward_button=midimap['Backward'] transport.set_enabled(True) #Make the Back/Fwd button just normal mapable CC senders self._BackButton = ButtonElement(False, MIDI_CC_TYPE, 0, 116, name='BackButton') self._FwdButton = ButtonElement(False, MIDI_CC_TYPE, 0, 115, name='FwdButton') #Device ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- self._device = DeviceComponent( name='Device', is_enabled=False, layer=Layer(parameter_controls=midimap['Encoders']), device_selection_follows_track_selection=True) self._device.set_enabled(True) self.set_device_component(self._device) #Mixer ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mixer_size = 24 self._mixer = MixerComponent(mixer_size, name='Mixer', is_enabled=False) #Super crude and repetitive mapping because after all this shit I'm not spending time learning how to loop this crap hehe #Bank A self._mixer.channel_strip(0).layer = Layer( volume_control=self._VolumeSlider0, arm_button=self._ArmButton0, pan_control=self._Encoder0) self._mixer.channel_strip(1).layer = Layer( volume_control=self._VolumeSlider1, arm_button=self._ArmButton1, pan_control=self._Encoder1) self._mixer.channel_strip(2).layer = Layer( volume_control=self._VolumeSlider2, arm_button=self._ArmButton2, pan_control=self._Encoder2) self._mixer.channel_strip(3).layer = Layer( volume_control=self._VolumeSlider3, arm_button=self._ArmButton3, pan_control=self._Encoder3) self._mixer.channel_strip(4).layer = Layer( volume_control=self._VolumeSlider4, arm_button=self._ArmButton4, pan_control=self._Encoder4) self._mixer.channel_strip(5).layer = Layer( volume_control=self._VolumeSlider5, arm_button=self._ArmButton5, pan_control=self._Encoder5) self._mixer.channel_strip(6).layer = Layer( volume_control=self._VolumeSlider6, arm_button=self._ArmButton6, pan_control=self._Encoder6) self._mixer.channel_strip(7).layer = Layer( volume_control=self._VolumeSlider7, arm_button=self._ArmButton7, pan_control=self._Encoder7) #Bank B self._mixer.channel_strip(8).layer = Layer( volume_control=self._VolumeSlider8, arm_button=self._ArmButton8, pan_control=self._Encoder8) self._mixer.channel_strip(9).layer = Layer( volume_control=self._VolumeSlider9, arm_button=self._ArmButton9, pan_control=self._Encoder9) self._mixer.channel_strip(10).layer = Layer( volume_control=self._VolumeSlider10, arm_button=self._ArmButton10, pan_control=self._Encoder10) self._mixer.channel_strip(11).layer = Layer( volume_control=self._VolumeSlider11, arm_button=self._ArmButton11, pan_control=self._Encoder11) self._mixer.channel_strip(12).layer = Layer( volume_control=self._VolumeSlider12, arm_button=self._ArmButton12, pan_control=self._Encoder12) self._mixer.channel_strip(13).layer = Layer( volume_control=self._VolumeSlider13, arm_button=self._ArmButton13, pan_control=self._Encoder13) self._mixer.channel_strip(14).layer = Layer( volume_control=self._VolumeSlider14, arm_button=self._ArmButton14, pan_control=self._Encoder14) self._mixer.channel_strip(15).layer = Layer( volume_control=self._VolumeSlider15, arm_button=self._ArmButton15, pan_control=self._Encoder15) #Bank C self._mixer.channel_strip(16).layer = Layer( volume_control=self._VolumeSlider16, arm_button=self._ArmButton16, pan_control=self._Encoder16) self._mixer.channel_strip(17).layer = Layer( volume_control=self._VolumeSlider17, arm_button=self._ArmButton17, pan_control=self._Encoder17) self._mixer.channel_strip(18).layer = Layer( volume_control=self._VolumeSlider18, arm_button=self._ArmButton18, pan_control=self._Encoder18) self._mixer.channel_strip(19).layer = Layer( volume_control=self._VolumeSlider19, arm_button=self._ArmButton19, pan_control=self._Encoder19) self._mixer.channel_strip(20).layer = Layer( volume_control=self._VolumeSlider20, arm_button=self._ArmButton20, pan_control=self._Encoder20) self._mixer.channel_strip(21).layer = Layer( volume_control=self._VolumeSlider21, arm_button=self._ArmButton21, pan_control=self._Encoder21) self._mixer.channel_strip(22).layer = Layer( volume_control=self._VolumeSlider22, arm_button=self._ArmButton22, pan_control=self._Encoder22) self._mixer.channel_strip(23).layer = Layer( volume_control=self._VolumeSlider23, arm_button=self._ArmButton23, pan_control=self._Encoder23) self._mixer.set_enabled(True) #-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
def _mode1(self): self.show_message("_mode1 is active") # mixer global mixer num_tracks = 32 num_returns = 7 self.mixer = MixerComponent(num_tracks, num_returns) self.mixer.set_track_offset(0) self.song().view.selected_track = self.mixer.channel_strip(0)._track # sends send0_controls = ( SliderElement(MIDI_CC_TYPE, 0, 32), SliderElement(MIDI_CC_TYPE, 0, 36), SliderElement(MIDI_CC_TYPE, 0, 40), None, None, None, None, None, ) self.mixer.channel_strip(0).set_send_controls(tuple(send0_controls)) self.mixer.channel_strip(0).set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 44)) send1_controls = ( SliderElement(MIDI_CC_TYPE, 0, 33), SliderElement(MIDI_CC_TYPE, 0, 37), SliderElement(MIDI_CC_TYPE, 0, 41), None, None, None, None, None, ) self.mixer.channel_strip(1).set_send_controls(tuple(send1_controls)) self.mixer.channel_strip(1).set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 45)) send2_controls = ( SliderElement(MIDI_CC_TYPE, 0, 34), SliderElement(MIDI_CC_TYPE, 0, 38), SliderElement(MIDI_CC_TYPE, 0, 42), None, None, None, None, None, ) self.mixer.channel_strip(2).set_send_controls(tuple(send2_controls)) self.mixer.channel_strip(2).set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 46)) send3_controls = ( SliderElement(MIDI_CC_TYPE, 0, 35), SliderElement(MIDI_CC_TYPE, 0, 39), SliderElement(MIDI_CC_TYPE, 0, 43), None, None, None, None, None, ) self.mixer.channel_strip(3).set_send_controls(tuple(send3_controls)) self.mixer.channel_strip(3).set_volume_control( SliderElement(MIDI_CC_TYPE, 0, 47)) # session global _session num_tracks = 4 num_scenes = 3 session_buttons = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] self._pads = [ ButtonElement(1, MIDI_CC_TYPE, 1, session_buttons[index]) for index in range(num_tracks * num_scenes) ] self._grid = ButtonMatrixElement(rows=[ self._pads[(index * num_tracks):(index * num_tracks) + num_tracks] for index in range(num_scenes) ]) self._session = SessionComponent(num_tracks, num_scenes) self._session.set_clip_launch_buttons(self._grid) self.set_highlighting_session_component(self._session) # session track stop stop_track_buttons = [12, 13, 14, 15] self._track_stop_buttons = [ ButtonElement(1, MIDI_CC_TYPE, 1, stop_track_buttons[index]) for index in range(num_tracks) ] self._session.set_stop_track_clip_buttons( tuple(self._track_stop_buttons)) # session navigation self.session_left = ButtonElement(1, MIDI_CC_TYPE, 3, 8) self._session.set_page_left_button(self.session_left) self.session_left.add_value_listener(self._reload_active_devices, identify_sender=False) self.session_right = ButtonElement(1, MIDI_CC_TYPE, 3, 11) self._session.set_page_right_button(self.session_right) self.session_right.add_value_listener(self._reload_active_devices, identify_sender=False) self.session_up = ButtonElement(1, MIDI_CC_TYPE, 3, 10) self._session.set_page_up_button(self.session_up) self.session_up.add_value_listener(self._reload_active_devices, identify_sender=False) self.session_down = ButtonElement(1, MIDI_CC_TYPE, 3, 13) self._session.set_page_down_button(self.session_down) self.session_down.add_value_listener(self._reload_active_devices, identify_sender=False) self._session._link() self._session.set_mixer(self.mixer) #self._session.set_mixer(self.mixer) self._mode1_devices() self.add_device_listeners() # button: next device self.next_device = ButtonElement(0, MIDI_CC_TYPE, 1, 25) self.next_device.add_value_listener(self._next_device_value, identify_sender=False) # button: prev device self.previous_device = ButtonElement(1, MIDI_CC_TYPE, 1, 24) self.previous_device.add_value_listener(self._prev_device_value, identify_sender=False) # transport global transport self.transport = TransportComponent() self.transport.name = 'Transport' loop_button = ButtonElement(1, MIDI_CC_TYPE, 1, 50) loop_button.name = 'loop_button' self.transport.set_loop_button(loop_button) stop_button = ButtonElement(1, MIDI_CC_TYPE, 1, 49) stop_button.name = 'stop_button' self.transport.set_stop_button(stop_button) play_button = ButtonElement(1, MIDI_CC_TYPE, 1, 48) play_button.name = 'play_button' self.transport.set_play_button(play_button) # button: track navigation right self.track_navigation_right = ButtonElement(1, MIDI_CC_TYPE, 3, 17) self.track_navigation_right.add_value_listener( self._track_navigation_right_track_nav, identify_sender=False) # button: track navigation left self.track_navigation_left = ButtonElement(1, MIDI_CC_TYPE, 3, 14) self.track_navigation_left.add_value_listener( self._track_navigation_left_track_nav, identify_sender=False)
def _setup_transport_control(self): self._transport = TransportComponent() self._transport.name = 'Transport'
def _setup_transport_control(self): self._transport_control = TransportComponent(name=b'Transport') self._transport_control.set_enabled(True)
def _setup_transport(self): is_momentary = True transport = TransportComponent() studiotransport = MaschineTransport() playButton = StateButton(is_momentary, MIDI_CC_TYPE, 0, 108) stopButton = StateButton(not is_momentary, MIDI_CC_TYPE, 0, 110) recordButton = StateButton(is_momentary, MIDI_CC_TYPE, 0, 109) overdubButton = StateButton(is_momentary, MIDI_CC_TYPE, 0, 107) metrononmeButton = StateButton(is_momentary, MIDI_CC_TYPE, 0, 104) eventRecButton = StateButton(is_momentary, MIDI_CC_TYPE, 0, 98) playButton.name = 'Play' stopButton.name = 'Stop' recordButton.name = 'Record' overdubButton.name = 'Overdub' metrononmeButton.name = 'Metronome' transport.set_play_button(playButton) transport.set_stop_button(stopButton) transport.set_record_button(recordButton) transport.set_overdub_button(overdubButton) transport.set_metronome_button(metrononmeButton) studiotransport.set_session_auto_button(eventRecButton) studiotransport.set_arrangement_overdub_button( StateButton(is_momentary, MIDI_CC_TYPE, 0, 106)) studiotransport.set_back_arrange_button( StateButton(is_momentary, MIDI_CC_TYPE, 0, 105)) transport.set_nudge_buttons( StateButton(is_momentary, MIDI_CC_TYPE, 1, 51), StateButton(is_momentary, MIDI_CC_TYPE, 1, 50)) punchinbutton = ToggleButton(MIDI_CC_TYPE, 1, 52) punchoutbutton = ToggleButton(MIDI_CC_TYPE, 1, 53) punchinbutton.name = 'Punch In' punchoutbutton.name = 'Punch Out' transport.set_punch_buttons(punchinbutton, punchoutbutton) transport.set_loop_button( StateButton(is_momentary, MIDI_CC_TYPE, 1, 54)) self.song_follow_button = ButtonElement(True, MIDI_CC_TYPE, 2, 98) self._do_song_follow.subject = self.song_follow_button self._song_follow_changed.subject = self.song().view self._song_follow_changed() self.prehear_knob = SliderElement(MIDI_CC_TYPE, 0, 41) self.prehear_knob.connect_to( self.song().master_track.mixer_device.cue_volume) self.transp_ff_button = ButtonElement(True, MIDI_CC_TYPE, 1, 59) self.transp_rw_button = ButtonElement(True, MIDI_CC_TYPE, 1, 58) transport.set_seek_buttons(self.transp_ff_button, self.transp_rw_button) self.xfadeKnob = SliderElement(MIDI_CC_TYPE, 1, 105) self.xfadeKnob.connect_to( self.song().master_track.mixer_device.crossfader) self.master_knob = SliderElement(MIDI_CC_TYPE, 0, 99) self.master_knob.connect_to( self.song().master_track.mixer_device.volume) self.tap_button = StateButton(is_momentary, MIDI_CC_TYPE, 0, 88) self._do_tap_tempo.subject = self.tap_button self.cue_add_delete_button = StateButton(is_momentary, MIDI_CC_TYPE, 1, 55) self.cue_prev_button = StateButton(is_momentary, MIDI_CC_TYPE, 1, 56) self.cue_next_button = StateButton(is_momentary, MIDI_CC_TYPE, 1, 57) self._do_toggle_cue.subject = self.cue_add_delete_button self._do_toggle_prev_cue.subject = self.cue_prev_button self._do_toggle_next_cue.subject = self.cue_next_button
def _create_transport(self): self._transport = TransportComponent(name='Transport', is_enabled=False, layer=Layer(stop_button=self._stop_button, play_button=self._play_button)) self._transport.set_enabled(True)
def _create_transport(self): self._transport = TransportComponent(name='Transport')
def __init__(self, *a, **k): #super(Axiom_OJI, self).__init__(*a, **k) ControlSurface.__init__(self, *a, **k) with self.component_guard(): is_momentary = True #self.set_pad_translations(PAD_TRANSLATIONS) self._suggested_input_port = u'HyperControl' self._suggested_output_port = u'HyperControl' self._display_on_button = ButtonElement(not is_momentary, MIDI_CC_TYPE, 15, 79) self._waiting_for_first_response = True self._mixer1 = DisplayingMixerComponent(0) self._mixer1.set_select_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 111), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 110)) self._mixer1.set_mute_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 12)) self._mixer1.set_solo_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 13)) self._mixer2 = NotifyingMixerComponent(8) self._mixer2.set_bank_buttons( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 15), ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 14)) self._mixer2.master_strip().set_volume_control( SliderElement(MIDI_CC_TYPE, 15, 41)) for index in range(8): self._mixer2.channel_strip(index).set_volume_control( SliderElement(MIDI_CC_TYPE, 15, 33 + index)) self._device = PageableDeviceComponent( device_selection_follows_track_selection=True) self.set_device_component(self._device) self._ffwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 115) self._rwd_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 114) self._loop_button = ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 113) self._transport = TransportComponent() self._transport.set_stop_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 116)) self._transport.set_play_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 117)) self._transport.set_record_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 118, name='RecordButton')) self._session = SessionComponent(0, 0) self._transport_view_modes = TransportViewModeSelector( self._transport, self._session, self._ffwd_button, self._rwd_button, self._loop_button) self._select_button_modes = SelectButtonModeSelector( self._mixer2, tuple([ ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 49 + offset) for offset in range(8) ])) self._select_button_modes.set_mode_toggle( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 57)) self._mixer_encoder_modes = EncoderMixerModeSelector(self._mixer2) self._encoders = [] for offset in range(8): self._encoders.append( PeekableEncoderElement( MIDI_CC_TYPE, 15, 17 + offset, Live.MidiMap.MapMode.relative_smooth_two_compliment)) self._encoders[-1].set_feedback_delay(-1) self._mixer_or_device = MixerOrDeviceModeSelector( self._mixer_encoder_modes, self._device, tuple(self._encoders), tuple([ ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 74 + offset) for offset in range(4) ])) self._mixer_or_device.set_mode_toggle( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 109)) self._mixer_or_device.set_peek_button( ButtonElement(is_momentary, MIDI_CC_TYPE, 15, 78)) self._track_display = PhysicalDisplayElement(8, 1) self._track_display.set_clear_all_message(SYSEX_START + (16, 247)) self._track_display.set_message_parts(SYSEX_START + (17, 1, 0, 0), (247, )) #self._track_display.segment(0).set_data_source(mixer1.selected_strip().track_name_data_source()) self._device_display = PhysicalDisplayElement(8, 1) self._device_display.set_message_parts( SYSEX_START + (17, 1, 0, 10), (247, )) self._parameter_display = PhysicalDisplayElement(16, 1) self._parameter_display.set_message_parts( SYSEX_START + (17, 2, 0, 0), (247, )) #self._select_button_modes.set_mode_display(parameter_display) #self._mixer1.set_display(parameter_display) #self._mixer2.set_bank_display(parameter_display) self._page_displays = [] for index in range(4): self._page_displays.append(PhysicalDisplayElement(5, 1)) self._page_displays[-1].set_message_parts( SYSEX_START + (17, 4, index, 0), (247, )) self._encoder_display = PhysicalDisplayElement(80, 8) self._encoder_display.set_message_parts(SYSEX_START + (17, 3), (247, )) for index in range(8): pos_id = tuple() if index != 0: pos_id += (0, ) if index > 3: pos_id += (index % 4, 13) else: pos_id += (index % 4, 0) self._encoder_display.segment(index).set_position_identifier( pos_id) self._data_sources = [ DisplayDataSource(' ') for index in range(7) ] top_display = PhysicalDisplayElement(20, 1) top_display.set_message_parts(SYSEX_START + (17, 1, 0, 0), (247, )) top_display.set_clear_all_message(SYSEX_START + (16, 247)) self._header_display = top_display self._display1 = top_display.segment(0) long_display = PhysicalDisplayElement(80, 4) long_display.set_message_parts(SYSEX_START + ( 17, 3, ), (247, )) self._display2 = long_display.segment(0) pos_id = tuple() pos_id += (0, 0) self._display2.set_position_identifier(pos_id) self._display3 = long_display.segment(1) pos_id = tuple() pos_id += (0, 1, 0) self._display3.set_position_identifier(pos_id) self._display4 = long_display.segment(2) pos_id = tuple() pos_id += (0, 2, 0) self._display4.set_position_identifier(pos_id) self._display5 = long_display.segment(3) pos_id = tuple() pos_id += (0, 3, 0) self._display5.set_position_identifier(pos_id) middle_display = PhysicalDisplayElement(20, 1) middle_display.set_message_parts(SYSEX_START + (17, 2, 0, 0), (247, )) self._display6 = middle_display.segment(0) bottom_display = PhysicalDisplayElement(20, 1) bottom_display.set_message_parts(SYSEX_START + (17, 4, 0, 0), (247, )) self._display7 = bottom_display.segment(0) self._browser_displays = [ self._display1, self._display2, self._display3, self._display4, self._display5, self._display6, self._display7 ] self._drumpads = [ ButtonElement(True, MIDI_NOTE_TYPE, 15, 81 + index, name='Pad_' + str(index)) for index in range(8) ] self._setup_m4l_interface() self.log_message('Axiom_OJI script installed')
def _create_transport(self): transport = TransportComponent(play_toggle_model_transform=lambda v: v) transport.layer = Layer(record_button=self._modified_start_stop_button, play_button=self._start_stop_button) return transport
def _setup_transport(self): self._transport = TransportComponent(name='Transport') self._transport.set_enabled(False) self._transport.layer = Layer(play_button=self._play_button, stop_button=self._stop_button, record_button=self._record_button, overdub_button=self._shifted_record_button, loop_button=self._shifted_arm_buttons[3], tap_tempo_button=self._shifted_arm_buttons[4], metronome_button=self._shifted_arm_buttons[5], nudge_down_button=self._shifted_arm_buttons[6], nudge_up_button=self._shifted_arm_buttons[7])