├── ADVANCE ├── Advance.py └── __init__.py ├── AIRA_MX_1 ├── Colors.py ├── ControlElementUtils.py ├── NotifyingMixerComponent.py ├── NotifyingSessionComponent.py ├── README.md ├── RolandMX1.py ├── SkinDefault.py └── __init__.py ├── APC20 ├── APC20.py ├── BackgroundComponent.py ├── ShiftableSelectorComponent.py ├── ShiftableZoomingComponent.py ├── SliderModesComponent.py ├── __init__.py └── consts.py ├── APC40 ├── APC40.py ├── SessionComponent.py ├── TransportComponent.py └── __init__.py ├── APC40_MkII ├── APC40_MkII.py ├── BankToggleComponent.py ├── MixerComponent.py ├── QuantizationComponent.py ├── TransportComponent.py └── __init__.py ├── APC_Key_25 ├── APC_Key_25.py ├── MixerComponent.py ├── SendToggleComponent.py └── __init__.py ├── APC_mini ├── APC_mini.py └── __init__.py ├── Alesis_V ├── Alesis_V.py └── __init__.py ├── Alesis_VI ├── Alesis_VI.py └── __init__.py ├── Alesis_VX ├── Alesis_VX.py └── __init__.py ├── Axiom ├── __init__.py ├── config.py └── consts.py ├── AxiomPro ├── AxiomPro.py ├── DisplayingMixerComponent.py ├── EncoderMixerModeSelector.py ├── MixerOrDeviceModeSelector.py ├── NotifyingMixerComponent.py ├── PageableDeviceComponent.py ├── PeekableEncoderElement.py ├── SelectButtonModeSelector.py ├── TransportViewModeSelector.py └── __init__.py ├── Axiom_25_Classic ├── Axiom.py ├── Preset.syx └── __init__.py ├── Axiom_49_61_Classic ├── Axiom.py ├── Preset.syx ├── SliderSection.py └── __init__.py ├── Axiom_AIR_25_49_61 ├── Axiom_AIR_25_49_61.py ├── BestBankDeviceComponent.py ├── ConfigurableButtonElement.py ├── DeviceNavComponent.py ├── DisplayingChanStripComponent.py ├── EncoderModeSelector.py ├── FaderButtonModeSelector.py ├── FaderModeSelector.py ├── IdentifyingEncoderElement.py ├── MainModeSelector.py ├── NumericalDisplayElement.py ├── NumericalDisplaySegment.py ├── SingleFaderButtonModeSelector.py ├── SpecialMixerComponent.py ├── SpecialSessionComponent.py ├── TransportViewModeSelector.py ├── __init__.py └── consts.py ├── Axiom_AIR_Mini32 ├── AxiomAirMini32.py ├── DeviceNavComponent.py ├── EncoderMixerModeSelector.py ├── MixerOrDeviceModeSelector.py └── __init__.py ├── Axiom_DirectLink ├── Axiom_DirectLink.py ├── BestBankDeviceComponent.py ├── DetailViewCntrlComponent.py ├── PeekableEncoderElement.py ├── ShiftableMixerComponent.py ├── ShiftableSessionComponent.py ├── ShiftableTransportComponent.py ├── TransportViewModeSelector.py └── __init__.py ├── BCF2000 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── BCR2000 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── BeatStep ├── BeatStep.py └── __init__.py ├── CTRL49 ├── __init__.py └── ctrl49.py ├── Code_Series ├── __init__.py ├── code.py ├── element_utils.py ├── mixer_navigation.py └── skin_default.py ├── FireOne ├── FireOne.py └── __init__.py ├── KONTROL49 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── KeyFadr ├── KeyFadr.py └── __init__.py ├── KeyLab ├── DeviceNavigationComponent.py ├── DisplayElement.py ├── KeyLab.py ├── MixerComponent.py ├── SessionComponent.py └── __init__.py ├── KeyLab_88 ├── KeyLab88.py └── __init__.py ├── KeyPad ├── CombinedButtonsElement.py ├── CuePointControlComponent.py ├── KeyPad.py └── __init__.py ├── Keystation_Pro_88 ├── __init__.py ├── config.py └── consts.py ├── LPD8 ├── __init__.py ├── config.py └── consts.py ├── LV1_LX1 ├── LV1_LX1.py └── __init__.py ├── LV2_LX2_LC2_LD2 ├── Devices.py ├── DevicesXY.py ├── FaderfoxComponent.py ├── FaderfoxDeviceController.py ├── FaderfoxHelper.py ├── FaderfoxMixerController.py ├── FaderfoxScript.py ├── FaderfoxTransportController.py ├── LV2DeviceController.py ├── LV2MixerController.py ├── LV2TransportController.py ├── LV2_LX2_LC2_LD2.py ├── ParamMap.py ├── Params.py ├── __init__.py └── consts.py ├── Launch_Control ├── ButtonSysexControl.py ├── Colors.py ├── ConfigurableButtonElement.py ├── DeviceNavigationComponent.py ├── LaunchControl.py ├── SpecialMixerComponent.py ├── SpecialSessionComponent.py ├── Sysex.py └── __init__.py ├── Launch_Control_XL ├── ButtonElement.py ├── DeviceComponent.py ├── LaunchControlXL.py ├── MixerComponent.py ├── SkinDefault.py └── __init__.py ├── Launchkey ├── Launchkey.py ├── SessionNavigationComponent.py ├── SpecialMixerComponent.py ├── TransportViewModeSelector.py ├── __init__.py └── consts.py ├── Launchkey_MK2 ├── BackgroundComponent.py ├── Colors.py ├── ControlElementUtils.py ├── DeviceComponent.py ├── InControlStatusComponent.py ├── Launchkey_MK2.py ├── MixerComponent.py ├── ModeUtils.py ├── SessionComponent.py ├── Skin.py ├── __init__.py └── consts.py ├── Launchkey_Mini ├── LaunchkeyMini.py └── __init__.py ├── Launchpad ├── ConfigurableButtonElement.py ├── DefChannelStripComponent.py ├── Launchpad.py ├── MainSelectorComponent.py ├── PreciseButtonSliderElement.py ├── SpecialMixerComponent.py ├── SpecialSessionComponent.py ├── SubSelectorComponent.py └── __init__.py ├── Launchpad_MK2 ├── BackgroundComponent.py ├── ChannelStripComponent.py ├── Colors.py ├── ComponentUtils.py ├── ControlElementUtils.py ├── Launchpad_MK2.py ├── MixerComponent.py ├── ModeUtils.py ├── SessionComponent.py ├── SessionZoomingComponent.py ├── Skin.py ├── SliderElement.py ├── __init__.py └── consts.py ├── Launchpad_Pro ├── ActionsComponent.py ├── BackgroundComponent.py ├── ClipActionsComponent.py ├── Colors.py ├── ConfigurableButtonElement.py ├── DeviceNavigationComponent.py ├── DrumGroupComponent.py ├── DrumGroupFinderComponent.py ├── Launchpad_Pro.py ├── LedLightingComponent.py ├── MultiButtonElement.py ├── SkinDefault.py ├── SlideComponent.py ├── SliderElement.py ├── SpecialDeviceComponent.py ├── SpecialMidiMap.py ├── SpecialMixerComponent.py ├── SpecialModesComponent.py ├── SpecialSessionComponent.py ├── SpecialSessionRecordingComponent.py ├── TargetTrackComponent.py ├── TranslationComponent.py ├── UserMatrixComponent.py ├── __init__.py └── consts.py ├── MIDI_Mix ├── ControlElementUtils.py ├── MIDI_Mix.py ├── MixerComponent.py └── __init__.py ├── MPD18 ├── __init__.py ├── config.py └── consts.py ├── MPD218 ├── MPD218.py └── __init__.py ├── MPD226 ├── MPD226.py └── __init__.py ├── MPD232 ├── MPD232.py └── __init__.py ├── MPD24 ├── __init__.py ├── config.py └── consts.py ├── MPD32 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── MPK225 ├── MPK225.py └── __init__.py ├── MPK249 ├── MPK249.py └── __init__.py ├── MPK25 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── MPK261 ├── MPK261.py └── __init__.py ├── MPK49 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── MPK61 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── MPK88 ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── MPK_mini ├── __init__.py ├── config.py └── consts.py ├── MackieControl ├── ChannelStrip.py ├── ChannelStripController.py ├── MackieControl.py ├── MackieControlComponent.py ├── MainDisplay.py ├── MainDisplayController.py ├── SoftwareController.py ├── TimeDisplay.py ├── Transport.py ├── __init__.py └── consts.py ├── MackieControlXT ├── MackieControlXT.py └── __init__.py ├── MackieControl_Classic ├── ChannelStrip.py ├── ChannelStripController.py ├── MackieControl.py ├── MackieControlComponent.py ├── MainDisplay.py ├── MainDisplayController.py ├── SoftwareController.py ├── TimeDisplay.py ├── Transport.py ├── __init__.py └── consts.py ├── MasterControl ├── MasterControl.py └── __init__.py ├── MidAir25 ├── __init__.py ├── config.py └── consts.py ├── MiniLab ├── MiniLab.py └── __init__.py ├── Novation_Impulse ├── EncoderModeSelector.py ├── Novation_Impulse.py ├── PeekableEncoderElement.py ├── ShiftableTransportComponent.py ├── SpecialMixerComponent.py ├── TransportViewModeSelector.py └── __init__.py ├── O2 ├── __init__.py ├── config.py └── consts.py ├── OpenLabs ├── OpenLabs.py ├── SpecialDeviceComponent.py ├── SpecialTransportComponent.py └── __init__.py ├── Oxygen49_61 ├── __init__.py ├── config.py └── consts.py ├── Oxygen8 ├── __init__.py ├── config.py └── consts.py ├── Oxygen8v2 ├── __init__.py ├── config.py └── consts.py ├── Oxygen_3rd_Gen ├── Oxygen_3rd_Gen.py ├── SpecialMixerComponent.py ├── TransportViewModeSelector.py └── __init__.py ├── Oxygen_4th_Gen └── __init__.py ├── Ozone ├── __init__.py ├── config.py └── consts.py ├── Ozonic ├── __init__.py ├── config.py └── consts.py ├── Photon_25 ├── __init__.py ├── config.py └── consts.py ├── Photon_X25 ├── __init__.py ├── config.py └── consts.py ├── ProjectMixIO ├── ProjectMixIO.py └── __init__.py ├── Push ├── Actions.py ├── Preset.syx ├── Push.py ├── Settings.py ├── Setup.syx ├── Sysex.py ├── __init__.py ├── browser_component.py ├── browser_model.py ├── browser_model_factory.py ├── browser_query.py ├── custom_bank_definitions.py ├── device_component.py ├── device_navigation_component.py ├── drum_group_component.py ├── elements.py ├── firmware_handling.py ├── global_pad_parameters.py ├── handshake_component.py ├── mode_behaviours.py ├── multi_entry_mode.py ├── navigation_node.py ├── notification_component.py ├── pad_sensitivity.py ├── parameter_mapping_sensitivities.py ├── quantization_settings.py ├── scales_component.py ├── selected_track_parameter_provider.py ├── special_chan_strip_component.py ├── special_mixer_component.py ├── special_physical_display.py ├── user_settings_component.py └── with_priority.py ├── Push2 ├── __init__.py ├── actions.py ├── automation.py ├── bank_selection_component.py ├── browser_component.py ├── browser_item.py ├── browser_list.py ├── browser_modes.py ├── chain_selection_component.py ├── clip_control.py ├── clip_decoration.py ├── color_chooser.py ├── colors.py ├── convert.py ├── custom_bank_definitions.py ├── decoration.py ├── device_component.py ├── device_decoration.py ├── device_navigation.py ├── device_options.py ├── device_parameter_bank_with_options.py ├── device_util.py ├── device_view_component.py ├── drum_group_component.py ├── drum_pad_parameter_component.py ├── elements.py ├── firmware.py ├── firmware │ └── app_push2_stable_1.0.60.upgrade ├── hardware_settings_component.py ├── item_lister_component.py ├── master_track.py ├── mixable_utilities.py ├── mixer_control_component.py ├── mode_collector.py ├── model │ ├── __init__.py │ ├── declaration.py │ ├── generation.py │ ├── repr.py │ └── uniqueid.py ├── mute_solo_stop.py ├── note_editor.py ├── note_settings.py ├── notification_component.py ├── observable_property_alias.py ├── pad_sensitivity.py ├── pad_velocity_curve.py ├── parameter_mapping_sensitivities.py ├── push2.py ├── push2_model.py ├── real_time_channel.py ├── routing.py ├── scales_component.py ├── selected_track_parameter_provider.py ├── session_component.py ├── session_recording.py ├── session_ring_selection_linking.py ├── settings.py ├── setup_component.py ├── skin_default.py ├── sliced_simpler.py ├── sysex.py ├── track_list.py ├── track_mixer_control_component.py ├── track_selection.py ├── transport_state.py ├── user_component.py └── waveform_navigation.py ├── README.md ├── Radium49_61 ├── __init__.py ├── config.py └── consts.py ├── RemoteSL ├── DisplayController.py ├── EffectController.py ├── MixerController.py ├── RemoteSL.py ├── RemoteSLComponent.py ├── __init__.py └── consts.py ├── RemoteSL_Classic ├── DisplayController.py ├── EffectController.py ├── MixerController.py ├── RemoteSL.py ├── RemoteSLComponent.py ├── __init__.py └── consts.py ├── Roland_A_PRO ├── DeviceNavigationComponent.py ├── MixerComponent.py ├── Preset.syx ├── Roland_A_PRO.py └── __init__.py ├── Tranzport ├── Tranzport.py ├── __init__.py └── consts.py ├── TriggerFinger ├── __init__.py ├── config.py └── consts.py ├── UC33e ├── __init__.py ├── config.py └── consts.py ├── VCM600 ├── MixerComponent.py ├── TrackEQComponent.py ├── TrackFilterComponent.py ├── TransportComponent.py ├── VCM600.py ├── ViewTogglerComponent.py └── __init__.py ├── ZERO8 ├── __init__.py ├── config.py └── consts.py ├── _APC ├── APC.py ├── ControlElementUtils.py ├── DetailViewCntrlComponent.py ├── DeviceBankButtonElement.py ├── DeviceComponent.py ├── MixerComponent.py ├── RingedEncoderElement.py ├── SessionComponent.py ├── SkinDefault.py └── __init__.py ├── _Arturia ├── ArturiaControlSurface.py ├── MixerComponent.py ├── ScrollComponent.py ├── SessionComponent.py └── __init__.py ├── _Axiom ├── Encoders.py ├── Pads.py ├── Transport.py ├── __init__.py └── consts.py ├── _Generic ├── Devices.py ├── GenericScript.py ├── SelectChanStripComponent.py ├── SpecialMixerComponent.py ├── __init__.py └── util.py ├── _MPDMkIIBase ├── ControlElementUtils.py ├── MPDMkIIBase.py └── __init__.py ├── _MxDCore ├── LomTypes.py ├── LomUtils.py ├── MxDCore.py ├── MxDUtils.py └── __init__.py ├── _Serato ├── PySCAClipControl.py ├── Serato.py ├── SpecialChanStripComponent.py ├── SpecialClipSlotComponent.py ├── SpecialDeviceComponent.py ├── SpecialMixerComponent.py ├── SpecialSceneComponent.py ├── SpecialSessionComponent.py └── __init__.py ├── _Tools ├── InstantMappings-HowTo.txt ├── UserConfiguration.txt └── __init__.py ├── _UserScript └── __init__.py ├── microKONTROL ├── Preset.syx ├── __init__.py ├── config.py └── consts.py ├── padKONTROL ├── __init__.py ├── config.py └── consts.py └── pushbase ├── __init__.py ├── accent_component.py ├── action_with_options_component.py ├── actions.py ├── auto_arm_component.py ├── automation_component.py ├── banking_util.py ├── browser_modes.py ├── browser_util.py ├── clip_control_component.py ├── colors.py ├── configurable_button_element.py ├── consts.py ├── control_element_factory.py ├── decoration.py ├── device_chain_utils.py ├── device_component.py ├── device_parameter_bank.py ├── device_parameter_component.py ├── drum_group_component.py ├── elements.py ├── fixed_length.py ├── grid_resolution.py ├── instrument_component.py ├── internal_parameter.py ├── live_util.py ├── loop_selector_component.py ├── mapped_control.py ├── matrix_maps.py ├── melodic_component.py ├── melodic_pattern.py ├── message_box_component.py ├── messenger_mode_component.py ├── note_editor_component.py ├── note_editor_paginator.py ├── note_repeat_component.py ├── note_settings_component.py ├── pad_control.py ├── pad_sensitivity.py ├── parameter_provider.py ├── parameter_slot_description.py ├── percussion_instrument_finder.py ├── playhead_component.py ├── playhead_element.py ├── proxy_element.py ├── push_base.py ├── quantization_component.py ├── scrollable_list.py ├── scrollable_list_component.py ├── select_playing_clip_component.py ├── selected_track_parameter_provider.py ├── selection.py ├── session_recording_component.py ├── setting.py ├── simpler_decoration.py ├── simpler_slice_nudging.py ├── skin_default.py ├── sliced_simpler_component.py ├── slideable_touch_strip_component.py ├── song_utils.py ├── special_session_component.py ├── step_duplicator.py ├── step_seq_component.py ├── sysex.py ├── touch_encoder_element.py ├── touch_strip_controller.py ├── touch_strip_element.py ├── track_frozen_mode.py ├── transport_component.py ├── user_component.py ├── value_component.py ├── velocity_levels_component.py └── velocity_levels_element.py /ADVANCE/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\ADVANCE\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .Advance import Advance 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=2536, product_ids=[46, 47, 48], model_name=['ADVANCE25', 'ADVANCE49', 'ADVANCE61']), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.NOTES_CC, caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return Advance(c_instance) -------------------------------------------------------------------------------- /AIRA_MX_1/Colors.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AIRA_MX_1\Colors.py 2 | from _Framework.ButtonElement import Color 3 | BLINK_LED_CHANNEL = 14 4 | 5 | class Blink(Color): 6 | 7 | def draw(self, interface): 8 | interface.send_value(self.midi_value) 9 | interface.send_value(0, channel=BLINK_LED_CHANNEL) 10 | 11 | 12 | class Rgb: 13 | BLACK = Color(0) 14 | RED = Color(5) 15 | RED_BLINK = Blink(5) 16 | GREEN_HALF = Color(20) 17 | GREEN = Color(21) 18 | GREEN_BLINK = Blink(21) 19 | BLUE_HALF = Color(44) 20 | BLUE = Color(45) 21 | BLUE_BLINK = Blink(45) -------------------------------------------------------------------------------- /AIRA_MX_1/ControlElementUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AIRA_MX_1\ControlElementUtils.py 2 | import Live 3 | from _Framework.Resource import PrioritizedResource 4 | from _Framework.Dependency import depends 5 | from _Framework.InputControlElement import MIDI_NOTE_TYPE, MIDI_CC_TYPE 6 | from _Framework.ComboElement import ComboElement 7 | from _Framework.ButtonElement import ButtonElement 8 | from _Framework.EncoderElement import EncoderElement 9 | 10 | @depends(skin=None) 11 | def make_button(name, identifier, channel = 0, msg_type = MIDI_NOTE_TYPE, is_momentary = True, is_modifier = False, skin = None): 12 | return ButtonElement(is_momentary, msg_type, channel, identifier, name=name, resource_type=PrioritizedResource if is_modifier else None, skin=skin) 13 | 14 | 15 | def make_encoder(name, identifier, channel = 0): 16 | return EncoderElement(MIDI_CC_TYPE, channel, identifier, Live.MidiMap.MapMode.absolute, name=name) 17 | 18 | 19 | def with_modifier(control, modifier): 20 | return ComboElement(control, modifiers=[modifier], name=control.name + '_With_Modifier') -------------------------------------------------------------------------------- /AIRA_MX_1/NotifyingMixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AIRA_MX_1\NotifyingMixerComponent.py 2 | from _Framework.MixerComponent import MixerComponent 3 | from _Framework.Control import ButtonControl 4 | 5 | class NotifyingMixerComponent(MixerComponent): 6 | """ 7 | Special mixer class that uses return tracks alongside midi and 8 | audio tracks and includes controls for incrementing/decrementing 9 | between sends. 10 | """ 11 | send_index_up_button = ButtonControl() 12 | send_index_down_button = ButtonControl() 13 | modifier_button = ButtonControl(color=0, pressed_color=127) 14 | 15 | def tracks_to_use(self): 16 | return tuple(self.song().visible_tracks) + tuple(self.song().return_tracks) 17 | 18 | @send_index_up_button.pressed 19 | def send_index_up_button(self, button): 20 | self._adjust_send_index(1) 21 | 22 | @send_index_down_button.pressed 23 | def send_index_down_button(self, button): 24 | self._adjust_send_index(-1) 25 | 26 | def _adjust_send_index(self, factor): 27 | new_index = self.send_index + factor 28 | if 0 <= new_index < self.num_sends: 29 | self.send_index = new_index 30 | self._show_msg_callback('Tone/Filter Controlling Send: %s' % self.song().return_tracks[self.send_index].name) -------------------------------------------------------------------------------- /AIRA_MX_1/README.md: -------------------------------------------------------------------------------- 1 | # Roland MX 1 2 | This scripts adds support for the Roland MX 1 mixer. 3 | 4 | ## Maintainers 5 | stm 6 | -------------------------------------------------------------------------------- /AIRA_MX_1/SkinDefault.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AIRA_MX_1\SkinDefault.py 2 | from _Framework.Skin import Skin 3 | from Colors import Rgb 4 | 5 | class Colors: 6 | 7 | class Session: 8 | ClipEmpty = Rgb.BLACK 9 | ClipStopped = Rgb.GREEN_HALF 10 | ClipStarted = Rgb.GREEN 11 | ClipRecording = Rgb.RED 12 | ClipTriggeredPlay = Rgb.GREEN_BLINK 13 | ClipTriggeredRecord = Rgb.RED_BLINK 14 | NoScene = Rgb.BLACK 15 | Scene = Rgb.BLUE_HALF 16 | SceneTriggered = Rgb.BLUE_BLINK 17 | ScenePlaying = Rgb.BLUE 18 | StopClip = Rgb.RED 19 | StopClipTriggered = Rgb.RED_BLINK 20 | 21 | 22 | def make_default_skin(): 23 | return Skin(Colors) -------------------------------------------------------------------------------- /AIRA_MX_1/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AIRA_MX_1\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, SCRIPT, controller_id, inport, outport 3 | from RolandMX1 import RolandMX1 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1410, product_ids=[419], model_name=['MX-1']), 7 | PORTS_KEY: [inport(props=[]), 8 | inport(props=[SCRIPT]), 9 | outport(props=[]), 10 | outport(props=[SCRIPT])]} 11 | 12 | 13 | def create_instance(c_instance): 14 | return RolandMX1(c_instance=c_instance) -------------------------------------------------------------------------------- /APC20/BackgroundComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC20\BackgroundComponent.py 2 | from _Framework.BackgroundComponent import BackgroundComponent as BackgroundComponentBase 3 | from _Framework.Util import nop 4 | 5 | class BackgroundComponent(BackgroundComponentBase): 6 | 7 | def _clear_control(self, name, control): 8 | if control: 9 | control.add_value_listener(nop) 10 | elif name in self._control_map: 11 | self._control_map[name].remove_value_listener(nop) 12 | super(BackgroundComponent, self)._clear_control(name, control) -------------------------------------------------------------------------------- /APC20/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC20\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE, controller_id, inport, outport 3 | from APC20 import APC20 4 | 5 | def create_instance(c_instance): 6 | """ Creates and returns the APC20 script """ 7 | return APC20(c_instance) 8 | 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[123], model_name='Akai APC20'), 12 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} -------------------------------------------------------------------------------- /APC20/consts.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC20\consts.py 2 | MANUFACTURER_ID = 71 3 | ABLETON_MODE = 65 4 | NOTE_MODE = 67 -------------------------------------------------------------------------------- /APC40/SessionComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC40\SessionComponent.py 2 | from _Framework.Control import ButtonControl 3 | from _APC.SessionComponent import SessionComponent as SessionComponentBase 4 | 5 | class SessionComponent(SessionComponentBase): 6 | """ Special SessionComponent with a button (pedal) to fire the selected clip slot """ 7 | slot_launch_button = ButtonControl() 8 | selected_scene_launch_button = ButtonControl() 9 | 10 | def set_slot_launch_button(self, button): 11 | self.slot_launch_button.set_control_element(button) 12 | 13 | @slot_launch_button.pressed 14 | def slot_launch_button(self, button): 15 | clip_slot = self.song().view.highlighted_clip_slot 16 | if clip_slot: 17 | clip_slot.fire() 18 | 19 | def set_selected_scene_launch_button(self, button): 20 | self.selected_scene_launch_button.set_control_element(button) 21 | 22 | @selected_scene_launch_button.pressed 23 | def selected_scene_launch_button(self, button): 24 | scene = self.song().view.selected_scene 25 | if scene: 26 | scene.fire() -------------------------------------------------------------------------------- /APC40/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC40\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE, controller_id, inport, outport 3 | from APC40 import APC40 4 | 5 | def create_instance(c_instance): 6 | return APC40(c_instance) 7 | 8 | 9 | def get_capabilities(): 10 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[115], model_name='Akai APC40'), 11 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} -------------------------------------------------------------------------------- /APC40_MkII/BankToggleComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC40_MkII\BankToggleComponent.py 2 | from _Framework.ComboElement import ToggleElement 3 | from _Framework.Control import ToggleButtonControl 4 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 5 | 6 | class BankToggleComponent(ControlSurfaceComponent): 7 | bank_toggle_button = ToggleButtonControl() 8 | 9 | def __init__(self, *a, **k): 10 | super(BankToggleComponent, self).__init__(*a, **k) 11 | self._toggle_elements = [] 12 | 13 | @bank_toggle_button.toggled 14 | def bank_toggle_button(self, toggled, button): 15 | for e in self._toggle_elements: 16 | e.set_toggled(toggled) 17 | 18 | def create_toggle_element(self, *a, **k): 19 | element = ToggleElement(*a, **k) 20 | element.toggled = self.bank_toggle_button.is_toggled 21 | self._toggle_elements.append(element) 22 | return element -------------------------------------------------------------------------------- /APC40_MkII/TransportComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC40_MkII\TransportComponent.py 2 | import Live 3 | from _Framework.Control import ButtonControl 4 | from _Framework.SubjectSlot import subject_slot 5 | from _Framework.TransportComponent import TransportComponent as TransportComponentBase 6 | from _Framework.Util import clamp 7 | 8 | class TransportComponent(TransportComponentBase): 9 | shift_button = ButtonControl() 10 | 11 | def __init__(self, *a, **k): 12 | 13 | def play_toggle_model_transform(val): 14 | if self.shift_button.is_pressed: 15 | return False 16 | return val 17 | 18 | k['play_toggle_model_transform'] = play_toggle_model_transform 19 | super(TransportComponent, self).__init__(*a, **k) 20 | self._tempo_encoder_control = None 21 | return 22 | 23 | def set_tempo_encoder(self, control): 24 | if not (not control or control.message_map_mode() in (Live.MidiMap.MapMode.relative_smooth_two_compliment, Live.MidiMap.MapMode.relative_two_compliment)): 25 | raise AssertionError 26 | self._tempo_encoder_control = control != self._tempo_encoder_control and control 27 | self._tempo_encoder_value.subject = control 28 | self.update() 29 | 30 | @subject_slot('value') 31 | def _tempo_encoder_value(self, value): 32 | if self.is_enabled(): 33 | step = 0.1 if self.shift_button.is_pressed else 1.0 34 | amount = value - 128 if value >= 64 else value 35 | self.song().tempo = clamp(self.song().tempo + amount * step, 20, 999) -------------------------------------------------------------------------------- /APC40_MkII/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC40_MkII\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, SYNC, REMOTE, controller_id, inport, outport 3 | from APC40_MkII import APC40_MkII 4 | 5 | def create_instance(c_instance): 6 | return APC40_MkII(c_instance) 7 | 8 | 9 | def get_capabilities(): 10 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[41], model_name='Akai APC40 MkII'), 11 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SYNC, SCRIPT, REMOTE])]} -------------------------------------------------------------------------------- /APC_Key_25/MixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC_Key_25\MixerComponent.py 2 | from _APC.MixerComponent import MixerComponent as MixerComponentBase 3 | from _APC.MixerComponent import ChanStripComponent as ChanStripComponentBase 4 | from _Framework.Util import nop 5 | 6 | class ChanStripComponent(ChanStripComponentBase): 7 | 8 | def __init__(self, *a, **k): 9 | self.reset_button_on_exchange = nop 10 | super(ChanStripComponent, self).__init__(*a, **k) 11 | 12 | 13 | class MixerComponent(MixerComponentBase): 14 | 15 | def on_num_sends_changed(self): 16 | if self.send_index is None and self.num_sends > 0: 17 | self.send_index = 0 18 | return 19 | 20 | def _create_strip(self): 21 | return ChanStripComponent() -------------------------------------------------------------------------------- /APC_Key_25/SendToggleComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC_Key_25\SendToggleComponent.py 2 | from _Framework.Control import ButtonControl 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | 5 | class SendToggleComponent(ControlSurfaceComponent): 6 | toggle_control = ButtonControl() 7 | 8 | def __init__(self, mixer, *args, **kwargs): 9 | super(SendToggleComponent, self).__init__(*args, **kwargs) 10 | self.mixer = mixer 11 | self.last_number_of_sends = self.mixer.num_sends 12 | self.set_toggle_button = self.toggle_control.set_control_element 13 | 14 | def inc_send_index(self): 15 | if self.mixer.num_sends: 16 | self.mixer.send_index = (self.mixer.send_index + 1) % self.mixer.num_sends 17 | 18 | @toggle_control.pressed 19 | def toggle_button_pressed(self, _button): 20 | self.inc_send_index() -------------------------------------------------------------------------------- /APC_Key_25/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC_Key_25\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE, controller_id, inport, outport 3 | from APC_Key_25 import APC_Key_25 4 | 5 | def create_instance(c_instance): 6 | return APC_Key_25(c_instance) 7 | 8 | 9 | def get_capabilities(): 10 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[39], model_name='APC Keys'), 11 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} -------------------------------------------------------------------------------- /APC_mini/APC_mini.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC_mini\APC_mini.py 2 | from __future__ import with_statement 3 | from _Framework.Layer import Layer, SimpleLayerOwner 4 | from _APC.ControlElementUtils import make_slider 5 | from APC_Key_25.APC_Key_25 import APC_Key_25 6 | 7 | class APC_mini(APC_Key_25): 8 | SESSION_HEIGHT = 8 9 | HAS_TRANSPORT = False 10 | 11 | def __init__(self, *a, **k): 12 | super(APC_mini, self).__init__(*a, **k) 13 | with self.component_guard(): 14 | self.register_disconnectable(SimpleLayerOwner(layer=Layer(_unused_buttons=self.wrap_matrix(self._unused_buttons)))) 15 | 16 | def _make_stop_all_button(self): 17 | return self.make_shifted_button(self._scene_launch_buttons[7]) 18 | 19 | def _create_controls(self): 20 | super(APC_mini, self)._create_controls() 21 | self._unused_buttons = map(self.make_shifted_button, self._scene_launch_buttons[5:7]) 22 | self._master_volume_control = make_slider(0, 56, name='Master_Volume') 23 | 24 | def _create_mixer(self): 25 | mixer = super(APC_mini, self)._create_mixer() 26 | mixer.master_strip().layer = Layer(volume_control=self._master_volume_control) 27 | return mixer 28 | 29 | def _product_model_id_byte(self): 30 | return 40 -------------------------------------------------------------------------------- /APC_mini/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\APC_mini\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE, controller_id, inport, outport 3 | from APC_mini import APC_mini 4 | 5 | def create_instance(c_instance): 6 | return APC_mini(c_instance) 7 | 8 | 9 | def get_capabilities(): 10 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[40], model_name='APC MINI'), 11 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} -------------------------------------------------------------------------------- /Alesis_V/Alesis_V.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Alesis_V\Alesis_V.py 2 | from __future__ import with_statement 3 | import Live 4 | from _Framework.ControlSurface import ControlSurface 5 | from _Framework.Layer import Layer 6 | from _Framework.EncoderElement import EncoderElement 7 | from _Framework.ButtonMatrixElement import ButtonMatrixElement 8 | from _Framework.InputControlElement import MIDI_CC_TYPE 9 | from _Framework.DeviceComponent import DeviceComponent 10 | 11 | class Alesis_V(ControlSurface): 12 | 13 | def __init__(self, *a, **k): 14 | super(Alesis_V, self).__init__(*a, **k) 15 | with self.component_guard(): 16 | encoders = ButtonMatrixElement(rows=[[ EncoderElement(MIDI_CC_TYPE, 0, identifier + 20, Live.MidiMap.MapMode.absolute, name='Encoder_%d' % identifier) for identifier in xrange(4) ]]) 17 | device = DeviceComponent(name='Device', is_enabled=False, layer=Layer(parameter_controls=encoders), device_selection_follows_track_selection=True) 18 | device.set_enabled(True) 19 | self.set_device_component(device) -------------------------------------------------------------------------------- /Alesis_V/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Alesis_V\__init__.py 2 | from .Alesis_V import Alesis_V 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=5042, product_ids=[134, 135, 136], model_name=['V25', 'V49', 'V61']), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return Alesis_V(c_instance) -------------------------------------------------------------------------------- /Alesis_VI/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Alesis_VI\__init__.py 2 | from .Alesis_VI import Alesis_VI 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=5042, product_ids=[131, 132, 133], model_name=['VI25', 'VI49', 'VI61']), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return Alesis_VI(c_instance) -------------------------------------------------------------------------------- /Alesis_VX/Alesis_VX.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Alesis_VX\Alesis_VX.py 2 | from ADVANCE.Advance import Advance 3 | 4 | class Alesis_VX(Advance): 5 | pass -------------------------------------------------------------------------------- /Alesis_VX/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Alesis_VX\__init__.py 2 | from .Alesis_VX import Alesis_VX 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=5042, product_ids=[4176], model_name='VX49'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return Alesis_VX(c_instance) -------------------------------------------------------------------------------- /Axiom/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.relative_smooth_binary_offset, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /Axiom/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom\config.py 2 | from consts import * 3 | from _Axiom.consts import PAD_TRANSLATION 4 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 5 | 'PLAY': GENERIC_PLAY, 6 | 'REC': GENERIC_REC, 7 | 'LOOP': GENERIC_LOOP, 8 | 'RWD': GENERIC_RWD, 9 | 'FFWD': GENERIC_FFWD} 10 | DEVICE_CONTROLS = (GENERIC_ENC5, 11 | GENERIC_ENC6, 12 | GENERIC_ENC7, 13 | GENERIC_ENC8, 14 | GENERIC_ENC1, 15 | GENERIC_ENC2, 16 | GENERIC_ENC3, 17 | GENERIC_ENC4) 18 | VOLUME_CONTROLS = GENERIC_SLIDERS 19 | TRACKARM_CONTROLS = (GENERIC_BUT1, 20 | GENERIC_BUT2, 21 | GENERIC_BUT3, 22 | GENERIC_BUT4, 23 | GENERIC_BUT5, 24 | GENERIC_BUT6, 25 | GENERIC_BUT7, 26 | GENERIC_BUT8) 27 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 28 | 'BANKDIAL': -1, 29 | 'NEXTBANK': -1, 30 | 'PREVBANK': -1, 31 | 'BANK1': -1, 32 | 'BANK2': -1, 33 | 'BANK3': -1, 34 | 'BANK4': -1, 35 | 'BANK5': -1, 36 | 'BANK6': -1, 37 | 'BANK7': -1, 38 | 'BANK8': -1} 39 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'USB Axiom', 40 | 'OUTPUTPORT': 'USB Axiom', 41 | 'CHANNEL': 0, 42 | 'PAD_TRANSLATION': PAD_TRANSLATION} 43 | MIXER_OPTIONS = {'NUMSENDS': 2, 44 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 45 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 46 | 'MASTERVOLUME': GENERIC_SLI9} -------------------------------------------------------------------------------- /AxiomPro/PeekableEncoderElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AxiomPro\PeekableEncoderElement.py 2 | import Live 3 | from _Framework.EncoderElement import EncoderElement 4 | from _Framework.InputControlElement import * 5 | 6 | class PeekableEncoderElement(EncoderElement): 7 | """ Encoder that can be connected and disconnected to a specific parameter """ 8 | 9 | def __init__(self, msg_type, channel, identifier, map_mode): 10 | EncoderElement.__init__(self, msg_type, channel, identifier, map_mode) 11 | self._peek_mode = False 12 | 13 | def set_peek_mode(self, peek_mode): 14 | if not isinstance(peek_mode, type(False)): 15 | raise AssertionError 16 | self._peek_mode = self._peek_mode != peek_mode and peek_mode 17 | self._request_rebuild() 18 | 19 | def get_peek_mode(self): 20 | return self._peek_mode 21 | 22 | def install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback): 23 | current_parameter = self._parameter_to_map_to 24 | if self._peek_mode: 25 | self._parameter_to_map_to = None 26 | InputControlElement.install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback) 27 | self._parameter_to_map_to = current_parameter 28 | return -------------------------------------------------------------------------------- /AxiomPro/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\AxiomPro\__init__.py 2 | from AxiomPro import AxiomPro 3 | 4 | def create_instance(c_instance): 5 | return AxiomPro(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[8227], model_name='Axiom Pro 49'), 12 | PORTS_KEY: [inport(props=[NOTES_CC]), 13 | inport(props=[NOTES_CC, SCRIPT]), 14 | inport(props=[NOTES_CC]), 15 | inport(props=[NOTES_CC]), 16 | outport(props=[]), 17 | outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /Axiom_25_Classic/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Axiom_25_Classic/Preset.syx -------------------------------------------------------------------------------- /Axiom_25_Classic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_25_Classic\__init__.py 2 | from Axiom import Axiom 3 | 4 | def create_instance(c_instance): 5 | return Axiom(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[408], model_name='USB Axiom 25'), 12 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), inport(props=[PLAIN_OLD_MIDI]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /Axiom_49_61_Classic/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Axiom_49_61_Classic/Preset.syx -------------------------------------------------------------------------------- /Axiom_49_61_Classic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_49_61_Classic\__init__.py 2 | from Axiom import Axiom 3 | 4 | def create_instance(c_instance): 5 | return Axiom(c_instance) -------------------------------------------------------------------------------- /Axiom_AIR_25_49_61/NumericalDisplaySegment.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_AIR_25_49_61\NumericalDisplaySegment.py 2 | from _Framework.LogicalDisplaySegment import LogicalDisplaySegment 3 | 4 | class NumericalDisplaySegment(LogicalDisplaySegment): 5 | """ Special display segment that only displays numerical values """ 6 | 7 | @staticmethod 8 | def adjust_string(original, length): 9 | characters_to_retain = {'0': 48, 10 | '1': 49, 11 | '2': 50, 12 | '3': 51, 13 | '4': 52, 14 | '5': 53, 15 | '6': 54, 16 | '7': 55, 17 | '8': 56, 18 | '9': 57} 19 | resulting_string = '' 20 | for char in original: 21 | if char in characters_to_retain: 22 | resulting_string = resulting_string + char 23 | 24 | if len(resulting_string) > length: 25 | resulting_string = resulting_string[:length] 26 | if len(resulting_string) < length: 27 | resulting_string = resulting_string.rjust(length) 28 | return resulting_string 29 | 30 | def __init__(self, width, update_callback): 31 | LogicalDisplaySegment.__init__(self, width, update_callback) 32 | 33 | def display_string(self): 34 | resulting_string = ' ' * self._width 35 | if self._data_source != None: 36 | resulting_string = NumericalDisplaySegment.adjust_string(self._data_source.display_string(), self._width) 37 | return resulting_string -------------------------------------------------------------------------------- /Axiom_AIR_25_49_61/SpecialMixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_AIR_25_49_61\SpecialMixerComponent.py 2 | from _Framework.MixerComponent import MixerComponent 3 | from DisplayingChanStripComponent import DisplayingChanStripComponent 4 | 5 | class SpecialMixerComponent(MixerComponent): 6 | """ Special mixer class that uses displaying channel strips """ 7 | 8 | def __init__(self, name_display, value_display, num_tracks, num_returns = 0): 9 | MixerComponent.__init__(self, num_tracks, num_returns=0) 10 | self._name_display = name_display 11 | self._value_display = value_display 12 | for index in range(num_tracks): 13 | self._channel_strips[index].set_name_display(self._name_display) 14 | self._channel_strips[index].set_value_display(self._value_display) 15 | 16 | for index in range(num_returns): 17 | self._return_strips[index].set_name_display(self._name_display) 18 | self._return_strips[index].set_value_display(self._value_display) 19 | 20 | self._selected_strip.set_name_display(self._name_display) 21 | self._selected_strip.set_value_display(self._value_display) 22 | 23 | def disconnect(self): 24 | MixerComponent.disconnect(self) 25 | self._name_display = None 26 | self._value_display = None 27 | return 28 | 29 | def tracks_to_use(self): 30 | return self.song().visible_tracks + self.song().return_tracks 31 | 32 | def _create_strip(self): 33 | return DisplayingChanStripComponent() -------------------------------------------------------------------------------- /Axiom_AIR_25_49_61/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_AIR_25_49_61\__init__.py 2 | from Axiom_AIR_25_49_61 import Axiom_AIR_25_49_61 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[8243], model_name='Axiom AIR 49'), 7 | PORTS_KEY: [inport(props=[NOTES_CC]), 8 | inport(props=[SCRIPT]), 9 | inport(props=[NOTES_CC]), 10 | outport(props=[NOTES_CC]), 11 | outport(props=[SCRIPT])]} 12 | 13 | 14 | def create_instance(c_instance): 15 | return Axiom_AIR_25_49_61(c_instance) -------------------------------------------------------------------------------- /Axiom_AIR_Mini32/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_AIR_Mini32\__init__.py 2 | from AxiomAirMini32 import AxiomAirMini32 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[8247], model_name='Axiom A.I.R. Mini32'), 7 | PORTS_KEY: [inport(props=[NOTES_CC]), 8 | inport(props=[NOTES_CC, SCRIPT]), 9 | outport(props=[NOTES_CC]), 10 | outport(props=[NOTES_CC, SCRIPT])]} 11 | 12 | 13 | def create_instance(c_instance): 14 | return AxiomAirMini32(c_instance) -------------------------------------------------------------------------------- /Axiom_DirectLink/PeekableEncoderElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_DirectLink\PeekableEncoderElement.py 2 | import Live 3 | from _Framework.EncoderElement import EncoderElement 4 | from _Framework.InputControlElement import * 5 | 6 | class PeekableEncoderElement(EncoderElement): 7 | """ Encoder that can be connected and disconnected to a specific parameter """ 8 | 9 | def __init__(self, msg_type, channel, identifier, map_mode): 10 | EncoderElement.__init__(self, msg_type, channel, identifier, map_mode) 11 | self._peek_mode = False 12 | 13 | def set_peek_mode(self, peek_mode): 14 | if not isinstance(peek_mode, type(False)): 15 | raise AssertionError 16 | self._peek_mode = self._peek_mode != peek_mode and peek_mode 17 | self._request_rebuild() 18 | 19 | def get_peek_mode(self): 20 | return self._peek_mode 21 | 22 | def install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback): 23 | current_parameter = self._parameter_to_map_to 24 | if self._peek_mode: 25 | self._parameter_to_map_to = None 26 | InputControlElement.install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback) 27 | self._parameter_to_map_to = current_parameter 28 | return -------------------------------------------------------------------------------- /Axiom_DirectLink/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Axiom_DirectLink\__init__.py 2 | from Axiom_DirectLink import Axiom_DirectLink 3 | 4 | def create_instance(c_instance): 5 | return Axiom_DirectLink(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[8237], model_name='Axiom 49'), 12 | PORTS_KEY: [inport(props=[NOTES_CC]), 13 | inport(props=[NOTES_CC, SCRIPT]), 14 | inport(props=[NOTES_CC]), 15 | outport(props=[]), 16 | outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /BCF2000/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/BCF2000/Preset.syx -------------------------------------------------------------------------------- /BCF2000/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\BCF2000\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) -------------------------------------------------------------------------------- /BCF2000/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\BCF2000\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = ((GENERIC_ENC1, 0), 10 | (GENERIC_ENC2, 0), 11 | (GENERIC_ENC3, 0), 12 | (GENERIC_ENC4, 0), 13 | (GENERIC_ENC5, 0), 14 | (GENERIC_ENC6, 0), 15 | (GENERIC_ENC7, 0), 16 | (GENERIC_ENC8, 0)) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, -1), 18 | (GENERIC_SLI2, -1), 19 | (GENERIC_SLI3, -1), 20 | (GENERIC_SLI4, -1), 21 | (GENERIC_SLI5, -1), 22 | (GENERIC_SLI6, -1), 23 | (GENERIC_SLI7, -1), 24 | (GENERIC_SLI8, -1)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': 65, 38 | 'BANK2': 66, 39 | 'BANK3': 67, 40 | 'BANK4': 68, 41 | 'BANK5': 69, 42 | 'BANK6': 70, 43 | 'BANK7': 71, 44 | 'BANK8': 72} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'BCF2000', 46 | 'OUTPUTPORT': 'BCF2000', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /BCR2000/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/BCR2000/Preset.syx -------------------------------------------------------------------------------- /BCR2000/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\BCR2000\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=5015, product_ids=[188], model_name='BCR2000'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /BCR2000/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\BCR2000\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = (97, 98, 99, 100, 101, 102, 103, 104) 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': GENERIC_PAD1, 31 | 'BANK2': GENERIC_PAD2, 32 | 'BANK3': GENERIC_PAD3, 33 | 'BANK4': GENERIC_PAD4, 34 | 'BANK5': GENERIC_PAD5, 35 | 'BANK6': GENERIC_PAD6, 36 | 'BANK7': GENERIC_PAD7, 37 | 'BANK8': GENERIC_PAD8} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'BCR2000', 39 | 'OUTPUTPORT': 'BCR2000', 40 | 'CHANNEL': 0} 41 | MIXER_OPTIONS = {'NUMSENDS': 2, 42 | 'SEND1': GENERIC_SLIDERS, 43 | 'SEND2': (89, 90, 91, 92, 93, 94, 95, 96), 44 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /BeatStep/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\BeatStep\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .BeatStep import BeatStep 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=7285, product_ids=[518], model_name=['Arturia BeatStep']), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return BeatStep(c_instance) -------------------------------------------------------------------------------- /CTRL49/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\CTRL49\__init__.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.capabilities import CONTROLLER_ID_KEY, NOTES_CC, PORTS_KEY, REMOTE, SCRIPT, controller_id, inport, outport 4 | from .ctrl49 import Ctrl49 5 | 6 | def get_capabilities(): 7 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[12552], model_name=['CTRL49']), 8 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE]), 9 | inport(props=[]), 10 | inport(props=[]), 11 | inport(props=[NOTES_CC, SCRIPT]), 12 | outport(props=[]), 13 | outport(props=[]), 14 | outport(props=[]), 15 | outport(props=[SCRIPT])]} 16 | 17 | 18 | def create_instance(c_instance): 19 | return Ctrl49(c_instance=c_instance) -------------------------------------------------------------------------------- /CTRL49/ctrl49.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\CTRL49\ctrl49.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.components import SessionNavigationComponent 4 | from Code_Series.code import Code 5 | 6 | class Ctrl49(Code): 7 | mixer_navigation_type = SessionNavigationComponent -------------------------------------------------------------------------------- /Code_Series/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Code_Series\__init__.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.capabilities import CONTROLLER_ID_KEY, NOTES_CC, PORTS_KEY, REMOTE, SCRIPT, controller_id, inport, outport 4 | from .code import Code 5 | 6 | def get_capabilities(): 7 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[12548, 12549, 12550], model_name=['Code 25', 'Code 49', 'Code 61']), 8 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE]), 9 | inport(props=[]), 10 | inport(props=[NOTES_CC, SCRIPT]), 11 | inport(props=[]), 12 | outport(props=[]), 13 | outport(props=[]), 14 | outport(props=[SCRIPT]), 15 | outport(props=[])]} 16 | 17 | 18 | def create_instance(c_instance): 19 | return Code(c_instance=c_instance) -------------------------------------------------------------------------------- /Code_Series/element_utils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Code_Series\element_utils.py 2 | import Live 3 | from ableton.v2.base import depends 4 | from ableton.v2.control_surface import MIDI_CC_TYPE, MIDI_NOTE_TYPE, MIDI_PB_TYPE 5 | from ableton.v2.control_surface.elements import ButtonElement, EncoderElement, SliderElement 6 | IS_MOMENTARY = True 7 | CHANNEL = 0 8 | 9 | @depends(skin=None) 10 | def make_button(identifier, name, **k): 11 | return ButtonElement(IS_MOMENTARY, MIDI_NOTE_TYPE, CHANNEL, identifier, name=name, **k) 12 | 13 | 14 | def make_slider(channel, name): 15 | return SliderElement(MIDI_PB_TYPE, channel, 0, name=name) 16 | 17 | 18 | def make_encoder(identifier, name): 19 | return EncoderElement(MIDI_CC_TYPE, 0, identifier, Live.MidiMap.MapMode.relative_smooth_signed_bit, name=name) -------------------------------------------------------------------------------- /Code_Series/mixer_navigation.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Code_Series\mixer_navigation.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.components import SessionNavigationComponent 4 | 5 | class MixerNavigationComponent(SessionNavigationComponent): 6 | 7 | def _can_scroll_page_left(self): 8 | return True 9 | 10 | def _can_scroll_page_right(self): 11 | return True 12 | 13 | def _scroll_page_left(self): 14 | width = self._session_ring.num_tracks 15 | track_offset = self._session_ring.track_offset 16 | new_track_offset = track_offset - width 17 | if new_track_offset < 0: 18 | new_track_offset = (len(self._session_ring.tracks_to_use()) - 1) / width * width 19 | self._session_ring.set_offsets(new_track_offset, self._session_ring.scene_offset) 20 | 21 | def _scroll_page_right(self): 22 | new_track_offset = self._session_ring.track_offset + self._session_ring.num_tracks 23 | if new_track_offset >= len(self._session_ring.tracks_to_use()): 24 | new_track_offset = 0 25 | self._session_ring.set_offsets(new_track_offset, self._session_ring.scene_offset) -------------------------------------------------------------------------------- /Code_Series/skin_default.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Code_Series\skin_default.py 2 | from ableton.v2.control_surface import Skin 3 | from ableton.v2.control_surface.elements import Color 4 | 5 | class Colors: 6 | 7 | class DefaultButton: 8 | On = Color(127) 9 | Off = Color(0) 10 | Disabled = Color(0) 11 | 12 | class Transport: 13 | PlayOn = Color(127) 14 | PlayOff = Color(0) 15 | 16 | 17 | def make_default_skin(): 18 | return Skin(Colors) -------------------------------------------------------------------------------- /FireOne/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\FireOne\__init__.py 2 | from FireOne import FireOne 3 | 4 | def create_instance(c_instance): 5 | return FireOne(c_instance) -------------------------------------------------------------------------------- /KONTROL49/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/KONTROL49/Preset.syx -------------------------------------------------------------------------------- /KONTROL49/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KONTROL49\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) -------------------------------------------------------------------------------- /KeyFadr/KeyFadr.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyFadr\KeyFadr.py 2 | from KeyPad import KeyPad 3 | 4 | class KeyFadr(KeyPad): 5 | """ 6 | Reloop KeyFadr controller script. 7 | """ 8 | _encoder_range = range(80, 72, -1) 9 | _product_model_id = 102 10 | 11 | def __init__(self, *a, **k): 12 | super(KeyFadr, self).__init__(*a, **k) -------------------------------------------------------------------------------- /KeyFadr/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyFadr\__init__.py 2 | from KeyFadr import KeyFadr 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=9901, product_ids=[28150], model_name='Reloop KeyFadr'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[NOTES_CC, SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return KeyFadr(c_instance) -------------------------------------------------------------------------------- /KeyLab/DeviceNavigationComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyLab\DeviceNavigationComponent.py 2 | import Live 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | from _Framework.Control import ButtonControl 5 | NavDirection = Live.Application.Application.View.NavDirection 6 | 7 | class DeviceNavigationComponent(ControlSurfaceComponent): 8 | device_nav_left_button = ButtonControl() 9 | device_nav_right_button = ButtonControl() 10 | 11 | @device_nav_left_button.pressed 12 | def device_nav_left_button(self, value): 13 | self._scroll_device_chain(NavDirection.left) 14 | 15 | @device_nav_right_button.pressed 16 | def device_nav_right_button(self, value): 17 | self._scroll_device_chain(NavDirection.right) 18 | 19 | def _scroll_device_chain(self, direction): 20 | view = self.application().view 21 | if not view.is_view_visible('Detail') or not view.is_view_visible('Detail/DeviceChain'): 22 | view.show_view('Detail') 23 | view.show_view('Detail/DeviceChain') 24 | else: 25 | view.scroll_view(direction, 'Detail/DeviceChain', False) -------------------------------------------------------------------------------- /KeyLab/SessionComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyLab\SessionComponent.py 2 | from _Arturia.SessionComponent import SessionComponent as SessionComponentBase 3 | 4 | class SessionComponent(SessionComponentBase): 5 | 6 | def set_selected_scene_launch_button(self, button): 7 | self.selected_scene().set_launch_button(button) -------------------------------------------------------------------------------- /KeyLab/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyLab\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .KeyLab import KeyLab 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=7285, product_ids=[517, 581, 645], model_name=['KeyLab 25', 'KeyLab 49', 'KeyLab 61']), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return KeyLab(c_instance) -------------------------------------------------------------------------------- /KeyLab_88/KeyLab88.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyLab_88\KeyLab88.py 2 | from KeyLab.KeyLab import KeyLab 3 | 4 | class KeyLab88(KeyLab): 5 | 6 | def _setup_hardware_encoder(self, hardware_id, identifier, channel = 0): 7 | self._set_encoder_cc_msg_type(hardware_id) 8 | self._set_identifier(hardware_id, identifier) 9 | self._set_channel(hardware_id, channel) 10 | self._set_binary_offset_mode(hardware_id) 11 | 12 | def _setup_hardware_button(self, hardware_id, identifier, channel = 0, **k): 13 | self._set_button_msg_type(hardware_id, 'cc') 14 | self._set_channel(hardware_id, channel) 15 | self._set_identifier(hardware_id, identifier) 16 | self._set_value_minimum(hardware_id) 17 | self._set_value_maximum(hardware_id) 18 | self._set_momentary_mode(hardware_id, is_momentary=True) -------------------------------------------------------------------------------- /KeyLab_88/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyLab_88\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .KeyLab88 import KeyLab88 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=7285, product_ids=[717], model_name=['KeyLab 88']), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return KeyLab88(c_instance) -------------------------------------------------------------------------------- /KeyPad/CombinedButtonsElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyPad\CombinedButtonsElement.py 2 | from __future__ import with_statement 3 | from itertools import imap 4 | from _Framework.ButtonMatrixElement import ButtonMatrixElement 5 | from _Framework.ButtonElement import OFF_VALUE 6 | from _Framework.Util import const, BooleanContext 7 | 8 | class CombinedButtonsElement(ButtonMatrixElement): 9 | 10 | def __init__(self, buttons = None, *a, **k): 11 | super(CombinedButtonsElement, self).__init__(rows=[buttons], *a, **k) 12 | self._is_pressed = BooleanContext(False) 13 | 14 | def is_momentary(self): 15 | return True 16 | 17 | def is_pressed(self): 18 | return any(imap(lambda (b, _): (b.is_pressed() if b is not None else False), self.iterbuttons())) or bool(self._is_pressed) 19 | 20 | def on_nested_control_element_value(self, value, sender): 21 | with self._is_pressed(): 22 | self.notify_value(value) 23 | if value != OFF_VALUE and not getattr(sender, 'is_momentary', const(False))(): 24 | self.notify_value(OFF_VALUE) 25 | 26 | def send_value(self, value): 27 | for button, _ in self.iterbuttons(): 28 | if button: 29 | button.send_value(value) 30 | 31 | def set_light(self, value): 32 | for button, _ in self.iterbuttons(): 33 | if button: 34 | button.set_light(value) -------------------------------------------------------------------------------- /KeyPad/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\KeyPad\__init__.py 2 | from KeyPad import KeyPad 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=9901, product_ids=[28149], model_name='Reloop KeyPad'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[NOTES_CC, SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return KeyPad(c_instance) -------------------------------------------------------------------------------- /Keystation_Pro_88/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Keystation_Pro_88\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS, MIXER_OPTIONS) -------------------------------------------------------------------------------- /Keystation_Pro_88/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Keystation_Pro_88\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, 0), 18 | (GENERIC_SLI2, 0), 19 | (GENERIC_SLI3, 0), 20 | (GENERIC_SLI4, 0), 21 | (GENERIC_SLI5, 0), 22 | (GENERIC_SLI6, 0), 23 | (GENERIC_SLI7, 0), 24 | (GENERIC_SLI8, 0)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': -1, 38 | 'BANK2': -1, 39 | 'BANK3': -1, 40 | 'BANK4': -1, 41 | 'BANK5': -1, 42 | 'BANK6': -1, 43 | 'BANK7': -1, 44 | 'BANK8': -1} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'Keystation Pro 88', 46 | 'OUTPUTPORT': 'Keystation Pro 88', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /LPD8/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LPD8\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[117], model_name='LPD8'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /LPD8/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LPD8\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': -1, 4 | 'PLAY': -1, 5 | 'REC': -1, 6 | 'LOOP': -1, 7 | 'RWD': -1, 8 | 'FFWD': -1} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = ((-1, -1), 18 | (-1, -1), 19 | (-1, -1), 20 | (-1, -1), 21 | (-1, -1), 22 | (-1, -1), 23 | (-1, -1), 24 | (-1, -1)) 25 | TRACKARM_CONTROLS = (-1, -1, -1, -1, -1, -1, -1, -1) 26 | BANK_CONTROLS = {'TOGGLELOCK': -1, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | PAD_TRANSLATION = ((0, 2, 40, 0), 39 | (1, 2, 41, 0), 40 | (2, 2, 42, 0), 41 | (3, 2, 43, 0), 42 | (0, 3, 36, 0), 43 | (1, 3, 37, 0), 44 | (2, 3, 38, 0), 45 | (3, 3, 39, 0)) 46 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'LPD8', 47 | 'OUTPUTPORT': 'LPD8', 48 | 'CHANNEL': 0, 49 | 'PAD_TRANSLATION': PAD_TRANSLATION} 50 | MIXER_OPTIONS = {'NUMSENDS': 2, 51 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 52 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 53 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /LV1_LX1/LV1_LX1.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV1_LX1\LV1_LX1.py 2 | from LV2_LX2_LC2_LD2.FaderfoxComponent import FaderfoxComponent 3 | from LV2_LX2_LC2_LD2.FaderfoxScript import FaderfoxScript 4 | from LV2_LX2_LC2_LD2.FaderfoxMixerController import FaderfoxMixerController 5 | from LV2_LX2_LC2_LD2.FaderfoxDeviceController import FaderfoxDeviceController 6 | from LV2_LX2_LC2_LD2.FaderfoxTransportController import FaderfoxTransportController 7 | 8 | class LV1_LX1(FaderfoxScript): 9 | __module__ = __name__ 10 | __doc__ = 'Automap script for LV1 Faderfox controllers' 11 | __name__ = 'LV1_LX1 Remote Script' 12 | 13 | def __init__(self, c_instance): 14 | LV1_LX1.realinit(self, c_instance) 15 | 16 | def realinit(self, c_instance): 17 | self.suffix = '1' 18 | FaderfoxScript.realinit(self, c_instance) 19 | self.is_lv1 = True 20 | self.log('lv1 lx1') 21 | self.mixer_controller = FaderfoxMixerController(self) 22 | self.device_controller = FaderfoxDeviceController(self) 23 | self.transport_controller = FaderfoxTransportController(self) 24 | self.components = [self.mixer_controller, self.device_controller, self.transport_controller] -------------------------------------------------------------------------------- /LV1_LX1/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV1_LX1\__init__.py 2 | from LV1_LX1 import LV1_LX1 3 | 4 | def create_instance(c_instance): 5 | return LV1_LX1(c_instance) -------------------------------------------------------------------------------- /LV2_LX2_LC2_LD2/DevicesXY.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV2_LX2_LC2_LD2\DevicesXY.py 2 | import Live 3 | XY_DEVICE_DICT = {'AutoFilter': [['Frequency', 'Resonance']], 4 | 'BeatRepeat': [['Filter Freq', 'Filter Width']], 5 | 'Chorus': [['LFO Rate', 'LFO Amount']], 6 | 'Erosion': [['Frequency', 'Width']], 7 | 'FilterDelay': [['2 Filter Freq', '2 Filter Width']], 8 | 'Flanger': [['Delay Time', 'Feedback']], 9 | 'GrainDelay': [['Pitch', 'Frequency']], 10 | 'Phaser': [['Frequency', 'Feedback']], 11 | 'Reverb': [['In Filter Freq', 'In Filter Width'], ['ER Spin Rate', 'ER Spin Amount']], 12 | 'Vinyl': [['Tracing Freq.', 'Tracing Drive'], ['Pinch Freq.', 'Pinch Drive']], 13 | 'PingPongDelay': [['Filter Freq', 'Filter Width']]} -------------------------------------------------------------------------------- /LV2_LX2_LC2_LD2/LV2DeviceController.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV2_LX2_LC2_LD2\LV2DeviceController.py 2 | import Live 3 | from FaderfoxDeviceController import FaderfoxDeviceController 4 | 5 | class LV2DeviceController(FaderfoxDeviceController): 6 | __module__ = __name__ 7 | 8 | def __init__(self, parent): 9 | LV2DeviceController.realinit(self, parent) 10 | 11 | def realinit(self, parent): 12 | FaderfoxDeviceController.realinit(self, parent) -------------------------------------------------------------------------------- /LV2_LX2_LC2_LD2/LV2_LX2_LC2_LD2.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV2_LX2_LC2_LD2\LV2_LX2_LC2_LD2.py 2 | import Live 3 | from FaderfoxScript import FaderfoxScript 4 | from LV2MixerController import LV2MixerController 5 | from LV2DeviceController import LV2DeviceController 6 | from FaderfoxDeviceController import FaderfoxDeviceController 7 | from LV2TransportController import LV2TransportController 8 | from consts import * 9 | 10 | class LV2_LX2_LC2_LD2(FaderfoxScript): 11 | __module__ = __name__ 12 | __doc__ = 'Automap script for LV2 Faderfox controllers' 13 | __name__ = 'LV2_LX2_LC2_LD2 Remote Script' 14 | 15 | def __init__(self, c_instance): 16 | LV2_LX2_LC2_LD2.realinit(self, c_instance) 17 | 18 | def realinit(self, c_instance): 19 | self.suffix = '2' 20 | FaderfoxScript.realinit(self, c_instance) 21 | self.mixer_controller = LV2MixerController(self) 22 | self.device_controller = LV2DeviceController(self) 23 | self.transport_controller = LV2TransportController(self) 24 | self.components = [self.mixer_controller, self.device_controller, self.transport_controller] 25 | 26 | def suggest_map_mode(self, cc_no, channel): 27 | return -1 -------------------------------------------------------------------------------- /LV2_LX2_LC2_LD2/Params.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV2_LX2_LC2_LD2\Params.py 2 | AUTO_FILTER_PARAMS = {'LFO Sync Rate': 'LFO Synced Rate'} 3 | AUTO_PAN_PARAMS = {'Sync Rate': 'Synced Rate'} 4 | BEAT_REPEAT_PARAMS = {'Decay': 'Damp Volume', 5 | 'Pitch Decay': 'Damp Pitch', 6 | 'Volume': 'Wet Level', 7 | 'Repeat': 'Instant Repeat'} 8 | EQ_FOUR_PARAMS = {'1 Filter On A': '1 Filter On', 9 | '1 Frequency A': '1 Frequency', 10 | '1 Gain A': '1 Gain', 11 | '1 Filter Type A': '1 Filter Type', 12 | '1 Resonance A': '1 Resonance', 13 | '2 Filter On A': '2 Filter On', 14 | '2 Frequency A': '2 Frequency', 15 | '2 Gain A': '2 Gain', 16 | '2 Filter Type A': '2 Filter Type', 17 | '2 Resonance A': '2 Resonance', 18 | '3 Filter On A': '3 Filter On', 19 | '3 Frequency A': '3 Frequency', 20 | '3 Gain A': '3 Gain', 21 | '3 Filter Type A': '3 Filter Type', 22 | '3 Resonance A': '3 Resonance', 23 | '4 Filter On A': '4 Filter On', 24 | '4 Frequency A': '4 Frequency', 25 | '4 Gain A': '4 Gain', 26 | '4 Filter Type A': '4 Filter Type', 27 | '4 Resonance A': '4 Resonance'} 28 | FLANGER_PARAMS = {'Frequency': 'LFO Frequency', 29 | 'Sync': 'LFO Sync', 30 | 'Sync Rate': 'LFO Synced Rate'} 31 | PHASER_PARAMS = {'Sync': 'LFO Sync', 32 | 'Sync Rate': 'LFO Synced Rate'} 33 | SATURATOR_PARAMS = {'Base': 'BaseDrive', 34 | 'Drive': 'PreDrive'} 35 | FIVETOSIX_PARAMS_DICT = {'AutoFilter': AUTO_FILTER_PARAMS, 36 | 'AutoPan': AUTO_PAN_PARAMS, 37 | 'BeatRepeat': BEAT_REPEAT_PARAMS, 38 | 'Eq8': EQ_FOUR_PARAMS, 39 | 'Flanger': FLANGER_PARAMS, 40 | 'Phaser': PHASER_PARAMS, 41 | 'Saturator': SATURATOR_PARAMS} -------------------------------------------------------------------------------- /LV2_LX2_LC2_LD2/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\LV2_LX2_LC2_LD2\__init__.py 2 | import Live 3 | from LV2_LX2_LC2_LD2 import LV2_LX2_LC2_LD2 4 | from FaderfoxScript import FaderfoxScript 5 | 6 | def create_instance(c_instance): 7 | return LV2_LX2_LC2_LD2(c_instance) -------------------------------------------------------------------------------- /Launch_Control/ButtonSysexControl.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\ButtonSysexControl.py 2 | from _Framework.SysexValueControl import SysexValueControl 3 | 4 | class ButtonSysexControl(SysexValueControl): 5 | """ 6 | A SysexValueControl that behaves like a button so it can be used as a mode button of 7 | the ModesComponent. 8 | """ 9 | 10 | def set_light(self, value): 11 | pass 12 | 13 | def is_momentary(self): 14 | return False -------------------------------------------------------------------------------- /Launch_Control/Colors.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\Colors.py 2 | LED_OFF = 4 3 | LED_ON = 15 4 | RED_FULL = 7 5 | RED_HALF = 6 6 | RED_THIRD = 5 7 | RED_BLINK = 11 8 | GREEN_FULL = 52 9 | GREEN_HALF = 36 10 | GREEN_THIRD = 20 11 | GREEN_BLINK = 56 12 | YELLOW_FULL = 62 13 | AMBER_FULL = RED_FULL + GREEN_FULL - 4 14 | AMBER_HALF = RED_HALF + GREEN_HALF - 4 15 | AMBER_THIRD = RED_THIRD + GREEN_THIRD - 4 16 | AMBER_BLINK = AMBER_FULL - 4 + 8 -------------------------------------------------------------------------------- /Launch_Control/ConfigurableButtonElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\ConfigurableButtonElement.py 2 | from Launchpad.ConfigurableButtonElement import ConfigurableButtonElement as LaunchpadButtonElement 3 | import Colors 4 | 5 | class ConfigurableButtonElement(LaunchpadButtonElement): 6 | 7 | def set_light(self, value): 8 | if value is Colors.LED_OFF: 9 | self.send_value(value) 10 | else: 11 | super(ConfigurableButtonElement, self).set_light(value) -------------------------------------------------------------------------------- /Launch_Control/SpecialSessionComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\SpecialSessionComponent.py 2 | from itertools import izip_longest 3 | from _Framework.SessionComponent import SessionComponent 4 | 5 | class SpecialSessionComponent(SessionComponent): 6 | 7 | def set_clip_launch_buttons(self, buttons): 8 | for i, button in izip_longest(xrange(self._num_tracks), buttons or []): 9 | scene = self.selected_scene() 10 | slot = scene.clip_slot(i) 11 | slot.set_launch_button(button) -------------------------------------------------------------------------------- /Launch_Control/Sysex.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\Sysex.py 2 | MODE_CHANGE_PREFIX = (240, 0, 32, 41, 2, 10, 119) 3 | MIXER_MODE = (240, 0, 32, 41, 2, 10, 119, 8, 247) 4 | SESSION_MODE = (240, 0, 32, 41, 2, 10, 119, 9, 247) 5 | DEVICE_MODE = (240, 0, 32, 41, 2, 10, 119, 10, 247) 6 | 7 | def make_automatic_flashing_message(channel): 8 | return (176 + channel, 0, 40) -------------------------------------------------------------------------------- /Launch_Control/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control\__init__.py 2 | from LaunchControl import LaunchControl 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[52], model_name='Launch Control'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[NOTES_CC, SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return LaunchControl(c_instance) -------------------------------------------------------------------------------- /Launch_Control_XL/ButtonElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control_XL\ButtonElement.py 2 | from _Framework.ButtonElement import ON_VALUE, OFF_VALUE, ButtonElement as ButtonElementBase 3 | 4 | class ButtonElement(ButtonElementBase): 5 | _on_value = None 6 | _off_value = None 7 | 8 | def reset(self): 9 | self._on_value = None 10 | self._off_value = None 11 | super(ButtonElement, self).reset() 12 | return 13 | 14 | def set_on_off_values(self, on_value, off_value): 15 | self._on_value = on_value 16 | self._off_value = off_value 17 | 18 | def send_value(self, value, **k): 19 | if value is ON_VALUE and self._on_value is not None: 20 | self._skin[self._on_value].draw(self) 21 | elif value is OFF_VALUE and self._off_value is not None: 22 | self._skin[self._off_value].draw(self) 23 | else: 24 | super(ButtonElement, self).send_value(value, **k) 25 | return -------------------------------------------------------------------------------- /Launch_Control_XL/SkinDefault.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control_XL\SkinDefault.py 2 | from _Framework.Skin import Skin 3 | from _Framework.ButtonElement import Color 4 | 5 | class Defaults: 6 | 7 | class DefaultButton: 8 | On = Color(127) 9 | Off = Color(0) 10 | Disabled = Color(0) 11 | 12 | 13 | class BiLedColors: 14 | 15 | class Mixer: 16 | SoloOn = Color(60) 17 | SoloOff = Color(28) 18 | MuteOn = Color(29) 19 | MuteOff = Color(47) 20 | ArmSelected = Color(15) 21 | ArmUnselected = Color(13) 22 | TrackSelected = Color(62) 23 | TrackUnselected = Color(29) 24 | NoTrack = Color(0) 25 | Sends = Color(47) 26 | Pans = Color(60) 27 | 28 | class Device: 29 | Parameters = Color(13) 30 | NoDevice = Color(0) 31 | BankSelected = Color(15) 32 | BankUnselected = Color(0) 33 | 34 | 35 | def make_default_skin(): 36 | return Skin(Defaults) 37 | 38 | 39 | def make_biled_skin(): 40 | return Skin(BiLedColors) -------------------------------------------------------------------------------- /Launch_Control_XL/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launch_Control_XL\__init__.py 2 | from LaunchControlXL import LaunchControlXL 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, AUTO_LOAD_KEY 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[97], model_name='Launch Control XL'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[NOTES_CC, SCRIPT])], 8 | AUTO_LOAD_KEY: True} 9 | 10 | 11 | def create_instance(c_instance): 12 | return LaunchControlXL(c_instance) -------------------------------------------------------------------------------- /Launchkey/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey\__init__.py 2 | from Launchkey import Launchkey 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[48], model_name='Launchkey 25'), 7 | PORTS_KEY: [inport(props=[NOTES_CC]), 8 | inport(props=[NOTES_CC, SCRIPT]), 9 | outport(props=[NOTES_CC]), 10 | outport(props=[NOTES_CC, SCRIPT])]} 11 | 12 | 13 | def create_instance(c_instance): 14 | return Launchkey(c_instance) -------------------------------------------------------------------------------- /Launchkey/consts.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey\consts.py 2 | SIZE_QUERY = (240, 126, 127, 6, 1, 247) 3 | SIZE_RESPONSE = (240, 126, 127, 6, 2, 0, 32, 41, 0, 25, 0) 4 | LIVE_MODE_ON = (144, 12, 127) 5 | LIVE_MODE_OFF = (144, 12, 0) 6 | PAD_TRANSLATIONS = ((0, 0, 48, 9), 7 | (1, 0, 49, 9), 8 | (2, 0, 50, 9), 9 | (3, 0, 51, 9), 10 | (0, 1, 44, 9), 11 | (1, 1, 45, 9), 12 | (2, 1, 46, 9), 13 | (3, 1, 47, 9), 14 | (0, 2, 40, 9), 15 | (1, 2, 41, 9), 16 | (2, 2, 42, 9), 17 | (3, 2, 43, 9), 18 | (0, 3, 36, 9), 19 | (1, 3, 37, 9), 20 | (2, 3, 38, 9), 21 | (3, 3, 39, 9)) 22 | LED_FLASHING_ON = (176, 0, 40) 23 | LED_FLASHING_OFF = (176, 0, 32) 24 | LED_OFF = 4 25 | RED_FULL = 15 26 | RED_BLINK = 11 27 | GREEN_FULL = 60 28 | GREEN_BLINK = 56 29 | AMBER_FULL = 63 30 | AMBER_HALF = 29 31 | AMBER_BLINK = 59 -------------------------------------------------------------------------------- /Launchkey_MK2/BackgroundComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\BackgroundComponent.py 2 | from _Framework.BackgroundComponent import BackgroundComponent as BackgroundComponentBase 3 | 4 | class BackgroundComponent(BackgroundComponentBase): 5 | 6 | def _clear_control(self, name, control): 7 | super(BackgroundComponent, self)._clear_control(name, control) 8 | if control: 9 | control.add_value_listener(self._on_value_listener) 10 | 11 | def _on_value_listener(self, *a, **k): 12 | pass -------------------------------------------------------------------------------- /Launchkey_MK2/ControlElementUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\ControlElementUtils.py 2 | from functools import partial 3 | import Live 4 | from _Framework.Dependency import depends 5 | from _Framework.Resource import PrioritizedResource 6 | from _Framework.InputControlElement import MIDI_CC_TYPE, MIDI_NOTE_TYPE 7 | from _Framework.ButtonMatrixElement import ButtonMatrixElement 8 | from _Framework.ButtonElement import ButtonElement 9 | from _Framework.EncoderElement import EncoderElement 10 | from _Framework.SliderElement import SliderElement 11 | from _Framework.ComboElement import ComboElement 12 | from .consts import STANDARD_CHANNEL 13 | 14 | @depends(skin=None) 15 | def make_button(identifier, msg_type = MIDI_NOTE_TYPE, is_momentary = True, skin = None, is_modifier = False, name = ''): 16 | return ButtonElement(is_momentary, msg_type, STANDARD_CHANNEL, identifier, skin=skin, name=name, resource_type=PrioritizedResource if is_modifier else None) 17 | 18 | 19 | def make_encoder(identifier, name = ''): 20 | return EncoderElement(MIDI_CC_TYPE, STANDARD_CHANNEL, identifier, Live.MidiMap.MapMode.absolute, name=name) 21 | 22 | 23 | def make_slider(identifier, name = '', channel = STANDARD_CHANNEL): 24 | return SliderElement(MIDI_CC_TYPE, channel, identifier, name=name) -------------------------------------------------------------------------------- /Launchkey_MK2/InControlStatusComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\InControlStatusComponent.py 2 | from _Framework.SubjectSlot import subject_slot 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | 5 | class InControlStatusComponent(ControlSurfaceComponent): 6 | 7 | def __init__(self, set_is_in_control_on, *a, **k): 8 | super(InControlStatusComponent, self).__init__(*a, **k) 9 | self._set_is_in_control_on = set_is_in_control_on 10 | 11 | def set_in_control_status_button(self, button): 12 | self._on_in_control_value.subject = button 13 | 14 | @subject_slot('value') 15 | def _on_in_control_value(self, value): 16 | self._set_is_in_control_on(value >= 8) -------------------------------------------------------------------------------- /Launchkey_MK2/MixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\MixerComponent.py 2 | from _Framework.MixerComponent import MixerComponent as MixerComponentBase 3 | 4 | class MixerComponent(MixerComponentBase): 5 | 6 | def set_volume_control(self, control): 7 | self._selected_strip.set_volume_control(control) -------------------------------------------------------------------------------- /Launchkey_MK2/Skin.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\Skin.py 2 | from _Framework.Skin import Skin 3 | from .Colors import Rgb 4 | 5 | class Colors: 6 | 7 | class Session: 8 | SceneTriggered = Rgb.GREEN_BLINK 9 | NoScene = Rgb.BLACK 10 | ClipStarted = Rgb.GREEN_PULSE 11 | ClipRecording = Rgb.RED_PULSE 12 | ClipTriggeredPlay = Rgb.GREEN_BLINK 13 | ClipTriggeredRecord = Rgb.RED_BLINK 14 | ClipEmpty = Rgb.BLACK 15 | RecordButton = Rgb.RED_HALF 16 | StopClip = Rgb.GREEN 17 | StopClipTriggered = Rgb.GREEN_BLINK 18 | StoppedClip = Rgb.GREEN_HALF 19 | Enabled = Rgb.YELLOW 20 | 21 | class Mode: 22 | DeviceMode = Rgb.PURPLE_HALF 23 | DeviceModeOn = Rgb.PURPLE 24 | PanMode = Rgb.ORANGE_HALF 25 | PanModeOn = Rgb.ORANGE 26 | Send0Mode = Rgb.DARK_BLUE_HALF 27 | Send0ModeOn = Rgb.BRIGHT_PURPLE 28 | Send1Mode = Rgb.BLUE_HALF 29 | Send1ModeOn = Rgb.BLUE 30 | Send2Mode = Rgb.LIGHT_BLUE_HALF 31 | Send2ModeOn = Rgb.LIGHT_BLUE 32 | Send3Mode = Rgb.MINT_HALF 33 | Send3ModeOn = Rgb.MINT 34 | Send4Mode = Rgb.DARK_YELLOW_HALF 35 | Send4ModeOn = Rgb.DARK_YELLOW 36 | Send5Mode = Rgb.YELLOW_HALF 37 | Send5ModeOn = Rgb.YELLOW 38 | Disabled = Rgb.BLACK 39 | 40 | class Device: 41 | Bank = Rgb.DARK_PURPLE 42 | BestOfBank = Rgb.PURPLE_HALF 43 | BankSelected = Rgb.PURPLE 44 | 45 | 46 | def make_skin(): 47 | return Skin(Colors) -------------------------------------------------------------------------------- /Launchkey_MK2/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .Launchkey_MK2 import Launchkey_MK2 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=4661, product_ids=[31610, 7 | 31866, 8 | 32122, 9 | 123, 10 | 124, 11 | 125], model_name=['Launchkey MK2 25', 'Launchkey MK2 49', 'Launchkey MK2 61']), 12 | caps.PORTS_KEY: [caps.inport(props=[]), 13 | caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), 14 | caps.outport(props=[]), 15 | caps.outport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE])]} 16 | 17 | 18 | def create_instance(c_instance): 19 | return Launchkey_MK2(c_instance) -------------------------------------------------------------------------------- /Launchkey_MK2/consts.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_MK2\consts.py 2 | PRODUCT_ID_BYTE_PREFIX = (0, 32, 41) 3 | LAUNCHKEY_25_ID_BYTE = 123 4 | LAUNCHKEY_49_ID_BYTE = 124 5 | LAUNCHKEY_61_ID_BYTE = 125 6 | PRODUCT_ID_BYTES = (LAUNCHKEY_25_ID_BYTE, LAUNCHKEY_49_ID_BYTE, LAUNCHKEY_61_ID_BYTE) 7 | IDENTITY_REQUEST = (240, 126, 127, 6, 1, 247) 8 | IN_CONTROL_QUERY = (159, 11, 0) 9 | DRUM_IN_CONTROL_ON_MESSAGE = (159, 15, 127) 10 | DRUM_IN_CONTROL_OFF_MESSAGE = (159, 15, 0) 11 | STANDARD_CHANNEL = 15 12 | PULSE_LED_CHANNEL = 2 13 | BLINK_LED_CHANNEL = 1 14 | MAX_SENDS = 6 -------------------------------------------------------------------------------- /Launchkey_Mini/LaunchkeyMini.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_Mini\LaunchkeyMini.py 2 | from Launchkey.Launchkey import Launchkey, LaunchkeyControlFactory, make_button 3 | 4 | class LaunchkeyMiniControlFactory(LaunchkeyControlFactory): 5 | 6 | def create_next_track_button(self): 7 | return make_button(107, 'Next_Track_Button') 8 | 9 | def create_prev_track_button(self): 10 | return make_button(106, 'Prev_Track_Button') 11 | 12 | 13 | class LaunchkeyMini(Launchkey): 14 | """ Script for Novation's Launchkey Mini keyboard """ 15 | 16 | def __init__(self, c_instance): 17 | super(LaunchkeyMini, self).__init__(c_instance, control_factory=LaunchkeyMiniControlFactory(), identity_response=(240, 126, 127, 6, 2, 0, 32, 41, 53, 0, 0)) 18 | self._suggested_input_port = 'LK Mini InControl' 19 | self._suggested_output_port = 'LK Mini InControl' 20 | 21 | def _setup_navigation(self): 22 | super(LaunchkeyMini, self)._setup_navigation() 23 | self._next_scene_button = make_button(105, 'Next_Scene_Button') 24 | self._prev_scene_button = make_button(104, 'Prev_Scene_Button') 25 | self._session_navigation.set_next_scene_button(self._next_scene_button) 26 | self._session_navigation.set_prev_scene_button(self._prev_scene_button) 27 | 28 | def _setup_transport(self): 29 | pass -------------------------------------------------------------------------------- /Launchkey_Mini/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchkey_Mini\__init__.py 2 | from LaunchkeyMini import LaunchkeyMini 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[53], model_name='Launchkey Mini'), 7 | PORTS_KEY: [inport(props=[NOTES_CC]), 8 | inport(props=[SCRIPT]), 9 | outport(props=[NOTES_CC]), 10 | outport(props=[SCRIPT])]} 11 | 12 | 13 | def create_instance(c_instance): 14 | return LaunchkeyMini(c_instance) -------------------------------------------------------------------------------- /Launchpad/SpecialSessionComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad\SpecialSessionComponent.py 2 | from _Framework.SessionComponent import SessionComponent 3 | 4 | class SpecialSessionComponent(SessionComponent): 5 | """ Special session subclass that handles ConfigurableButtons """ 6 | 7 | def _update_stop_clips_led(self, index): 8 | if self.is_enabled() and self._stop_track_clip_buttons != None and index < len(self._stop_track_clip_buttons): 9 | button = self._stop_track_clip_buttons[index] 10 | tracks_to_use = self.tracks_to_use() 11 | track_index = index + self.track_offset() 12 | if 0 <= track_index < len(tracks_to_use): 13 | track = tracks_to_use[track_index] 14 | if track.fired_slot_index == -2: 15 | button.send_value(self._stop_clip_triggered_value) 16 | elif track.playing_slot_index >= 0: 17 | button.send_value(self._stop_clip_value) 18 | else: 19 | button.turn_off() 20 | else: 21 | button.send_value(4) 22 | return -------------------------------------------------------------------------------- /Launchpad/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad\__init__.py 2 | from Launchpad import Launchpad 3 | 4 | def create_instance(c_instance): 5 | """ Creates and returns the Launchpad script """ 6 | return Launchpad(c_instance) 7 | 8 | 9 | from _Framework.Capabilities import * 10 | 11 | def get_capabilities(): 12 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[14], model_name='Launchpad'), 13 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), outport(props=[NOTES_CC, REMOTE, SCRIPT])]} -------------------------------------------------------------------------------- /Launchpad_MK2/BackgroundComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_MK2\BackgroundComponent.py 2 | from _Framework.BackgroundComponent import BackgroundComponent as BackgroundComponentBase 3 | 4 | class BackgroundComponent(BackgroundComponentBase): 5 | 6 | def _clear_control(self, name, control): 7 | if control: 8 | control.add_value_listener(self._on_value_listener) 9 | super(BackgroundComponent, self)._clear_control(name, control) 10 | 11 | def _on_value_listener(self, *a, **k): 12 | pass 13 | 14 | 15 | class TranslatingBackgroundComponent(BackgroundComponent): 16 | 17 | def __init__(self, translation_channel = 0, *a, **k): 18 | super(TranslatingBackgroundComponent, self).__init__(*a, **k) 19 | self._translation_channel = translation_channel 20 | 21 | def _clear_control(self, name, control): 22 | if control: 23 | control.set_channel(self._translation_channel) 24 | super(TranslatingBackgroundComponent, self)._clear_control(name, control) -------------------------------------------------------------------------------- /Launchpad_MK2/ComponentUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_MK2\ComponentUtils.py 2 | 3 | 4 | def skin_scroll_component(component): 5 | for button in (component.scroll_up_button, component.scroll_down_button): 6 | button.color = 'Scrolling.Enabled' 7 | button.pressed_color = 'Scrolling.Pressed' 8 | button.disabled_color = 'Scrolling.Disabled' -------------------------------------------------------------------------------- /Launchpad_MK2/SessionZoomingComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_MK2\SessionZoomingComponent.py 2 | from _Framework.SessionZoomingComponent import SessionZoomingComponent as SessionZoomingComponentBase 3 | from .ComponentUtils import skin_scroll_component 4 | from _Framework.SessionComponent import SessionComponent 5 | 6 | class SessionZoomingComponent(SessionZoomingComponentBase): 7 | 8 | def _enable_skinning(self): 9 | super(SessionZoomingComponent, self)._enable_skinning() 10 | map(skin_scroll_component, (self._horizontal_scroll, self._vertical_scroll)) 11 | 12 | def register_component(self, component): 13 | raise component != None or AssertionError 14 | raise component not in self._sub_components or AssertionError 15 | self._sub_components.append(component) 16 | return component 17 | 18 | def on_enabled_changed(self): 19 | self.update() 20 | 21 | def set_enabled(self, enable): 22 | self._explicit_is_enabled = bool(enable) 23 | self._update_is_enabled() 24 | for component in self._sub_components: 25 | if not isinstance(component, SessionComponent): 26 | component._set_enabled_recursive(self.is_enabled()) -------------------------------------------------------------------------------- /Launchpad_MK2/consts.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_MK2\consts.py 2 | PRODUCT_ID_BYTES = (0, 32, 41, 105, 0, 0, 0) 3 | IDENTITY_REQUEST = (240, 126, 127, 6, 1, 247) 4 | STANDARD_SYSEX_PREFIX = (240, 0, 32, 41, 2, 24) 5 | CHALLENGE_RESPONSE_BYTE = (64,) 6 | LAYOUT_CHANGE_BYTE = (34,) 7 | FADER_SETUP_BYTE = (43,) 8 | QUIT_MESSAGE = (240, 0, 32, 41, 2, 24, 64, 247) 9 | BLINK_LED_CHANNEL = 1 10 | PULSE_LED_CHANNEL = 2 11 | USER_MODE_CHANNELS = (5, 6, 7, 13, 14, 15) 12 | VOLUME_MODE_CHANNEL = 3 13 | PAN_MODE_CHANNEL = 4 14 | SEND_A_MODE_CHANNEL = 8 15 | SEND_B_MODE_CHANNEL = 9 16 | FADER_STANDARD_TYPE = 0 17 | FADER_BIPOLAR_TYPE = 1 18 | SESSION_WIDTH = 8 -------------------------------------------------------------------------------- /Launchpad_Pro/DeviceNavigationComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\DeviceNavigationComponent.py 2 | import Live 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | from _Framework.Control import ButtonControl 5 | NavDirection = Live.Application.Application.View.NavDirection 6 | 7 | class DeviceNavigationComponent(ControlSurfaceComponent): 8 | device_nav_left_button = ButtonControl(color='Device.Off', pressed_color='Device.On') 9 | device_nav_right_button = ButtonControl(color='Device.Off', pressed_color='Device.On') 10 | 11 | @device_nav_left_button.pressed 12 | def device_nav_left_button(self, value): 13 | self._scroll_device_chain(NavDirection.left) 14 | 15 | @device_nav_right_button.pressed 16 | def device_nav_right_button(self, value): 17 | self._scroll_device_chain(NavDirection.right) 18 | 19 | def _scroll_device_chain(self, direction): 20 | view = self.application().view 21 | if not view.is_view_visible('Detail') or not view.is_view_visible('Detail/DeviceChain'): 22 | view.show_view('Detail') 23 | view.show_view('Detail/DeviceChain') 24 | else: 25 | view.scroll_view(direction, 'Detail/DeviceChain', False) -------------------------------------------------------------------------------- /Launchpad_Pro/LedLightingComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\LedLightingComponent.py 2 | from _Framework.Control import ButtonControl 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | 5 | class LedLightingComponent(ControlSurfaceComponent): 6 | button = ButtonControl(color='Misc.Shift', pressed_color='Misc.ShiftOn') -------------------------------------------------------------------------------- /Launchpad_Pro/SpecialDeviceComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\SpecialDeviceComponent.py 2 | from _Framework.DeviceComponent import DeviceComponent 3 | from .consts import FADER_TYPE_STANDARD, DEVICE_MAP_CHANNEL 4 | 5 | class SpecialDeviceComponent(DeviceComponent): 6 | 7 | def set_parameter_controls(self, controls): 8 | if controls: 9 | for control in controls: 10 | control.set_channel(DEVICE_MAP_CHANNEL) 11 | control.set_light_and_type('Device.On', FADER_TYPE_STANDARD) 12 | 13 | super(SpecialDeviceComponent, self).set_parameter_controls(controls) 14 | 15 | def _update_parameter_controls(self): 16 | if self._parameter_controls is not None: 17 | for control in self._parameter_controls: 18 | control.update() 19 | 20 | return 21 | 22 | def update(self): 23 | super(SpecialDeviceComponent, self).update() 24 | if self.is_enabled(): 25 | self._update_parameter_controls() -------------------------------------------------------------------------------- /Launchpad_Pro/TranslationComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\TranslationComponent.py 2 | from functools import partial 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | 5 | class TranslationComponent(ControlSurfaceComponent): 6 | """ 7 | Simple component that translates the MIDI channel of a one or more groups 8 | of buttons and will also enable/disable the buttons. 9 | """ 10 | 11 | def __init__(self, translated_channel, should_enable = True, should_reset = True, *a, **k): 12 | raise translated_channel in range(16) or AssertionError 13 | self._translated_channel = translated_channel 14 | self._should_enable = bool(should_enable) 15 | self._should_reset = should_reset 16 | super(TranslationComponent, self).__init__(*a, **k) 17 | 18 | def __getattr__(self, name): 19 | if len(name) > 4 and name[:4] == 'set_': 20 | return partial(self._set_control_elements, name[4:]) 21 | raise AttributeError(name) 22 | 23 | def _set_control_elements(self, name, control_elements): 24 | if bool(control_elements): 25 | buttons = control_elements 26 | for button in buttons: 27 | if button: 28 | if self._should_reset: 29 | button.reset() 30 | else: 31 | button.reset_state() 32 | button.set_enabled(self._should_enable) 33 | button.set_channel(self._translated_channel) -------------------------------------------------------------------------------- /Launchpad_Pro/UserMatrixComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\UserMatrixComponent.py 2 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 3 | 4 | def _disable_control(control): 5 | for button in control: 6 | button.set_enabled(False) 7 | 8 | 9 | class UserMatrixComponent(ControlSurfaceComponent): 10 | """ 11 | "Component" that expects ButtonMatrixElements that hold 12 | ConfigurableButtonElements, to then turn them off. This 13 | is done so the buttons' messages can be forwarded to Live's Tracks. 14 | """ 15 | 16 | def __getattr__(self, name): 17 | if len(name) > 4 and name[:4] == 'set_': 18 | return _disable_control 19 | raise AttributeError(name) -------------------------------------------------------------------------------- /Launchpad_Pro/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Launchpad_Pro\__init__.py 2 | from _Framework.Capabilities import CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, SYNC, REMOTE, controller_id, inport, outport 3 | from Launchpad_Pro import Launchpad_Pro 4 | 5 | def create_instance(c_instance): 6 | return Launchpad_Pro(c_instance) 7 | 8 | 9 | def get_capabilities(): 10 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[81], model_name='Launchpad Pro'), 11 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), 12 | inport(props=[]), 13 | outport(props=[NOTES_CC, 14 | SYNC, 15 | SCRIPT, 16 | REMOTE]), 17 | outport(props=[])]} -------------------------------------------------------------------------------- /MIDI_Mix/ControlElementUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MIDI_Mix\ControlElementUtils.py 2 | import Live 3 | from _Framework.Dependency import depends 4 | from _Framework.InputControlElement import MIDI_CC_TYPE, MIDI_NOTE_TYPE 5 | from _Framework.ButtonMatrixElement import ButtonMatrixElement 6 | from _Framework.ButtonElement import ButtonElement 7 | from _Framework.SliderElement import SliderElement 8 | from _Framework.EncoderElement import EncoderElement 9 | 10 | @depends(skin=None) 11 | def make_button(identifier, name, skin = None): 12 | return ButtonElement(True, MIDI_NOTE_TYPE, 0, identifier, name=name, skin=skin) 13 | 14 | 15 | def make_slider(identifier, name): 16 | return SliderElement(MIDI_CC_TYPE, 0, identifier, name=name) 17 | 18 | 19 | def make_encoder(identifier, name): 20 | return EncoderElement(MIDI_CC_TYPE, 0, identifier, map_mode=Live.MidiMap.MapMode.absolute, name=name) 21 | 22 | 23 | def make_button_row(identifier_sequence, element_factory, name): 24 | return ButtonMatrixElement(rows=[ [element_factory(identifier, name + '_%d' % index)] for index, identifier in enumerate(identifier_sequence) ]) -------------------------------------------------------------------------------- /MIDI_Mix/MixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MIDI_Mix\MixerComponent.py 2 | from _Framework.Control import ButtonControl 3 | from _APC.MixerComponent import MixerComponent as MixerComponentBase 4 | 5 | class MixerComponent(MixerComponentBase): 6 | bank_up_button = ButtonControl(color='DefaultButton.Off', pressed_color='DefaultButton.On') 7 | bank_down_button = ButtonControl(color='DefaultButton.Off', pressed_color='DefaultButton.On') 8 | 9 | def __init__(self, *a, **k): 10 | super(MixerComponent, self).__init__(*a, **k) 11 | 12 | def set_send_controls(self, controls): 13 | self._send_controls = controls 14 | if controls: 15 | for index, strip in enumerate(self._channel_strips): 16 | strip.set_send_controls((controls.get_button(index, 0), controls.get_button(index, 1))) 17 | 18 | @bank_up_button.pressed 19 | def bank_up_button(self, button): 20 | new_offset = self._track_offset + len(self._channel_strips) 21 | if len(self.tracks_to_use()) > new_offset: 22 | self.set_track_offset(new_offset) 23 | 24 | @bank_down_button.pressed 25 | def bank_down_button(self, button): 26 | self.set_track_offset(max(0, self._track_offset - len(self._channel_strips))) -------------------------------------------------------------------------------- /MIDI_Mix/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MIDI_Mix\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .MIDI_Mix import MIDI_Mix 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=2536, product_ids=[49], model_name='MIDI Mix'), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT]), caps.outport(props=[caps.NOTES_CC, caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MIDI_Mix(c_instance) -------------------------------------------------------------------------------- /MPD18/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD18\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /MPD218/MPD218.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD218\MPD218.py 2 | from _MPDMkIIBase.MPDMkIIBase import MPDMkIIBase 3 | PAD_CHANNEL = 9 4 | PAD_IDS = [[48, 5 | 49, 6 | 50, 7 | 51], 8 | [44, 9 | 45, 10 | 46, 11 | 47], 12 | [40, 13 | 41, 14 | 42, 15 | 43], 16 | [36, 17 | 37, 18 | 38, 19 | 39]] 20 | 21 | class MPD218(MPDMkIIBase): 22 | 23 | def __init__(self, *a, **k): 24 | super(MPD218, self).__init__(PAD_IDS, PAD_CHANNEL, *a, **k) -------------------------------------------------------------------------------- /MPD218/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD218\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .MPD218 import MPD218 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=2536, product_ids=[52], model_name='MPD218'), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPD218(c_instance) -------------------------------------------------------------------------------- /MPD226/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD226\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .MPD226 import MPD226 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=2536, product_ids=[53], model_name='MPD226'), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPD226(c_instance) -------------------------------------------------------------------------------- /MPD232/MPD232.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD232\MPD232.py 2 | from __future__ import with_statement 3 | from _Framework.ButtonMatrixElement import ButtonMatrixElement 4 | from _MPDMkIIBase.MPDMkIIBase import MPDMkIIBase 5 | from _MPDMkIIBase.ControlElementUtils import make_button, make_encoder, make_slider 6 | PAD_CHANNEL = 1 7 | PAD_IDS = [[81, 8 | 83, 9 | 84, 10 | 86], 11 | [74, 12 | 76, 13 | 77, 14 | 79], 15 | [67, 16 | 69, 17 | 71, 18 | 72], 19 | [60, 20 | 62, 21 | 64, 22 | 65]] 23 | 24 | class MPD232(MPDMkIIBase): 25 | 26 | def __init__(self, *a, **k): 27 | super(MPD232, self).__init__(PAD_IDS, PAD_CHANNEL, *a, **k) 28 | with self.component_guard(): 29 | self._create_device() 30 | self._create_transport() 31 | self._create_mixer() 32 | 33 | def _create_controls(self): 34 | self._create_pads() 35 | self._encoders = ButtonMatrixElement(rows=[[ make_encoder(identifier, 0, 'Encoder_%d' % index) for index, identifier in enumerate(xrange(22, 30)) ]]) 36 | self._sliders = ButtonMatrixElement(rows=[[ make_slider(identifier, 0, 'Slider_%d' % index) for index, identifier in enumerate(xrange(12, 20)) ]]) 37 | self._control_buttons = ButtonMatrixElement(rows=[[ make_button(identifier, 0, 'Control_Button_%d' % index) for index, identifier in enumerate(xrange(32, 40)) ]]) 38 | self._play_button = make_button(118, 0, 'Play_Button') 39 | self._stop_button = make_button(117, 0, 'Stop_Button') 40 | self._record_button = make_button(119, 0, 'Record_Button') -------------------------------------------------------------------------------- /MPD232/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD232\__init__.py 2 | import _Framework.Capabilities as caps 3 | from .MPD232 import MPD232 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=2536, product_ids=[54], model_name='MPD232'), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPD232(c_instance) -------------------------------------------------------------------------------- /MPD24/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD24\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[104], model_name='Akai MPD24'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), 16 | inport(props=[NOTES_CC]), 17 | inport(props=[NOTES_CC]), 18 | outport(props=[SCRIPT]), 19 | outport(props=[])]} -------------------------------------------------------------------------------- /MPD32/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/MPD32/Preset.syx -------------------------------------------------------------------------------- /MPD32/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPD32\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[108], model_name='Akai MPD32'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), 16 | inport(props=[NOTES_CC]), 17 | inport(props=[NOTES_CC]), 18 | outport(props=[SCRIPT]), 19 | outport(props=[])]} -------------------------------------------------------------------------------- /MPK225/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK225\__init__.py 2 | from .MPK225 import MPK225 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[35], model_name='MPK225'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPK225(c_instance) -------------------------------------------------------------------------------- /MPK249/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK249\__init__.py 2 | from .MPK249 import MPK249 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[36], model_name='MPK249'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPK249(c_instance) -------------------------------------------------------------------------------- /MPK25/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/MPK25/Preset.syx -------------------------------------------------------------------------------- /MPK25/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK25\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[114], model_name='Akai MPK25'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), 16 | inport(props=[NOTES_CC]), 17 | inport(props=[NOTES_CC]), 18 | outport(props=[SYNC, SCRIPT]), 19 | outport(props=[])]} -------------------------------------------------------------------------------- /MPK261/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK261\__init__.py 2 | from .MPK261 import MPK261 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[37], model_name='MPK261'), 7 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT, REMOTE]), outport(props=[SCRIPT, REMOTE])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MPK261(c_instance) -------------------------------------------------------------------------------- /MPK49/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/MPK49/Preset.syx -------------------------------------------------------------------------------- /MPK49/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK49\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[107], model_name='Akai MPK49'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), 16 | inport(props=[NOTES_CC]), 17 | inport(props=[PLAIN_OLD_MIDI]), 18 | outport(props=[SYNC, SCRIPT]), 19 | outport(props=[PLAIN_OLD_MIDI])]} -------------------------------------------------------------------------------- /MPK61/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/MPK61/Preset.syx -------------------------------------------------------------------------------- /MPK61/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK61\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /MPK88/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/MPK88/Preset.syx -------------------------------------------------------------------------------- /MPK88/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK88\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /MPK_mini/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK_mini\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[124], model_name='MPK mini'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /MPK_mini/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MPK_mini\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': -1, 4 | 'PLAY': -1, 5 | 'REC': -1, 6 | 'LOOP': -1, 7 | 'RWD': -1, 8 | 'FFWD': -1} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = ((-1, -1), 18 | (-1, -1), 19 | (-1, -1), 20 | (-1, -1), 21 | (-1, -1), 22 | (-1, -1), 23 | (-1, -1), 24 | (-1, -1)) 25 | TRACKARM_CONTROLS = (-1, -1, -1, -1, -1, -1, -1, -1) 26 | BANK_CONTROLS = {'TOGGLELOCK': -1, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | PAD_TRANSLATION = ((0, 0, 36, 0), 39 | (1, 0, 37, 0), 40 | (2, 0, 38, 0), 41 | (3, 0, 39, 0), 42 | (0, 1, 32, 0), 43 | (1, 1, 33, 0), 44 | (2, 1, 34, 0), 45 | (3, 1, 35, 0), 46 | (0, 2, 48, 0), 47 | (1, 2, 49, 0), 48 | (2, 2, 50, 0), 49 | (3, 2, 51, 0), 50 | (0, 3, 44, 0), 51 | (1, 3, 45, 0), 52 | (2, 3, 46, 0), 53 | (3, 3, 47, 0)) 54 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'MPK mini', 55 | 'OUTPUTPORT': 'MPK mini', 56 | 'CHANNEL': -1, 57 | 'PAD_TRANSLATION': PAD_TRANSLATION} 58 | MIXER_OPTIONS = {'NUMSENDS': 2, 59 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 60 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 61 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /MackieControl/MackieControlComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MackieControl\MackieControlComponent.py 2 | from consts import * 3 | import Live 4 | 5 | class MackieControlComponent: 6 | """Baseclass for every 'sub component' of the Mackie Control. Just offers some """ 7 | 8 | def __init__(self, main_script): 9 | self.__main_script = main_script 10 | 11 | def destroy(self): 12 | self.__main_script = None 13 | return 14 | 15 | def main_script(self): 16 | return self.__main_script 17 | 18 | def shift_is_pressed(self): 19 | return self.__main_script.shift_is_pressed() 20 | 21 | def option_is_pressed(self): 22 | return self.__main_script.option_is_pressed() 23 | 24 | def control_is_pressed(self): 25 | return self.__main_script.control_is_pressed() 26 | 27 | def alt_is_pressed(self): 28 | return self.__main_script.alt_is_pressed() 29 | 30 | def song(self): 31 | return self.__main_script.song() 32 | 33 | def script_handle(self): 34 | return self.__main_script.handle() 35 | 36 | def application(self): 37 | return self.__main_script.application() 38 | 39 | def send_midi(self, bytes): 40 | self.__main_script.send_midi(bytes) 41 | 42 | def request_rebuild_midi_map(self): 43 | self.__main_script.request_rebuild_midi_map() -------------------------------------------------------------------------------- /MackieControl/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MackieControl\__init__.py 2 | from MackieControl import MackieControl 3 | 4 | def create_instance(c_instance): 5 | return MackieControl(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2675, product_ids=[6], model_name='MCU Pro USB v3.1'), 12 | PORTS_KEY: [inport(props=[SCRIPT, REMOTE]), 13 | inport(props=[]), 14 | inport(props=[]), 15 | inport(props=[]), 16 | outport(props=[SCRIPT, REMOTE]), 17 | outport(props=[]), 18 | outport(props=[]), 19 | outport(props=[])]} -------------------------------------------------------------------------------- /MackieControlXT/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MackieControlXT\__init__.py 2 | from MackieControlXT import MackieControlXT 3 | 4 | def create_instance(c_instance): 5 | return MackieControlXT(c_instance) -------------------------------------------------------------------------------- /MackieControl_Classic/MackieControlComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MackieControl_Classic\MackieControlComponent.py 2 | from consts import * 3 | import Live 4 | 5 | class MackieControlComponent: 6 | """Baseclass for every 'sub component' of the Mackie Control. Just offers some """ 7 | 8 | def __init__(self, main_script): 9 | self.__main_script = main_script 10 | 11 | def destroy(self): 12 | self.__main_script = None 13 | return 14 | 15 | def main_script(self): 16 | return self.__main_script 17 | 18 | def shift_is_pressed(self): 19 | return self.__main_script.shift_is_pressed() 20 | 21 | def option_is_pressed(self): 22 | return self.__main_script.option_is_pressed() 23 | 24 | def control_is_pressed(self): 25 | return self.__main_script.control_is_pressed() 26 | 27 | def alt_is_pressed(self): 28 | return self.__main_script.alt_is_pressed() 29 | 30 | def song(self): 31 | return self.__main_script.song() 32 | 33 | def script_handle(self): 34 | return self.__main_script.handle() 35 | 36 | def application(self): 37 | return self.__main_script.application() 38 | 39 | def send_midi(self, bytes): 40 | self.__main_script.send_midi(bytes) 41 | 42 | def request_rebuild_midi_map(self): 43 | self.__main_script.request_rebuild_midi_map() -------------------------------------------------------------------------------- /MackieControl_Classic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MackieControl_Classic\__init__.py 2 | from MackieControl import MackieControl 3 | 4 | def create_instance(c_instance): 5 | return MackieControl(c_instance) -------------------------------------------------------------------------------- /MasterControl/MasterControl.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MasterControl\MasterControl.py 2 | from MackieControl.MackieControl import MackieControl 3 | 4 | class MasterControl(MackieControl): 5 | """ Main class derived from MackieControl """ 6 | 7 | def __init__(self, c_instance): 8 | MackieControl.__init__(self, c_instance) -------------------------------------------------------------------------------- /MasterControl/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MasterControl\__init__.py 2 | from MasterControl import MasterControl 3 | 4 | def create_instance(c_instance): 5 | return MasterControl(c_instance) -------------------------------------------------------------------------------- /MidAir25/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MidAir25\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION) -------------------------------------------------------------------------------- /MidAir25/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MidAir25\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'MidAir', 39 | 'OUTPUTPORT': 'MidAir', 40 | 'CHANNEL': 0} -------------------------------------------------------------------------------- /MiniLab/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\MiniLab\__init__.py 2 | from .MiniLab import MiniLab 3 | import _Framework.Capabilities as caps 4 | 5 | def get_capabilities(): 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=7285, product_ids=[516], model_name=['Arturia MINILAB']), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.NOTES_CC, caps.SCRIPT, caps.REMOTE]), caps.outport(props=[caps.SCRIPT])]} 8 | 9 | 10 | def create_instance(c_instance): 11 | return MiniLab(c_instance) -------------------------------------------------------------------------------- /Novation_Impulse/PeekableEncoderElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Novation_Impulse\PeekableEncoderElement.py 2 | import Live 3 | from _Framework.EncoderElement import EncoderElement 4 | from _Framework.InputControlElement import * 5 | 6 | class PeekableEncoderElement(EncoderElement): 7 | """ Encoder that can be connected and disconnected to a specific parameter """ 8 | 9 | def __init__(self, msg_type, channel, identifier, map_mode): 10 | EncoderElement.__init__(self, msg_type, channel, identifier, map_mode) 11 | self._peek_mode = False 12 | 13 | def set_peek_mode(self, peek_mode): 14 | if not isinstance(peek_mode, type(False)): 15 | raise AssertionError 16 | self._peek_mode = self._peek_mode != peek_mode and peek_mode 17 | self._request_rebuild() 18 | 19 | def get_peek_mode(self): 20 | return self._peek_mode 21 | 22 | def install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback): 23 | current_parameter = self._parameter_to_map_to 24 | if self._peek_mode: 25 | self._parameter_to_map_to = None 26 | InputControlElement.install_connections(self, install_translation_callback, install_mapping_callback, install_forwarding_callback) 27 | self._parameter_to_map_to = current_parameter 28 | return -------------------------------------------------------------------------------- /Novation_Impulse/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Novation_Impulse\__init__.py 2 | from Novation_Impulse import Novation_Impulse 3 | 4 | def create_instance(c_instance): 5 | return Novation_Impulse(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[25], model_name='Impulse 25'), 12 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE, SCRIPT]), inport(props=[NOTES_CC, REMOTE]), outport(props=[NOTES_CC, REMOTE, SCRIPT])]} -------------------------------------------------------------------------------- /O2/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\O2\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /O2/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\O2\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'USB O2', 39 | 'OUTPUTPORT': 'USB O2', 40 | 'CHANNEL': 0} 41 | MIXER_OPTIONS = {'NUMSENDS': 2, 42 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 43 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 44 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /OpenLabs/SpecialDeviceComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\OpenLabs\SpecialDeviceComponent.py 2 | import Live 3 | from _Framework.DeviceComponent import DeviceComponent 4 | 5 | class SpecialDeviceComponent(DeviceComponent): 6 | 7 | def __init__(self): 8 | DeviceComponent.__init__(self) 9 | 10 | def _device_parameters_to_map(self): 11 | raise self.is_enabled() or AssertionError 12 | raise self._device != None or AssertionError 13 | raise self._parameter_controls != None or AssertionError 14 | return self._device.parameters[1:] -------------------------------------------------------------------------------- /OpenLabs/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\OpenLabs\__init__.py 2 | import Live 3 | from OpenLabs import OpenLabs 4 | 5 | def create_instance(c_instance): 6 | """ Creates and returns the OpenLabs script """ 7 | return OpenLabs(c_instance) -------------------------------------------------------------------------------- /Oxygen49_61/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen49_61\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /Oxygen49_61/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen49_61\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC5, 10 | GENERIC_ENC6, 11 | GENERIC_ENC7, 12 | GENERIC_ENC8, 13 | GENERIC_ENC1, 14 | GENERIC_ENC2, 15 | GENERIC_ENC3, 16 | GENERIC_ENC4) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'USB Oxygen', 39 | 'OUTPUTPORT': 'USB Oxygen', 40 | 'CHANNEL': 0} 41 | MIXER_OPTIONS = {'NUMSENDS': 2, 42 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 43 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 44 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /Oxygen8/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen8\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[4117], model_name='Keystation'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /Oxygen8/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen8\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'Keystation (Port 1)', 39 | 'OUTPUTPORT': 'Keystation (Port 1)', 40 | 'CHANNEL': 0} 41 | MIXER_OPTIONS = {'NUMSENDS': 2, 42 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 43 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 44 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /Oxygen8v2/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen8v2\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /Oxygen8v2/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen8v2\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD, 9 | 'NORELEASE': 0} 10 | DEVICE_CONTROLS = (GENERIC_ENC1, 11 | GENERIC_ENC2, 12 | GENERIC_ENC3, 13 | GENERIC_ENC4, 14 | GENERIC_ENC5, 15 | GENERIC_ENC6, 16 | GENERIC_ENC7, 17 | GENERIC_ENC8) 18 | VOLUME_CONTROLS = GENERIC_SLIDERS 19 | TRACKARM_CONTROLS = (GENERIC_BUT1, 20 | GENERIC_BUT2, 21 | GENERIC_BUT3, 22 | GENERIC_BUT4, 23 | GENERIC_BUT5, 24 | GENERIC_BUT6, 25 | GENERIC_BUT7, 26 | GENERIC_BUT8) 27 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 28 | 'BANKDIAL': -1, 29 | 'NEXTBANK': -1, 30 | 'PREVBANK': -1, 31 | 'BANK1': -1, 32 | 'BANK2': -1, 33 | 'BANK3': -1, 34 | 'BANK4': -1, 35 | 'BANK5': -1, 36 | 'BANK6': -1, 37 | 'BANK7': -1, 38 | 'BANK8': -1} 39 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'USB Oxygen 8 v2', 40 | 'OUTPUTPORT': 'USB Oxygen 8 v2', 41 | 'CHANNEL': 0} 42 | MIXER_OPTIONS = {'NUMSENDS': 2, 43 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 44 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 45 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /Oxygen_3rd_Gen/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen_3rd_Gen\__init__.py 2 | from Oxygen_3rd_Gen import Oxygen_3rd_Gen 3 | 4 | def create_instance(c_instance): 5 | return Oxygen_3rd_Gen(c_instance) -------------------------------------------------------------------------------- /Oxygen_4th_Gen/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Oxygen_4th_Gen\__init__.py 2 | from Oxygen_3rd_Gen import Oxygen_3rd_Gen 3 | 4 | def create_instance(c_instance): 5 | return Oxygen_3rd_Gen(c_instance) -------------------------------------------------------------------------------- /Ozone/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Ozone\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1891, product_ids=[8200], model_name='Ozone'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /Ozone/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Ozone\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, -1), 18 | (GENERIC_SLI2, -1), 19 | (GENERIC_SLI3, -1), 20 | (GENERIC_SLI4, -1), 21 | (GENERIC_SLI5, -1), 22 | (GENERIC_SLI6, -1), 23 | (GENERIC_SLI7, -1), 24 | (GENERIC_SLI8, -1)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': -1, 38 | 'BANK2': -1, 39 | 'BANK3': -1, 40 | 'BANK4': -1, 41 | 'BANK5': -1, 42 | 'BANK6': -1, 43 | 'BANK7': -1, 44 | 'BANK8': -1} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'Ozone', 46 | 'OUTPUTPORT': 'Ozone', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /Ozonic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Ozonic\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /Ozonic/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Ozonic\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'Ozonic (Keyboard)', 39 | 'OUTPUTPORT': 'Ozonic (Keyboard)', 40 | 'CHANNEL': 0} 41 | MIXER_OPTIONS = {'NUMSENDS': 2, 42 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 43 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 44 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /Photon_25/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Photon_25\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) -------------------------------------------------------------------------------- /Photon_25/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Photon_25\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, -1), 18 | (GENERIC_SLI2, -1), 19 | (GENERIC_SLI3, -1), 20 | (GENERIC_SLI4, -1), 21 | (GENERIC_SLI5, -1), 22 | (GENERIC_SLI6, -1), 23 | (GENERIC_SLI7, -1), 24 | (GENERIC_SLI8, -1)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': -1, 38 | 'BANK2': -1, 39 | 'BANK3': -1, 40 | 'BANK4': -1, 41 | 'BANK5': -1, 42 | 'BANK6': -1, 43 | 'BANK7': -1, 44 | 'BANK8': -1} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'Photon 25', 46 | 'OUTPUTPORT': 'Photon 25', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /Photon_X25/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Photon_X25\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) -------------------------------------------------------------------------------- /Photon_X25/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Photon_X25\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = ((GENERIC_ENC1, 0), 10 | (GENERIC_ENC2, 1), 11 | (GENERIC_ENC3, 2), 12 | (GENERIC_ENC4, 3), 13 | (GENERIC_ENC5, 0), 14 | (GENERIC_ENC6, 1), 15 | (GENERIC_ENC7, 2), 16 | (GENERIC_ENC8, 3)) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, -1), 18 | (GENERIC_SLI2, -1), 19 | (GENERIC_SLI3, -1), 20 | (GENERIC_SLI4, -1), 21 | (GENERIC_SLI5, -1), 22 | (GENERIC_SLI6, -1), 23 | (GENERIC_SLI7, -1), 24 | (GENERIC_SLI8, -1)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': -1, 38 | 'BANK2': -1, 39 | 'BANK3': -1, 40 | 'BANK4': -1, 41 | 'BANK5': -1, 42 | 'BANK6': -1, 43 | 'BANK7': -1, 44 | 'BANK8': -1} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'PhotonX25', 46 | 'OUTPUTPORT': 'PhotonX25', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': -1} -------------------------------------------------------------------------------- /ProjectMixIO/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\ProjectMixIO\__init__.py 2 | from ProjectMixIO import ProjectMixIO 3 | 4 | def create_instance(c_instance): 5 | return ProjectMixIO(c_instance) -------------------------------------------------------------------------------- /Push/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Push/Preset.syx -------------------------------------------------------------------------------- /Push/Setup.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Push/Setup.syx -------------------------------------------------------------------------------- /Push/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\__init__.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.capabilities import controller_id, inport, outport, AUTO_LOAD_KEY, CONTROLLER_ID_KEY, FIRMWARE_KEY, HIDDEN, NOTES_CC, PORTS_KEY, SCRIPT, SYNC, TYPE_KEY 4 | from .firmware_handling import get_provided_firmware_version 5 | from .push import Push 6 | 7 | def get_capabilities(): 8 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2536, product_ids=[21], model_name='Ableton Push'), 9 | PORTS_KEY: [inport(props=[HIDDEN, NOTES_CC, SCRIPT]), 10 | inport(props=[]), 11 | outport(props=[HIDDEN, 12 | NOTES_CC, 13 | SYNC, 14 | SCRIPT]), 15 | outport(props=[])], 16 | TYPE_KEY: 'push', 17 | FIRMWARE_KEY: get_provided_firmware_version(), 18 | AUTO_LOAD_KEY: True} 19 | 20 | 21 | def create_instance(c_instance): 22 | """ Creates and returns the Push script """ 23 | return Push(c_instance=c_instance) -------------------------------------------------------------------------------- /Push/device_component.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\device_component.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.device_component import DeviceComponent as DeviceComponentBase 4 | from pushbase.parameter_provider import ParameterInfo 5 | from .parameter_mapping_sensitivities import parameter_mapping_sensitivity, fine_grain_parameter_mapping_sensitivity 6 | 7 | class DeviceComponent(DeviceComponentBase): 8 | 9 | def _create_parameter_info(self, parameter): 10 | return ParameterInfo(parameter=parameter, default_encoder_sensitivity=parameter_mapping_sensitivity(parameter), fine_grain_encoder_sensitivity=fine_grain_parameter_mapping_sensitivity(parameter)) -------------------------------------------------------------------------------- /Push/drum_group_component.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\drum_group_component.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.drum_group_component import DrumGroupComponent as DrumGroupComponentBase 4 | 5 | class DrumGroupComponent(DrumGroupComponentBase): 6 | 7 | def __init__(self, selector = None, *a, **k): 8 | super(DrumGroupComponent, self).__init__(*a, **k) 9 | self._selector = selector 10 | 11 | def select_drum_pad(self, drum_pad): 12 | self._selector.on_select_drum_pad(drum_pad) -------------------------------------------------------------------------------- /Push/firmware_handling.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\firmware_handling.py 2 | from __future__ import absolute_import, print_function 3 | from os import path 4 | VERSION_PREFIX = '10F4000041444139204E69636F6C6C73' 5 | NUM_VERSION_BYTES = 8 6 | PRESET_FILE_NAME = 'Preset.syx' 7 | 8 | def get_version_number_from_string(version_string): 9 | result = 0.0 10 | if version_string: 11 | figures = [ version_string[i:i + 2] for i in xrange(0, len(version_string), 2) ] 12 | result = sum([ int(fig) * 10 ** (1 - i) for i, fig in enumerate(figures) ]) 13 | return result 14 | 15 | 16 | def get_version_string_from_file_content(content): 17 | result = None 18 | if VERSION_PREFIX in content: 19 | number_start = content.find(VERSION_PREFIX) + len(VERSION_PREFIX) 20 | if len(content) >= number_start + NUM_VERSION_BYTES: 21 | result = content[number_start:number_start + NUM_VERSION_BYTES] 22 | return result 23 | 24 | 25 | def get_provided_firmware_version(): 26 | result = 0.0 27 | try: 28 | mod_path = path.dirname(path.realpath(__file__)) 29 | with open(path.join(mod_path, PRESET_FILE_NAME), 'r') as f: 30 | version_string = get_version_string_from_file_content(f.read()) 31 | result = get_version_number_from_string(version_string) 32 | except IOError: 33 | pass 34 | 35 | return result -------------------------------------------------------------------------------- /Push/global_pad_parameters.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\global_pad_parameters.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface import Component 4 | from . import sysex 5 | 6 | class GlobalPadParameters(Component): 7 | 8 | def __init__(self, aftertouch_threshold = 0, *a, **k): 9 | super(GlobalPadParameters, self).__init__(*a, **k) 10 | self._pad_parameter_element = None 11 | self._aftertouch_threshold = aftertouch_threshold 12 | return 13 | 14 | def _get_aftertouch_threshold(self): 15 | return self._aftertouch_threshold 16 | 17 | def _set_aftertouch_threshold(self, value): 18 | self._aftertouch_threshold = value 19 | self._update_pad_parameter_element() 20 | 21 | aftertouch_threshold = property(_get_aftertouch_threshold, _set_aftertouch_threshold) 22 | 23 | def set_pad_parameter(self, element): 24 | self._pad_parameter_element = element 25 | self._update_pad_parameter_element() 26 | 27 | def _update_pad_parameter_element(self): 28 | if self._pad_parameter_element: 29 | self._pad_parameter_element.send_value(sysex.make_pad_parameter_message(aftertouch_threshold=self._aftertouch_threshold)) 30 | 31 | def update(self): 32 | super(GlobalPadParameters, self).update() 33 | if self.is_enabled(): 34 | self._update_pad_parameter_element() -------------------------------------------------------------------------------- /Push/multi_entry_mode.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\multi_entry_mode.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.mode import tomode, Mode 4 | 5 | class MultiEntryMode(Mode): 6 | """ 7 | Mode wrapper that allows registration in multiple modes 8 | components. This wrapper can be entered multiple times and the 9 | enter method will be called only once. It will be left when the 10 | number of times leave_mode is called matches the number of calls 11 | to enter_mode. 12 | """ 13 | 14 | def __init__(self, mode = None, *a, **k): 15 | super(MultiEntryMode, self).__init__(*a, **k) 16 | self._mode = tomode(mode) 17 | self._entry_count = 0 18 | 19 | def enter_mode(self): 20 | if self._entry_count == 0: 21 | self._mode.enter_mode() 22 | self._entry_count += 1 23 | 24 | def leave_mode(self): 25 | if not self._entry_count > 0: 26 | raise AssertionError 27 | self._entry_count == 1 and self._mode.leave_mode() 28 | self._entry_count -= 1 29 | 30 | @property 31 | def is_entered(self): 32 | return self._entry_count > 0 -------------------------------------------------------------------------------- /Push/pad_sensitivity.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\pad_sensitivity.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import lazy_attribute, NamedTuple 4 | from .sysex import to_bytes 5 | 6 | class PadParameters(NamedTuple): 7 | """ 8 | Describes the properties of pad parameters. 9 | """ 10 | off_threshold = 0 11 | on_threshold = 0 12 | gain = 0 13 | curve1 = 0 14 | curve2 = 0 15 | name = '' 16 | 17 | def __str__(self): 18 | return self.name 19 | 20 | @lazy_attribute 21 | def sysex_bytes(self): 22 | return to_bytes(self.off_threshold, 4) + to_bytes(self.on_threshold, 4) + to_bytes(self.gain, 8) + to_bytes(self.curve1, 8) + to_bytes(self.curve2, 8) 23 | 24 | 25 | def pad_parameter_sender(global_control, pad_control): 26 | """ 27 | Sends the sensitivity parameters for a given pad, or all pads (pad 28 | == None) over the given ValueControl. 29 | """ 30 | 31 | def do_send(parameters, pad = None): 32 | if pad != None: 33 | pad_control.send_value((pad,) + parameters.sysex_bytes) 34 | else: 35 | global_control.send_value(parameters.sysex_bytes) 36 | return 37 | 38 | return do_send -------------------------------------------------------------------------------- /Push/parameter_mapping_sensitivities.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\parameter_mapping_sensitivities.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.parameter_provider import is_parameter_quantized 4 | CONTINUOUS_MAPPING_SENSITIVITY = 2.0 5 | FINE_GRAINED_CONTINUOUS_MAPPING_SENSITIVITY = 0.01 6 | QUANTIZED_MAPPING_SENSITIVITY = 1.0 / 15.0 7 | 8 | def parameter_mapping_sensitivity(parameter): 9 | is_quantized = is_parameter_quantized(parameter, parameter and parameter.canonical_parent) 10 | if is_quantized: 11 | return QUANTIZED_MAPPING_SENSITIVITY 12 | return CONTINUOUS_MAPPING_SENSITIVITY 13 | 14 | 15 | def fine_grain_parameter_mapping_sensitivity(parameter): 16 | is_quantized = is_parameter_quantized(parameter, parameter and parameter.canonical_parent) 17 | if is_quantized: 18 | return QUANTIZED_MAPPING_SENSITIVITY 19 | return FINE_GRAINED_CONTINUOUS_MAPPING_SENSITIVITY -------------------------------------------------------------------------------- /Push/selected_track_parameter_provider.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\selected_track_parameter_provider.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.parameter_provider import ParameterInfo 4 | from pushbase.selected_track_parameter_provider import SelectedTrackParameterProvider as SelectedTrackParameterProviderBase 5 | from .parameter_mapping_sensitivities import parameter_mapping_sensitivity, fine_grain_parameter_mapping_sensitivity 6 | 7 | class SelectedTrackParameterProvider(SelectedTrackParameterProviderBase): 8 | 9 | def _create_parameter_info(self, parameter, name): 10 | raise name is not None or AssertionError 11 | return ParameterInfo(name=name, parameter=parameter, default_encoder_sensitivity=parameter_mapping_sensitivity(parameter), fine_grain_encoder_sensitivity=fine_grain_parameter_mapping_sensitivity(parameter)) -------------------------------------------------------------------------------- /Push/with_priority.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push\with_priority.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface import DEFAULT_PRIORITY 4 | from ableton.v2.control_surface.elements import WrapperElement 5 | 6 | class WithPriority(WrapperElement): 7 | 8 | def __init__(self, wrapped_priority = DEFAULT_PRIORITY, *a, **k): 9 | super(WithPriority, self).__init__(*a, **k) 10 | self.wrapped_priority = wrapped_priority 11 | self.register_control_element(self.wrapped_control) 12 | 13 | def get_control_element_priority(self, element, priority): 14 | return self.wrapped_priority -------------------------------------------------------------------------------- /Push2/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\__init__.py 2 | from __future__ import absolute_import, print_function 3 | 4 | def get_capabilities(): 5 | from ableton.v2.control_surface import capabilities as caps 6 | return {caps.CONTROLLER_ID_KEY: caps.controller_id(vendor_id=10626, product_ids=[6503], model_name='Ableton Push 2'), 7 | caps.PORTS_KEY: [caps.inport(props=[caps.HIDDEN, caps.NOTES_CC, caps.SCRIPT]), 8 | caps.inport(props=[]), 9 | caps.outport(props=[caps.HIDDEN, 10 | caps.NOTES_CC, 11 | caps.SYNC, 12 | caps.SCRIPT]), 13 | caps.outport(props=[])], 14 | caps.TYPE_KEY: 'push2', 15 | caps.AUTO_LOAD_KEY: True} 16 | 17 | 18 | def create_instance(c_instance): 19 | from .push2 import Push2 20 | from .push2_model import Root, Sender 21 | root = Root(sender=Sender(message_sink=c_instance.send_model_update, process_connected=c_instance.process_connected)) 22 | return Push2(c_instance=c_instance, model=root) -------------------------------------------------------------------------------- /Push2/device_util.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\device_util.py 2 | from __future__ import absolute_import, print_function 3 | import Live 4 | from ableton.v2.base import liveobj_valid 5 | 6 | def is_drum_pad(item): 7 | return liveobj_valid(item) and isinstance(item, Live.DrumPad.DrumPad) 8 | 9 | 10 | def find_chain_or_track(item): 11 | """ 12 | Finds a chain for the given item. 13 | - If it's a device, returns the parent chain or track 14 | - If it's a drum pad, returns the first chain if it exists, otherwise also the parent 15 | chain or track 16 | """ 17 | if is_drum_pad(item) and item.chains: 18 | chain = item.chains[0] 19 | else: 20 | chain = item 21 | while liveobj_valid(chain) and not isinstance(chain, (Live.Track.Track, Live.Chain.Chain)): 22 | chain = getattr(chain, 'canonical_parent', None) 23 | 24 | return chain 25 | 26 | 27 | def find_rack(item): 28 | """ 29 | Finds the parent rack of the given item or None, if it doesn't exist 30 | """ 31 | rack = item 32 | while liveobj_valid(rack) and not isinstance(rack, Live.RackDevice.RackDevice): 33 | rack = getattr(rack, 'canonical_parent', None) 34 | 35 | return rack -------------------------------------------------------------------------------- /Push2/firmware/app_push2_stable_1.0.60.upgrade: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Push2/firmware/app_push2_stable_1.0.60.upgrade -------------------------------------------------------------------------------- /Push2/mixable_utilities.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\mixable_utilities.py 2 | from __future__ import absolute_import, print_function 3 | import Live 4 | from pushbase.device_chain_utils import find_instrument_meeting_requirement 5 | 6 | def is_chain(track_or_chain): 7 | return isinstance(getattr(track_or_chain, 'proxied_object', track_or_chain), Live.Chain.Chain) 8 | 9 | 10 | def is_midi_track(track): 11 | return getattr(track, 'has_midi_input', False) and not is_chain(track) 12 | 13 | 14 | def is_audio_track(track): 15 | return getattr(track, 'has_audio_input', False) and not is_chain(track) 16 | 17 | 18 | def can_play_clips(mixable): 19 | return hasattr(mixable, 'fired_slot_index') 20 | 21 | 22 | def find_drum_rack_instrument(track): 23 | return find_instrument_meeting_requirement(lambda i: i.can_have_drum_pads, track) 24 | 25 | 26 | def find_simpler(track_or_chain): 27 | return find_instrument_meeting_requirement(lambda i: hasattr(i, 'playback_mode'), track_or_chain) -------------------------------------------------------------------------------- /Push2/model/uniqueid.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\model\uniqueid.py 2 | from __future__ import absolute_import, print_function 3 | from itertools import count 4 | 5 | class UniqueIdMixin(object): 6 | _idgen = count() 7 | 8 | def __init__(self, *a, **k): 9 | super(UniqueIdMixin, self).__init__(*a, **k) 10 | self.__id__ = self._idgen.next() -------------------------------------------------------------------------------- /Push2/note_editor.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\note_editor.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.note_editor_component import NoteEditorComponent 4 | 5 | class Push2NoteEditorComponent(NoteEditorComponent): 6 | __events__ = ('mute_solo_stop_cancel_action_performed',) 7 | 8 | def _on_pad_pressed(self, coordinate): 9 | super(Push2NoteEditorComponent, self)._on_pad_pressed(coordinate) 10 | self.notify_mute_solo_stop_cancel_action_performed() -------------------------------------------------------------------------------- /Push2/observable_property_alias.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\observable_property_alias.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import EventObject, Slot 4 | 5 | class ObservablePropertyAlias(EventObject): 6 | 7 | def __init__(self, alias_host, property_host = None, property_name = '', alias_name = None, getter = None, *a, **k): 8 | super(ObservablePropertyAlias, self).__init__(*a, **k) 9 | self._alias_host = alias_host 10 | self._alias_name = alias_name or property_name 11 | self._property_host = property_host 12 | self._property_name = property_name 13 | self._property_slot = None 14 | self._setup_alias(getter) 15 | return 16 | 17 | def _get_property_host(self): 18 | return self._property_host 19 | 20 | def _set_property_host(self, host): 21 | self._property_host = host 22 | self._property_slot.subject = host 23 | 24 | property_host = property(_get_property_host, _set_property_host) 25 | 26 | def _setup_alias(self, getter): 27 | aliased_prop = property(getter or self._get_property) 28 | setattr(self._alias_host.__class__, self._alias_name, aliased_prop) 29 | notifier = getattr(self._alias_host, 'notify_' + self._alias_name) 30 | self._property_slot = self.register_slot(Slot(self.property_host, notifier, self._property_name)) 31 | 32 | def _get_property(self, _): 33 | return getattr(self.property_host, self._property_name, None) -------------------------------------------------------------------------------- /Push2/pad_sensitivity.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\pad_sensitivity.py 2 | from __future__ import absolute_import, print_function 3 | playing_profile = 0 4 | default_profile = 1 5 | loop_selector_profile = 2 6 | 7 | def index_to_pad_coordinate(index): 8 | """ 9 | Maps a linear range to appropriate x and y coordinates of the pad matrix. 10 | The coordinates are 1-based, since the pad sensitivity sysex commands expect this 11 | when setting individual pads. 12 | """ 13 | x, y = divmod(index, 8) 14 | return (8 - x, y + 1) 15 | 16 | 17 | def pad_parameter_sender(global_control, pad_control): 18 | """ 19 | Sends the sensitivity parameters for a given pad, or all pads 20 | (pad == None) over the given SysexElement. 21 | """ 22 | 23 | def do_send(sensitivity_value, pad = None): 24 | if pad is None: 25 | global_control.send_value(0, 0, sensitivity_value) 26 | else: 27 | scene, track = index_to_pad_coordinate(pad) 28 | pad_control.send_value(scene, track, sensitivity_value) 29 | return 30 | 31 | return do_send -------------------------------------------------------------------------------- /Push2/selected_track_parameter_provider.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\selected_track_parameter_provider.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.parameter_provider import ParameterInfo 4 | from pushbase.selected_track_parameter_provider import SelectedTrackParameterProvider as SelectedTrackParameterProviderBase 5 | from .parameter_mapping_sensitivities import parameter_mapping_sensitivity, fine_grain_parameter_mapping_sensitivity 6 | 7 | class SelectedTrackParameterProvider(SelectedTrackParameterProviderBase): 8 | 9 | def _create_parameter_info(self, parameter, name): 10 | raise name is not None or AssertionError 11 | return ParameterInfo(name=name, parameter=parameter, default_encoder_sensitivity=parameter_mapping_sensitivity(parameter), fine_grain_encoder_sensitivity=fine_grain_parameter_mapping_sensitivity(parameter)) -------------------------------------------------------------------------------- /Push2/session_recording.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\session_recording.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import nop 4 | from pushbase.session_recording_component import FixedLengthSessionRecordingComponent 5 | 6 | class SessionRecordingComponent(FixedLengthSessionRecordingComponent): 7 | 8 | def __init__(self, *a, **k): 9 | super(SessionRecordingComponent, self).__init__(*a, **k) 10 | self._on_record_button_pressed = nop 11 | self._on_arrangement_record_button_pressed = nop 12 | self.set_trigger_recording_on_release(not any((self._record_button.is_pressed, self.arrangement_record_button.is_pressed))) 13 | 14 | def set_trigger_recording_on_release(self, trigger_recording): 15 | self._should_trigger_recording = trigger_recording 16 | 17 | def _on_record_button_released(self): 18 | self._trigger_recording_action(self._trigger_recording) 19 | 20 | def _on_arrangement_record_button_released(self): 21 | self._trigger_recording_action(self._toggle_arrangement_recording) 22 | 23 | def _trigger_recording_action(self, recording_action): 24 | if self._should_trigger_recording: 25 | recording_action() 26 | self._should_trigger_recording = True -------------------------------------------------------------------------------- /Push2/settings.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\settings.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.setting import OnOffSetting 4 | 5 | def create_settings(preferences = None): 6 | preferences = preferences if preferences is not None else {} 7 | return {'workflow': OnOffSetting(name='Workflow', value_labels=['Scene', 'Clip'], default_value=True, preferences=preferences)} -------------------------------------------------------------------------------- /Push2/sliced_simpler.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Push2\sliced_simpler.py 2 | from __future__ import absolute_import, print_function 3 | from pushbase.colors import Pulse 4 | from pushbase.sliced_simpler_component import SlicedSimplerComponent 5 | from .colors import IndexedColor 6 | NEXT_SLICE_PULSE_SPEED = 48 7 | 8 | def next_slice_color(track_color_index): 9 | return Pulse(color1=IndexedColor.from_live_index(track_color_index, shade_level=2), color2=IndexedColor.from_live_index(track_color_index, shade_level=1), speed=NEXT_SLICE_PULSE_SPEED) 10 | 11 | 12 | class Push2SlicedSimplerComponent(SlicedSimplerComponent): 13 | 14 | def _next_slice_color(self): 15 | return next_slice_color(self.song.view.selected_track.color_index) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Ableton Live 9 Remote Scripts 2 | ============================= 3 | 4 | This is the unofficial repository of Ableton Live 9 MIDI Remote Scripts. 5 | You can checkout branches to switch to different Live versions. 6 | 7 | Currently available branches are: 8 | - *Live_9.2* - the Live 9.2 scripts 9 | - *Live_9.5* - the Live 9.5 scripts 10 | - *Live_9.6+Framework* - the Live 9.6 scripts, LiveControl and the framework 11 | - *Live_9.6* - only the 9.6 scripts and LiveControl, since the framework is available at 12 | *{Live Installation Folder}/Resources/Python/remote-script-framework* 13 | - *Live_9.7* - the 9.7 scripts without LiveControl 14 | - *master* - the latest version I decompiled or customized 15 | 16 | (all files marked with older references didn't have changed since previous versions) 17 | 18 | You can find more informations on 19 | [this page](http://julienbayle.net/ableton-live-9-midi-remote-scripts "this page") 20 | 21 | Decompilation was done using https://sourceforge.net/projects/easypythondecompiler/ 22 | 23 | ===> NO support given, ONLY source files ! 24 | 25 | Please, enjoy. 26 | -------------------------------------------------------------------------------- /Radium49_61/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Radium49_61\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION) -------------------------------------------------------------------------------- /Radium49_61/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Radium49_61\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | CONTROLLER_DESCRIPTION = {'INPUTPORT': 'Keystation', 39 | 'OUTPUTPORT': 'Keystation', 40 | 'CHANNEL': 0} -------------------------------------------------------------------------------- /RemoteSL/RemoteSLComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\RemoteSL\RemoteSLComponent.py 2 | from consts import * 3 | 4 | class RemoteSLComponent: 5 | """Baseclass for a subcomponent of the RemoteSL. 6 | Just defines some handy shortcuts to the main scripts functions... 7 | for more details about the methods, see the RemoteSLs doc strings 8 | """ 9 | 10 | def __init__(self, remote_sl_parent): 11 | self.__parent = remote_sl_parent 12 | self.__support_mkII = False 13 | 14 | def application(self): 15 | return self.__parent.application() 16 | 17 | def song(self): 18 | return self.__parent.song() 19 | 20 | def send_midi(self, midi_event_bytes): 21 | self.__parent.send_midi(midi_event_bytes) 22 | 23 | def request_rebuild_midi_map(self): 24 | self.__parent.request_rebuild_midi_map() 25 | 26 | def disconnect(self): 27 | pass 28 | 29 | def build_midi_map(self, script_handle, midi_map_handle): 30 | pass 31 | 32 | def refresh_state(self): 33 | pass 34 | 35 | def update_display(self): 36 | pass 37 | 38 | def cc_status_byte(self): 39 | return CC_STATUS + SL_MIDI_CHANNEL 40 | 41 | def support_mkII(self): 42 | return self.__support_mkII 43 | 44 | def set_support_mkII(self, support_mkII): 45 | self.__support_mkII = support_mkII -------------------------------------------------------------------------------- /RemoteSL/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\RemoteSL\__init__.py 2 | from RemoteSL import RemoteSL 3 | 4 | def create_instance(c_instance): 5 | return RemoteSL(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[11], model_name='SL MkII'), 12 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE]), 13 | inport(props=[NOTES_CC, REMOTE, SCRIPT]), 14 | outport(props=[NOTES_CC, SYNC]), 15 | outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /RemoteSL_Classic/RemoteSLComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\RemoteSL_Classic\RemoteSLComponent.py 2 | from consts import * 3 | 4 | class RemoteSLComponent: 5 | """Baseclass for a subcomponent of the RemoteSL. 6 | Just defines some handy shortcuts to the main scripts functions... 7 | for more details about the methods, see the RemoteSLs doc strings 8 | """ 9 | 10 | def __init__(self, remote_sl_parent): 11 | self.__parent = remote_sl_parent 12 | self.__support_mkII = False 13 | 14 | def application(self): 15 | return self.__parent.application() 16 | 17 | def song(self): 18 | return self.__parent.song() 19 | 20 | def send_midi(self, midi_event_bytes): 21 | self.__parent.send_midi(midi_event_bytes) 22 | 23 | def request_rebuild_midi_map(self): 24 | self.__parent.request_rebuild_midi_map() 25 | 26 | def disconnect(self): 27 | pass 28 | 29 | def build_midi_map(self, script_handle, midi_map_handle): 30 | pass 31 | 32 | def refresh_state(self): 33 | pass 34 | 35 | def update_display(self): 36 | pass 37 | 38 | def cc_status_byte(self): 39 | return CC_STATUS + SL_MIDI_CHANNEL 40 | 41 | def support_mkII(self): 42 | return self.__support_mkII 43 | 44 | def set_support_mkII(self, support_mkII): 45 | self.__support_mkII = support_mkII -------------------------------------------------------------------------------- /RemoteSL_Classic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\RemoteSL_Classic\__init__.py 2 | from RemoteSL import RemoteSL 3 | 4 | def create_instance(c_instance): 5 | return RemoteSL(c_instance) 6 | 7 | 8 | from _Framework.Capabilities import * 9 | 10 | def get_capabilities(): 11 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=4661, product_ids=[3], model_name='ReMOTE ZeRO SL'), 12 | PORTS_KEY: [inport(props=[NOTES_CC, REMOTE]), 13 | inport(props=[NOTES_CC, REMOTE, SCRIPT]), 14 | inport(props=[NOTES_CC]), 15 | outport(props=[NOTES_CC, SYNC]), 16 | outport(props=[SCRIPT]), 17 | outport(props=[])]} -------------------------------------------------------------------------------- /Roland_A_PRO/DeviceNavigationComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Roland_A_PRO\DeviceNavigationComponent.py 2 | import Live 3 | from _Framework.ControlSurfaceComponent import ControlSurfaceComponent 4 | from _Framework.Control import ButtonControl 5 | NavDirection = Live.Application.Application.View.NavDirection 6 | 7 | class DeviceNavigationComponent(ControlSurfaceComponent): 8 | device_nav_left_button = ButtonControl() 9 | device_nav_right_button = ButtonControl() 10 | 11 | @device_nav_left_button.pressed 12 | def device_nav_left_button(self, value): 13 | self._scroll_device_chain(NavDirection.left) 14 | 15 | @device_nav_right_button.pressed 16 | def device_nav_right_button(self, value): 17 | self._scroll_device_chain(NavDirection.right) 18 | 19 | def _scroll_device_chain(self, direction): 20 | view = self.application().view 21 | if not view.is_view_visible('Detail') or not view.is_view_visible('Detail/DeviceChain'): 22 | view.show_view('Detail') 23 | view.show_view('Detail/DeviceChain') 24 | else: 25 | view.scroll_view(direction, 'Detail/DeviceChain', False) -------------------------------------------------------------------------------- /Roland_A_PRO/MixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Roland_A_PRO\MixerComponent.py 2 | from _Framework.MixerComponent import MixerComponent as MixerComponentBase 3 | from _Framework.Control import ButtonControl 4 | 5 | class MixerComponent(MixerComponentBase): 6 | bank_up_button = ButtonControl() 7 | bank_down_button = ButtonControl() 8 | track_up_button = ButtonControl() 9 | track_down_button = ButtonControl() 10 | 11 | def __init__(self, *a, **k): 12 | super(MixerComponent, self).__init__(*a, **k) 13 | 14 | @bank_up_button.pressed 15 | def bank_up_button_pressed(self, button): 16 | new_offset = self._track_offset + len(self._channel_strips) 17 | if len(self.tracks_to_use()) > new_offset: 18 | self.set_track_offset(new_offset) 19 | 20 | @bank_down_button.pressed 21 | def bank_down_button_pressed(self, button): 22 | self.set_track_offset(max(0, self._track_offset - len(self._channel_strips))) 23 | 24 | @track_up_button.pressed 25 | def track_up_button_pressed(self, button): 26 | new_offset = self._track_offset + 1 27 | if len(self.tracks_to_use()) > new_offset: 28 | self.set_track_offset(new_offset) 29 | 30 | @track_down_button.pressed 31 | def track_down_button_pressed(self, button): 32 | self.set_track_offset(max(0, self._track_offset - 1)) -------------------------------------------------------------------------------- /Roland_A_PRO/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/Roland_A_PRO/Preset.syx -------------------------------------------------------------------------------- /Roland_A_PRO/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Roland_A_PRO\__init__.py 2 | from .Roland_A_PRO import Roland_A_PRO 3 | from _Framework.Capabilities import controller_id, inport, outport, CONTROLLER_ID_KEY, PORTS_KEY, NOTES_CC, SCRIPT, REMOTE 4 | 5 | def get_capabilities(): 6 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=1410, product_ids=[271], model_name='A-PRO'), 7 | PORTS_KEY: [inport(props=[]), 8 | inport(props=[NOTES_CC, REMOTE]), 9 | inport(props=[NOTES_CC, SCRIPT, REMOTE]), 10 | outport(props=[]), 11 | outport(props=[SCRIPT])]} 12 | 13 | 14 | def create_instance(c_instance): 15 | return Roland_A_PRO(c_instance) -------------------------------------------------------------------------------- /Tranzport/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\Tranzport\__init__.py 2 | from Tranzport import Tranzport 3 | 4 | def create_instance(c_instance): 5 | return Tranzport(c_instance) 6 | 7 | 8 | def exit_instance(): 9 | pass -------------------------------------------------------------------------------- /TriggerFinger/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\TriggerFinger\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS, MIXER_OPTIONS) -------------------------------------------------------------------------------- /TriggerFinger/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\TriggerFinger\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | PAD_TRANSLATION = ((0, 0, 49, 9), 39 | (1, 0, 57, 9), 40 | (2, 0, 51, 9), 41 | (3, 0, 53, 9), 42 | (0, 1, 56, 9), 43 | (1, 1, 39, 9), 44 | (2, 1, 42, 9), 45 | (3, 1, 46, 9), 46 | (0, 2, 50, 9), 47 | (1, 2, 48, 9), 48 | (2, 2, 45, 9), 49 | (3, 2, 41, 9), 50 | (0, 3, 36, 9), 51 | (1, 3, 38, 9), 52 | (2, 3, 40, 9), 53 | (3, 3, 37, 9)) 54 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'Trigger', 55 | 'OUTPUTPORT': 'Trigger', 56 | 'CHANNEL': 9, 57 | 'PAD_TRANSLATION': PAD_TRANSLATION} 58 | MIXER_OPTIONS = {'NUMSENDS': 2, 59 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 60 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 61 | 'MASTERVOLUME': 7} -------------------------------------------------------------------------------- /UC33e/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\UC33e\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2637, product_ids=[245], model_name='UC-33 USB MIDI Controller'), 15 | PORTS_KEY: [inport(props=[NOTES_CC, SCRIPT]), inport(props=[NOTES_CC]), outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /UC33e/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\UC33e\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = ((GENERIC_ENC1, 0), 10 | (GENERIC_ENC2, 1), 11 | (GENERIC_ENC3, 2), 12 | (GENERIC_ENC4, 3), 13 | (GENERIC_ENC5, 4), 14 | (GENERIC_ENC6, 5), 15 | (GENERIC_ENC7, 6), 16 | (GENERIC_ENC8, 7)) 17 | VOLUME_CONTROLS = ((GENERIC_SLI1, 0), 18 | (GENERIC_SLI2, 1), 19 | (GENERIC_SLI3, 2), 20 | (GENERIC_SLI4, 3), 21 | (GENERIC_SLI5, 4), 22 | (GENERIC_SLI6, 5), 23 | (GENERIC_SLI7, 6), 24 | (GENERIC_SLI8, 7)) 25 | TRACKARM_CONTROLS = (GENERIC_BUT1, 26 | GENERIC_BUT2, 27 | GENERIC_BUT3, 28 | GENERIC_BUT4, 29 | GENERIC_BUT5, 30 | GENERIC_BUT6, 31 | GENERIC_BUT7, 32 | GENERIC_BUT8) 33 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 34 | 'BANKDIAL': -1, 35 | 'NEXTBANK': GENERIC_PAD5, 36 | 'PREVBANK': GENERIC_PAD1, 37 | 'BANK1': -1, 38 | 'BANK2': -1, 39 | 'BANK3': -1, 40 | 'BANK4': -1, 41 | 'BANK5': -1, 42 | 'BANK6': -1, 43 | 'BANK7': -1, 44 | 'BANK8': -1} 45 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'UC-33 USB MIDI Controller (Port 1)', 46 | 'OUTPUTPORT': 'UC-33 USB MIDI Controller (Port 1)', 47 | 'CHANNEL': 0} 48 | MIXER_OPTIONS = {'NUMSENDS': 2, 49 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 50 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 51 | 'MASTERVOLUME': 28} -------------------------------------------------------------------------------- /VCM600/TransportComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\VCM600\TransportComponent.py 2 | from _Framework.TransportComponent import TransportComponent as TransportComponentBase 3 | 4 | class TransportComponent(TransportComponentBase): 5 | 6 | def __init__(self, *a, **k): 7 | super(TransportComponent, self).__init__(*a, **k) 8 | self._punch_in_toggle.is_momentary = False 9 | self._punch_out_toggle.is_momentary = False -------------------------------------------------------------------------------- /VCM600/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\VCM600\__init__.py 2 | from VCM600 import VCM600 3 | 4 | def create_instance(c_instance): 5 | """ Creates and returns the ADA1 script """ 6 | return VCM600(c_instance) -------------------------------------------------------------------------------- /ZERO8/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\ZERO8\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTION, MIXER_OPTIONS) -------------------------------------------------------------------------------- /_APC/ControlElementUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_APC\ControlElementUtils.py 2 | import Live 3 | MapMode = Live.MidiMap.MapMode 4 | from _Framework.EncoderElement import EncoderElement 5 | from _Framework.SliderElement import SliderElement 6 | from _Framework.ButtonElement import ButtonElement 7 | from _Framework.InputControlElement import MIDI_NOTE_TYPE, MIDI_CC_TYPE 8 | from _APC.RingedEncoderElement import RingedEncoderElement 9 | 10 | def make_button(channel, identifier, *a, **k): 11 | return ButtonElement(True, MIDI_NOTE_TYPE, channel, identifier, *a, **k) 12 | 13 | 14 | def make_pedal_button(identifier, *a, **k): 15 | return ButtonElement(True, MIDI_CC_TYPE, 0, identifier, *a, **k) 16 | 17 | 18 | def make_slider(channel, identifier, *a, **k): 19 | return SliderElement(MIDI_CC_TYPE, channel, identifier, *a, **k) 20 | 21 | 22 | def make_knob(channel, identifier, *a, **k): 23 | return SliderElement(MIDI_CC_TYPE, channel, identifier, *a, **k) 24 | 25 | 26 | def make_ring_encoder(encoder_identifer, button_identifier, name = '', *a, **k): 27 | button_name = '%s_Ring_Mode_Button' % name 28 | button = ButtonElement(False, MIDI_CC_TYPE, 0, button_identifier, name=button_name) 29 | encoder = RingedEncoderElement(MIDI_CC_TYPE, 0, encoder_identifer, MapMode.absolute, name=name, *a, **k) 30 | encoder.set_ring_mode_button(button) 31 | return encoder 32 | 33 | 34 | def make_encoder(channel, identifier, *a, **k): 35 | return EncoderElement(MIDI_CC_TYPE, channel, identifier, MapMode.relative_two_compliment, *a, **k) -------------------------------------------------------------------------------- /_APC/DeviceBankButtonElement.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_APC\DeviceBankButtonElement.py 2 | from _Framework.ComboElement import ComboElement 3 | 4 | class DeviceBankButtonElement(ComboElement): 5 | """ 6 | ComboElement that will change the channel, while the control is grabbed 7 | """ 8 | 9 | def on_nested_control_element_received(self, control): 10 | super(DeviceBankButtonElement, self).on_nested_control_element_received(control) 11 | if control == self.wrapped_control: 12 | self.wrapped_control.set_channel(1) 13 | 14 | def on_nested_control_element_lost(self, control): 15 | super(DeviceBankButtonElement, self).on_nested_control_element_lost(control) 16 | if control == self.wrapped_control: 17 | self.wrapped_control.set_channel(0) -------------------------------------------------------------------------------- /_APC/SessionComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_APC\SessionComponent.py 2 | from _Framework.SessionComponent import SessionComponent as SessionComponentBase 3 | 4 | class SessionComponent(SessionComponentBase): 5 | """ Special SessionComponent for the APC controllers' combination mode """ 6 | 7 | def link_with_track_offset(self, track_offset): 8 | if not track_offset >= 0: 9 | raise AssertionError 10 | self._is_linked() and self._unlink() 11 | self.set_offsets(track_offset, self.scene_offset()) 12 | self._link() 13 | 14 | def unlink(self): 15 | if self._is_linked(): 16 | self._unlink() -------------------------------------------------------------------------------- /_APC/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_APC\__init__.py 2 | pass -------------------------------------------------------------------------------- /_Arturia/ScrollComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Arturia\ScrollComponent.py 2 | from _Framework.ScrollComponent import ScrollComponent as ScrollComponentBase 3 | from _Framework.Control import EncoderControl 4 | 5 | class ScrollComponent(ScrollComponentBase): 6 | scroll_encoder = EncoderControl() 7 | 8 | def set_scroll_encoder(self, encoder): 9 | self.scroll_encoder.set_control_element(encoder) 10 | self.update() 11 | 12 | @scroll_encoder.value 13 | def scroll_encoder(self, value, encoder): 14 | scroll_step = None 15 | if value > 0 and self.can_scroll_down(): 16 | scroll_step = self._do_scroll_down 17 | elif value < 0 and self.can_scroll_up(): 18 | scroll_step = self._do_scroll_up 19 | if scroll_step is not None: 20 | scroll_step() 21 | return -------------------------------------------------------------------------------- /_Arturia/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Arturia\__init__.py 2 | pass -------------------------------------------------------------------------------- /_Axiom/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Axiom\__init__.py 2 | pass -------------------------------------------------------------------------------- /_Generic/SelectChanStripComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Generic\SelectChanStripComponent.py 2 | import Live 3 | from _Framework.ChannelStripComponent import ChannelStripComponent 4 | 5 | class SelectChanStripComponent(ChannelStripComponent): 6 | """ Subclass of channel strip component that selects tracks that it arms """ 7 | 8 | def __init__(self): 9 | ChannelStripComponent.__init__(self) 10 | 11 | def _arm_value(self, value): 12 | if not self._arm_button != None: 13 | raise AssertionError 14 | if not value in range(128): 15 | raise AssertionError 16 | if self.is_enabled(): 17 | track_was_armed = False 18 | if self._track != None and self._track.can_be_armed: 19 | track_was_armed = self._track.arm 20 | ChannelStripComponent._arm_value(self, value) 21 | if self._track != None and self._track.can_be_armed: 22 | self.song().view.selected_track = self._track.arm and not track_was_armed and self._track.view.select_instrument() and self._track 23 | return -------------------------------------------------------------------------------- /_Generic/SpecialMixerComponent.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Generic\SpecialMixerComponent.py 2 | import Live 3 | from _Framework.MixerComponent import MixerComponent 4 | from SelectChanStripComponent import SelectChanStripComponent 5 | 6 | class SpecialMixerComponent(MixerComponent): 7 | """ Class encompassing several selecting channel strips to form a mixer """ 8 | 9 | def _create_strip(self): 10 | return SelectChanStripComponent() -------------------------------------------------------------------------------- /_Generic/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Generic\__init__.py 2 | pass -------------------------------------------------------------------------------- /_MPDMkIIBase/ControlElementUtils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_MPDMkIIBase\ControlElementUtils.py 2 | import Live 3 | from _Framework.InputControlElement import MIDI_CC_TYPE 4 | from _Framework.EncoderElement import EncoderElement 5 | from _Framework.SliderElement import SliderElement 6 | from _Framework.ButtonElement import ButtonElement 7 | 8 | def make_encoder(identifier, channel, name): 9 | return EncoderElement(MIDI_CC_TYPE, channel, identifier, Live.MidiMap.MapMode.absolute, name=name) 10 | 11 | 12 | def make_slider(identifier, channel, name): 13 | return SliderElement(MIDI_CC_TYPE, channel, identifier, name=name) 14 | 15 | 16 | def make_button(identifier, channel, name): 17 | return ButtonElement(True, MIDI_CC_TYPE, channel, identifier, name=name) -------------------------------------------------------------------------------- /_MPDMkIIBase/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_MPDMkIIBase\__init__.py 2 | HIDE_SCRIPT = True -------------------------------------------------------------------------------- /_MxDCore/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_MxDCore\__init__.py 2 | from MxDCore import MxDCore as _MxDCore 3 | import sys, warnings 4 | 5 | def set_manager(manager): 6 | raise manager != None or AssertionError 7 | raise _MxDCore.instance == None or AssertionError 8 | _MxDCore.instance = _MxDCore() 9 | _MxDCore.instance.set_manager(manager) 10 | return 11 | 12 | 13 | def disconnect(): 14 | _MxDCore.instance.disconnect() 15 | del _MxDCore.instance 16 | 17 | 18 | def execute_command(device_id, object_id, command, arguments): 19 | raise _MxDCore.instance != None or AssertionError 20 | raise isinstance(arguments, (str, unicode)) or AssertionError 21 | if hasattr(_MxDCore.instance, command): 22 | try: 23 | with warnings.catch_warnings(record=True) as caught_warnings: 24 | _MxDCore.instance.update_device_context(device_id, object_id) 25 | function = getattr(_MxDCore.instance, command) 26 | function(device_id, object_id, arguments) 27 | for warning in caught_warnings: 28 | _MxDCore.instance._warn(device_id, object_id, str(warning.message)) 29 | 30 | except: 31 | if sys.exc_info()[0].__name__ == 'RuntimeError': 32 | assert_reason = str(sys.exc_info()[1]) 33 | else: 34 | assert_reason = 'Invalid syntax' 35 | _MxDCore.instance._raise(device_id, object_id, assert_reason) 36 | 37 | else: 38 | _MxDCore.instance._raise(device_id, object_id, 'Unknown command: ' + command) 39 | return -------------------------------------------------------------------------------- /_Serato/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Serato\__init__.py 2 | from Serato import Serato 3 | HIDE_SCRIPT = True 4 | 5 | def create_instance(c_instance): 6 | """ Creates and returns the Serato script """ 7 | return Serato(c_instance) -------------------------------------------------------------------------------- /_Tools/InstantMappings-HowTo.txt: -------------------------------------------------------------------------------- 1 | InstantMappings HowTo 2 | ===================== 3 | 4 | With the file 'UserConfiguration.txt' provided in 5 | this directory, you can create your own Instant 6 | Mappings. 7 | 8 | Note: Since this mechanism relies on the scripts 9 | added for Live 6, you can solely map the given 10 | functions to your Control Surface. You can neither 11 | add functions nor can you change the banks of 12 | device parameters. 13 | 14 | 15 | 1. Create a directory in 'User Remote Scripts'. 16 | The name of the directory will show up in the 17 | list of Control Surfaces in Live. 18 | Naming: The name of the directory should not 19 | start with '_' or '.'. 20 | 21 | 2. Copy the the file 'UserConfiguration.txt' into 22 | your directory. The name of the file needs to 23 | remain unchanged. 24 | 25 | 3. Edit the copy to adapt it to your needs. The 26 | comments in the file will tell you what to do. 27 | 28 | -------------------------------------------------------------------------------- /_Tools/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\_Tools\__init__.py 2 | pass -------------------------------------------------------------------------------- /microKONTROL/Preset.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cylab/AbletonLive9_RemoteScripts/8808668c358288c0042444ec4a91ec3f3206953d/microKONTROL/Preset.syx -------------------------------------------------------------------------------- /microKONTROL/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\microKONTROL\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2372, product_ids=[256], model_name='microKONTROL'), 15 | PORTS_KEY: [inport(props=[NOTES_CC]), 16 | inport(props=[NOTES_CC, SCRIPT]), 17 | inport(props=[NOTES_CC]), 18 | outport(props=[PLAIN_OLD_MIDI]), 19 | outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /padKONTROL/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\padKONTROL\__init__.py 2 | from _Generic.GenericScript import GenericScript 3 | import Live 4 | from config import * 5 | 6 | def create_instance(c_instance): 7 | """ The generic script can be customised by using parameters (see config.py). """ 8 | return GenericScript(c_instance, Live.MidiMap.MapMode.absolute, Live.MidiMap.MapMode.absolute, DEVICE_CONTROLS, TRANSPORT_CONTROLS, VOLUME_CONTROLS, TRACKARM_CONTROLS, BANK_CONTROLS, CONTROLLER_DESCRIPTIONS, MIXER_OPTIONS) 9 | 10 | 11 | from _Framework.Capabilities import * 12 | 13 | def get_capabilities(): 14 | return {CONTROLLER_ID_KEY: controller_id(vendor_id=2372, product_ids=[261], model_name='padKONTROL'), 15 | PORTS_KEY: [inport(props=[PLAIN_OLD_MIDI]), 16 | inport(props=[NOTES_CC, SCRIPT]), 17 | inport(props=[]), 18 | outport(props=[PLAIN_OLD_MIDI]), 19 | outport(props=[SCRIPT])]} -------------------------------------------------------------------------------- /padKONTROL/config.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\padKONTROL\config.py 2 | from consts import * 3 | TRANSPORT_CONTROLS = {'STOP': GENERIC_STOP, 4 | 'PLAY': GENERIC_PLAY, 5 | 'REC': GENERIC_REC, 6 | 'LOOP': GENERIC_LOOP, 7 | 'RWD': GENERIC_RWD, 8 | 'FFWD': GENERIC_FFWD} 9 | DEVICE_CONTROLS = (GENERIC_ENC1, 10 | GENERIC_ENC2, 11 | GENERIC_ENC3, 12 | GENERIC_ENC4, 13 | GENERIC_ENC5, 14 | GENERIC_ENC6, 15 | GENERIC_ENC7, 16 | GENERIC_ENC8) 17 | VOLUME_CONTROLS = GENERIC_SLIDERS 18 | TRACKARM_CONTROLS = (GENERIC_BUT1, 19 | GENERIC_BUT2, 20 | GENERIC_BUT3, 21 | GENERIC_BUT4, 22 | GENERIC_BUT5, 23 | GENERIC_BUT6, 24 | GENERIC_BUT7, 25 | GENERIC_BUT8) 26 | BANK_CONTROLS = {'TOGGLELOCK': GENERIC_BUT9, 27 | 'BANKDIAL': -1, 28 | 'NEXTBANK': -1, 29 | 'PREVBANK': -1, 30 | 'BANK1': -1, 31 | 'BANK2': -1, 32 | 'BANK3': -1, 33 | 'BANK4': -1, 34 | 'BANK5': -1, 35 | 'BANK6': -1, 36 | 'BANK7': -1, 37 | 'BANK8': -1} 38 | PAD_TRANSLATION = ((0, 0, 61, 9), 39 | (1, 0, 69, 9), 40 | (2, 0, 65, 9), 41 | (3, 0, 63, 9), 42 | (0, 1, 60, 9), 43 | (1, 1, 59, 9), 44 | (2, 1, 57, 9), 45 | (3, 1, 55, 9), 46 | (0, 2, 49, 9), 47 | (1, 2, 51, 9), 48 | (2, 2, 68, 9), 49 | (3, 2, 56, 9), 50 | (0, 3, 48, 9), 51 | (1, 3, 52, 9), 52 | (2, 3, 54, 9), 53 | (3, 3, 58, 9)) 54 | CONTROLLER_DESCRIPTIONS = {'INPUTPORT': 'padKONTROL (Port 2)', 55 | 'OUTPUTPORT': 'padKONTROL (Port 2)', 56 | 'CHANNEL': 9, 57 | 'PAD_TRANSLATION': PAD_TRANSLATION} 58 | MIXER_OPTIONS = {'NUMSENDS': 2, 59 | 'SEND1': (-1, -1, -1, -1, -1, -1, -1, -1), 60 | 'SEND2': (-1, -1, -1, -1, -1, -1, -1, -1), 61 | 'MASTERVOLUME': 21} -------------------------------------------------------------------------------- /pushbase/__init__.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\__init__.py 2 | from __future__ import absolute_import, print_function -------------------------------------------------------------------------------- /pushbase/accent_component.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\accent_component.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.mode import ModesComponent 4 | 5 | class DummyFullVelocity(object): 6 | enabled = False 7 | 8 | 9 | class AccentComponent(ModesComponent): 10 | 11 | def __init__(self, *a, **k): 12 | super(AccentComponent, self).__init__(*a, **k) 13 | self._full_velocity = None 14 | self.add_mode('disabled', None, 'Accent.Off') 15 | self.add_mode('enabled', (self._on_accent_on, self._on_accent_off), 'Accent.On') 16 | self.selected_mode = 'disabled' 17 | self.set_full_velocity(None) 18 | return 19 | 20 | def set_full_velocity(self, full_velocity): 21 | full_velocity = full_velocity or DummyFullVelocity() 22 | if self._full_velocity != None: 23 | self._full_velocity.enabled = False 24 | self._full_velocity = full_velocity 25 | self._full_velocity.enabled = self.selected_mode == 'enabled' 26 | return 27 | 28 | @property 29 | def activated(self): 30 | return self._full_velocity.enabled 31 | 32 | def _on_accent_off(self): 33 | self._full_velocity.enabled = False 34 | 35 | def _on_accent_on(self): 36 | self._full_velocity.enabled = True -------------------------------------------------------------------------------- /pushbase/control_element_factory.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\control_element_factory.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import depends 4 | from ableton.v2.control_surface import MIDI_CC_TYPE, MIDI_NOTE_TYPE, PrioritizedResource, midi 5 | from ableton.v2.control_surface.elements import SysexElement 6 | from .configurable_button_element import ConfigurableButtonElement 7 | 8 | @depends(skin=None) 9 | def create_button(note, name, skin = None, **k): 10 | return ConfigurableButtonElement(True, MIDI_CC_TYPE, 0, note, name=name, skin=skin, **k) 11 | 12 | 13 | def create_modifier_button(note, name, **k): 14 | return create_button(note, name, resource_type=PrioritizedResource, **k) 15 | 16 | 17 | @depends(skin=None) 18 | def create_note_button(note, name, skin = None, **k): 19 | return ConfigurableButtonElement(True, MIDI_NOTE_TYPE, 0, note, skin=skin, name=name, **k) 20 | 21 | 22 | def make_send_message_generator(prefix): 23 | return lambda value_bytes: prefix + value_bytes + (midi.SYSEX_END,) 24 | 25 | 26 | def create_sysex_element(message_prefix, enquire_message = None, default_value = None): 27 | return SysexElement(sysex_identifier=message_prefix, send_message_generator=make_send_message_generator(message_prefix), enquire_message=enquire_message, default_value=default_value) -------------------------------------------------------------------------------- /pushbase/live_util.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\live_util.py 2 | from __future__ import absolute_import, print_function 3 | 4 | def get_position_for_new_track(song, selected_track_index): 5 | """ 6 | Returns the index for a new track. The track will always be added to the 7 | right of the selected track. If a group track is selected, it will be added 8 | after the group. 9 | """ 10 | if not -1 <= selected_track_index < len(song.tracks): 11 | raise IndexError('Index %i needs to be in [-1..%i]' % (selected_track_index, len(song.tracks))) 12 | if selected_track_index == -1: 13 | index = -1 14 | else: 15 | index = selected_track_index + 1 16 | if song.tracks[selected_track_index].is_foldable: 17 | while index < len(song.tracks) and song.tracks[index].is_grouped: 18 | index += 1 19 | 20 | return index -------------------------------------------------------------------------------- /pushbase/matrix_maps.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\matrix_maps.py 2 | """ 3 | Pad Translations for Drum Rack (pad_x, pad_y, note, channel) 4 | """ 5 | from __future__ import absolute_import, print_function 6 | PAD_TRANSLATIONS = ((0, 0, 60, 13), 7 | (1, 0, 61, 13), 8 | (2, 0, 62, 13), 9 | (3, 0, 63, 13), 10 | (0, 1, 52, 13), 11 | (1, 1, 53, 13), 12 | (2, 1, 54, 13), 13 | (3, 1, 55, 13), 14 | (0, 2, 44, 13), 15 | (1, 2, 45, 13), 16 | (2, 2, 46, 13), 17 | (3, 2, 47, 13), 18 | (0, 3, 36, 13), 19 | (1, 3, 37, 13), 20 | (2, 3, 38, 13), 21 | (3, 3, 39, 13)) 22 | NON_FEEDBACK_CHANNEL = 0 23 | FEEDBACK_CHANNELS = range(8, 16) 24 | PAD_FEEDBACK_CHANNEL = FEEDBACK_CHANNELS[-1] 25 | PLAYHEAD_FEEDBACK_CHANNELS = range(1, 8) -------------------------------------------------------------------------------- /pushbase/messenger_mode_component.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\messenger_mode_component.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import BooleanContext 4 | from ableton.v2.control_surface.mode import ModesComponent 5 | from .message_box_component import Messenger 6 | 7 | class MessengerModesComponent(ModesComponent, Messenger): 8 | notify_when_enabled = False 9 | 10 | def __init__(self, *a, **k): 11 | super(MessengerModesComponent, self).__init__(*a, **k) 12 | self._mode_message_map = {} 13 | self._is_being_enabled = BooleanContext() 14 | 15 | def add_mode(self, name, mode_or_component, message = None, **k): 16 | super(MessengerModesComponent, self).add_mode(name, mode_or_component, **k) 17 | self._mode_message_map[name] = message 18 | 19 | def on_enabled_changed(self): 20 | with self._is_being_enabled(): 21 | super(MessengerModesComponent, self).on_enabled_changed() 22 | 23 | def _do_enter_mode(self, name): 24 | super(MessengerModesComponent, self)._do_enter_mode(name) 25 | if not self._is_being_enabled or self.notify_when_enabled: 26 | message = self._mode_message_map.get(name, None) 27 | if message: 28 | self.show_notification(message) 29 | return -------------------------------------------------------------------------------- /pushbase/pad_control.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\pad_control.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface.control import PlayableControl 4 | 5 | class PadControl(PlayableControl): 6 | 7 | class State(PlayableControl.State): 8 | 9 | def __init__(self, sensitivity_profile = None, *a, **k): 10 | super(PadControl.State, self).__init__(*a, **k) 11 | self._sensitivity_profile = sensitivity_profile 12 | 13 | def _get_sensitivity_profile(self): 14 | return self._sensitivity_profile 15 | 16 | def _set_sensitivity_profile(self, value): 17 | self._sensitivity_profile = value 18 | self._update_sensitivity() 19 | 20 | sensitivity_profile = property(_get_sensitivity_profile, _set_sensitivity_profile) 21 | 22 | def set_control_element(self, control_element): 23 | super(PadControl.State, self).set_control_element(control_element) 24 | self._update_sensitivity() 25 | 26 | def _update_sensitivity(self): 27 | if self._control_element and self._sensitivity_profile: 28 | self._control_element.sensitivity_profile = self._sensitivity_profile -------------------------------------------------------------------------------- /pushbase/parameter_provider.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\parameter_provider.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import liveobj_valid, NamedTuple, EventObject 4 | DISCRETE_PARAMETERS_DICT = {'GlueCompressor': ('Ratio', 'Attack', 'Release', 'Peak Clip In')} 5 | 6 | def is_parameter_quantized(parameter, parent_device): 7 | is_quantized = False 8 | if liveobj_valid(parameter): 9 | device_class = getattr(parent_device, 'class_name', None) 10 | is_quantized = parameter.is_quantized or device_class in DISCRETE_PARAMETERS_DICT and parameter.name in DISCRETE_PARAMETERS_DICT[device_class] 11 | return is_quantized 12 | 13 | 14 | class ParameterInfo(NamedTuple): 15 | parameter = None 16 | default_encoder_sensitivity = None 17 | fine_grain_encoder_sensitivity = None 18 | 19 | def __init__(self, name = None, *a, **k): 20 | super(ParameterInfo, self).__init__(_overriden_name=name, *a, **k) 21 | 22 | @property 23 | def name(self): 24 | return self._overriden_name or getattr(self.parameter, 'name', '') 25 | 26 | 27 | class ParameterProvider(EventObject): 28 | __events__ = ('parameters',) 29 | 30 | @property 31 | def parameters(self): 32 | return [] -------------------------------------------------------------------------------- /pushbase/playhead_element.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\playhead_element.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import nop 4 | from .proxy_element import ProxyElement 5 | 6 | class NullPlayhead(object): 7 | notes = [] 8 | start_time = 0.0 9 | step_length = 1.0 10 | velocity = 0.0 11 | wrap_around = False 12 | track = None 13 | clip = None 14 | set_feedback_channels = nop 15 | 16 | 17 | class PlayheadElement(ProxyElement): 18 | 19 | def __init__(self, playhead = None, *a, **k): 20 | super(PlayheadElement, self).__init__(proxied_object=playhead, proxied_interface=NullPlayhead()) 21 | 22 | def reset(self): 23 | self.track = None 24 | return -------------------------------------------------------------------------------- /pushbase/proxy_element.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\proxy_element.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import Proxy 4 | from ableton.v2.control_surface import ControlElement 5 | 6 | class ProxyElement(Proxy, ControlElement): 7 | 8 | def reset(self): 9 | try: 10 | super(ProxyElement, self).__getattr__('reset')() 11 | except AttributeError: 12 | pass -------------------------------------------------------------------------------- /pushbase/song_utils.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\song_utils.py 2 | from __future__ import absolute_import, print_function 3 | 4 | def is_return_track(song, track): 5 | return track in list(song.return_tracks) 6 | 7 | 8 | def delete_track_or_return_track(song, track): 9 | tracks = list(song.tracks) 10 | if track in tracks: 11 | track_index = tracks.index(track) 12 | song.delete_track(track_index) 13 | else: 14 | track_index = list(song.return_tracks).index(track) 15 | song.delete_return_track(track_index) -------------------------------------------------------------------------------- /pushbase/sysex.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\sysex.py 2 | from __future__ import absolute_import, print_function 3 | USER_MODE = 1 4 | LIVE_MODE = 0 -------------------------------------------------------------------------------- /pushbase/track_frozen_mode.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\track_frozen_mode.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import listens 4 | from ableton.v2.control_surface.mode import ModesComponent 5 | 6 | class TrackFrozenModesComponent(ModesComponent): 7 | 8 | def __init__(self, default_mode = None, frozen_mode = None, *a, **k): 9 | super(TrackFrozenModesComponent, self).__init__(*a, **k) 10 | raise default_mode is not None or AssertionError 11 | if not frozen_mode is not None: 12 | raise AssertionError 13 | self.add_mode('default', default_mode) 14 | self.add_mode('frozen', frozen_mode) 15 | self._on_selected_track_is_frozen_changed.subject = self.song.view 16 | self.is_enabled() and self._update_selected_mode() 17 | return 18 | 19 | def _update_selected_mode(self): 20 | self.selected_mode = 'frozen' if self.song.view.selected_track.is_frozen else 'default' 21 | 22 | @listens('selected_track.is_frozen') 23 | def _on_selected_track_is_frozen_changed(self): 24 | self._update_selected_mode() 25 | 26 | def update(self): 27 | super(TrackFrozenModesComponent, self).update() 28 | if self.is_enabled(): 29 | self._update_selected_mode() -------------------------------------------------------------------------------- /pushbase/transport_component.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\transport_component.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.control_surface import components 4 | 5 | class TransportComponent(components.TransportComponent): 6 | 7 | def __init__(self, *a, **k): 8 | super(TransportComponent, self).__init__(*a, **k) 9 | self._metronome_toggle.view_transform = lambda v: ('Metronome.On' if v else 'Metronome.Off') -------------------------------------------------------------------------------- /pushbase/velocity_levels_element.py: -------------------------------------------------------------------------------- 1 | # Embedded file name: c:\Jenkins\live\output\win_32_static\Release\python-bundle\MIDI Remote Scripts\pushbase\velocity_levels_element.py 2 | from __future__ import absolute_import, print_function 3 | from ableton.v2.base import EventObject, listenable_property 4 | from .proxy_element import ProxyElement 5 | 6 | class NullVelocityLevels(EventObject): 7 | enabled = False 8 | target_note = -1 9 | target_channel = -1 10 | source_channel = -1 11 | notes = [] 12 | 13 | @property 14 | def levels(self): 15 | return [] 16 | 17 | @listenable_property 18 | def last_played_level(self): 19 | return -1.0 20 | 21 | 22 | class VelocityLevelsElement(ProxyElement): 23 | 24 | def __init__(self, velocity_levels = None, *a, **k): 25 | super(VelocityLevelsElement, self).__init__(proxied_object=velocity_levels, proxied_interface=NullVelocityLevels()) 26 | 27 | def reset(self): 28 | self.notes = [] 29 | self.source_channel = -1 --------------------------------------------------------------------------------