class Alias(LividControlSurface): _sysex_id = 11 _model_name = 'Alias' _color_type = 'OhmRGB' def __init__(self, c_instance): super(Alias, self).__init__(c_instance) self._skin = Skin(AliasColors) with self.component_guard(): self._setup_controls() self._setup_m4l_interface() self._setup_session_control() self._setup_mixer_control() self._setup_mixer_nav() def _setup_controls(self): is_momentary = True optimized = True resource = PrioritizedResource self._fader = [ MonoEncoderElement(msg_type=MIDI_CC_TYPE, channel=CHANNEL, identifier=ALIAS_FADERS[index], name='Fader_' + str(index), num=index, script=self, optimized_send_midi=optimized, resource_type=resource, monobridge=self._monobridge) for index in range(9) ] self._button = [ MonoButtonElement(is_momentary=is_momentary, msg_type=MIDI_NOTE_TYPE, channel=CHANNEL, identifier=ALIAS_BUTTONS[index], name='Button_' + str(index), script=self, skin=self._skin, optimized_send_midi=optimized, resource_type=resource, monobridge=self._monobridge) for index in range(16) ] self._dial = [ MonoEncoderElement(msg_type=MIDI_CC_TYPE, channel=CHANNEL, identifier=ALIAS_DIALS[index], name='Dial_' + str(index), num=index + 8, script=self) for index in range(16) ] self._encoder = MonoEncoderElement(msg_type=MIDI_CC_TYPE, channel=CHANNEL, identifier=ALIAS_ENCODER, name='Encoder', script=self, optimized_send_midi=optimized, resource_type=resource, monobridge=self._monobridge) self._fader_matrix = ButtonMatrixElement(name='FaderMatrix', rows=[self._fader[:8]]) self._button_matrix = ButtonMatrixElement( name='ButtonMatrix', rows=[self._button[:8], self._button[8:]]) self._dial_matrix = ButtonMatrixElement( name='DialMatrix', rows=[self._dial[:8], self._dial[8:]]) def _setup_m4l_interface(self): self._m4l_interface = M4LInterfaceComponent( controls=self.controls, component_guard=self.component_guard) self.get_control_names = self._m4l_interface.get_control_names self.get_control = self._m4l_interface.get_control self.grab_control = self._m4l_interface.grab_control self.release_control = self._m4l_interface.release_control def _setup_mixer_control(self): self._mixer = MonoMixerComponent(name='Mixer', tracks_provider=self._session_ring, track_assigner=SimpleTrackAssigner(), invert_mute_feedback=True, auto_name=True, enable_skinning=True) self._mixer.layer = Layer( volume_controls=self._fader_matrix, send_controls=self._dial_matrix, mute_buttons=self._button_matrix.submatrix[:, 0], arm_buttons=self._button_matrix.submatrix[:, 1]) self._mixer.master_strip().layer = Layer(volume_control=self._fader[8]) self._mixer.set_enabled(True) self.song.view.selected_track = self._mixer.channel_strip(0)._track def _setup_session_control(self): self._session_ring = SessionRingComponent( num_tracks=8, num_scenes=1, tracks_to_use=lambda: self.song.visible_tracks + self.song. return_tracks) self._session_ring.set_enabled(True) def _setup_mixer_nav(self): self._nav_change.subject = self._encoder @listens('value') def _nav_change(self, value): self._session_ring.set_offsets( int((float(value) / float(127)) * max(8, len(self._session_ring.tracks_to_use()) - 8)), self._session_ring.scene_offset)
class Cntrlr(Base_Cntrlr): def __init__(self, *a, **k): super(Cntrlr, self).__init__(*a, **k) self._skin = Skin(CntrlrColors) for button in self._grid: button._skin = self._skin self._main_modes.selected_mode = 'Translations' self.schedule_message(3, self.initialize_translations) def initialize_santos_mode(self): self._main_modes.selected_mode = 'SantosMode' self._device_toggle.scan_all() self._session_ring.set_offsets(1, 0) def initialize_translations(self): self._main_modes.selected_mode = "Translations" self.schedule_message(3, self.initialize_santos_mode) def _open_log(self): self.log_message("<<<<<<<<<<<<<<<<<<<<= " + str(self._host_name) + " for Santos Garcia " + str(self._version_check) + " log opened =>>>>>>>>>>>>>>>>>>>") self.show_message(str(self._host_name) + ' Control Surface Loaded') def _setup_device_toggle(self): self._device_toggle = ToggleDeviceEnabledComponent(self, "@dd") self._device_toggle.layer = Layer(priority = 9, matrix = self._key_matrix.submatrix[4:12, 1:]) self._device_toggle.set_enabled(False) def _update_session_position(self): self._session_ring.set_offsets(1, 0) def _setup_mixer_control(self): self._mixer = MonoMixerComponent(name = 'Mixer', num_returns = 4,tracks_provider = SessionRingComponent(num_tracks = 4, num_scenes = 4), track_assigner = simple_track_assigner, invert_mute_feedback = True, auto_name = True, enable_skinning = True) if FREE_ENCODER_IS_CROSSFADER: self._mixer.layer = Layer(priority = 4, crossfader_control = self._encoder[1]) self._mixer.main_faders_layer = AddLayerMode(self._mixer, Layer(priority = 4, volume_controls = self._fader_matrix.submatrix[:4, :], return_controls = self._fader_matrix.submatrix[4:, :],)) self._mixer.main_buttons_layer = AddLayerMode(self._mixer, Layer(priority = 4, mute_buttons = self._key_matrix.submatrix[8:12, 1:], stop_clip_buttons = self._key_matrix.submatrix[4:8, 1:], arming_track_select_buttons = self._key_matrix.submatrix[:4, 1:],)) self._mixer.solo_buttons_layer = AddLayerMode(self._mixer, Layer(priority = 4, solo_buttons = self._key_matrix.submatrix[8:12, 1:],)) self._mixer.shifted_buttons_layer = AddLayerMode(self._mixer, Layer(priority = 4, track_select_buttons = self._key_matrix.submatrix[:4, 1:], stop_clip_buttons = self._key_matrix.submatrix[4:8, 1:], solo_buttons = self._key_matrix.submatrix[8:12, 1:],)) self._mixer.stop_layer = AddLayerMode(self._mixer, Layer(priority = 4, stop_clip_buttons = self._key_matrix.submatrix[8:12, 1:],)) if EQS_INSTEAD_OF_MACROS: self._mixer.main_knobs_layer = AddLayerMode(self._mixer, Layer(priority = 4, send_controls = self._knob_left_matrix, eq_gain_controls = self._knob_right_matrix)) else: self._mixer.main_knobs_layer = AddLayerMode(self._mixer, Layer(priority = 4, send_controls = self._knob_left_matrix, parameter_controls = self._knob_right_matrix)) #self._mixer.main_knobs_layer = AddLayerMode(self._mixer, Layer(priority = 4)) self._mixer.master_fader_layer = AddLayerMode(self._mixer.master_strip(), Layer(priority = 4, volume_control = self._fader[7])) self._mixer.instrument_buttons_layer = AddLayerMode(self._mixer, Layer(priority = 4, mute_buttons = self._key_matrix.submatrix[:4, 1:], track_select_buttons = self._key_matrix.submatrix[4:8, 1:],)) self._mixer.set_enabled(False) def _setup_session_control(self): self._session_ring = SessionRingComponent(num_tracks = 3, num_scenes = 4) self._session_ring.set_enabled(False) self._session_navigation = CntrlrSessionNavigationComponent(name = 'SessionNavigation', session_ring = self._session_ring) self._session_navigation._vertical_banking.scroll_up_button.color = 'Session.NavigationButtonOn' self._session_navigation._vertical_banking.scroll_down_button.color = 'Session.NavigationButtonOn' self._session_navigation._horizontal_banking.scroll_up_button.color = 'Session.NavigationButtonOn' self._session_navigation._horizontal_banking.scroll_down_button.color = 'Session.NavigationButtonOn' self._session_navigation._vertical_paginator.scroll_up_button.color = 'Session.PageNavigationButtonOn' self._session_navigation._vertical_paginator.scroll_down_button.color = 'Session.PageNavigationButtonOn' self._session_navigation._horizontal_paginator.scroll_up_button.color = 'Session.PageNavigationButtonOn' self._session_navigation._horizontal_paginator.scroll_down_button.color = 'Session.PageNavigationButtonOn' self._session_navigation.bank_dial_layer = AddLayerMode(self._session_navigation, Layer(priority = 5, track_bank_dial = self._encoder[3], scene_bank_dial = self._encoder[2],)) self._session_navigation.nav_dial_layer = AddLayerMode(self._session_navigation, Layer(priority = 5, scene_nav_dial = self._encoder[2], track_nav_dial = self._encoder[3],)) self._session_navigation.select_dial_layer = AddLayerMode(self._session_navigation, Layer(priority = 5)) """self._session_navigation.nav_layer = AddLayerMode(self._session_navigation, Layer(priority = 4, page_down_button = self._button[14], page_up_button = self._button[15], page_left_button = self._button[12], page_right_button = self._button[13]))""" self._session_navigation.nav_layer = AddLayerMode(self._session_navigation, Layer(priority = 4)) self._session_navigation.set_enabled(False) self._session = SpecialCntrlrSessionComponent(session_ring = self._session_ring, auto_name = True) hasattr(self._session, '_enable_skinning') and self._session._enable_skinning() self._session.clip_launch_layer = LayerMode(self._session, Layer(priority = 4, clip_launch_buttons = self._matrix.submatrix[:,:])) self._session.scene_launch_layer = AddLayerMode(self._session._selected_scene, Layer(priority = 4, launch_button = self._button[28],)) self._session.set_enabled(False) self._session_zoom = SessionOverviewComponent(name = 'SessionZoom', session_ring = self._session_ring, enable_skinning = True) self._session_zoom.layer = Layer(priority = 4, button_matrix = self._matrix.submatrix[:,:]) self._session.clip_launch_layer = LayerMode(self._session, Layer(priority = 4, clip_launch_buttons = self._matrix.submatrix[:3,:], scene_launch_buttons = self._matrix.submatrix[3:,:])) self._session_ring.set_offsets(1, 0) self._session_zoom.set_enabled(False) def _setup_translations2(self): self._translated_controls2 = self._knobs #+ self._button[:20] + self._button[28:] self._translations2 = TranslationComponent(self._translated_controls2, user_channel_offset = 9, channel = 9) self._translations2.name = 'TranslationComponent' self._translations2.layer = Layer(priority = 10,) self._translations2.set_enabled(False) def _setup_modes(self): self._setup_device_toggle() self._setup_translations2() self._mixer.santos_buttons_layer = AddLayerMode(self._mixer, Layer(priority = 4, arming_track_select_buttons = self._key_matrix.submatrix[:4, 1:],)) super(Cntrlr, self)._setup_modes() common = CompoundMode(self._mixer, self._session_ring) main_buttons=CompoundMode(self._mixer.main_buttons_layer, self._transport, self._recorder, self._recorder.main_layer, self._device, self._device.button_layer) shifted_main_buttons=CompoundMode(self._mixer.solo_buttons_layer, self._recorder, self._recorder.shift_layer, self._session, self._session.scene_launch_layer, self._device, self._device.button_layer) main_faders=CompoundMode(self._mixer.main_faders_layer, self._mixer.master_fader_layer) main_dials=CompoundMode(self._view_control, self._view_control.main_layer, self._device, self._device.dial_layer, self._device_navigator.select_dial_layer, self.encoder_navigation_on) shifted_dials=CompoundMode(self._session_navigation, self._session_navigation.nav_dial_layer, self._device, self._device.dial_layer, self._device_navigator.select_dial_layer, self.encoder_navigation_on) self._main_modes = ModesComponent(name = 'MainModes') self._main_modes.add_mode('disabled', [self._background]) self._main_modes.add_mode('MixMode', [common, self._instrument, self._instrument.shift_button_layer, self._mixer, main_faders, self._mixer.main_knobs_layer, self._device, self._device_navigator, self._device_navigator.main_layer,], behaviour = DefaultedBehaviour(default_mode = 'SantosMode',color = 'ModeButtons.DeviceSelector', off_color = 'ModeButtons.DeviceSelectorDisabled')) self._main_modes.add_mode('ModSwitcher', [common, main_faders, main_dials, self._mixer.main_knobs_layer, self._session_navigation.select_dial_layer, self._view_control, self._view_control.main_layer, self._device_navigator.select_dial_layer, self.encoder_navigation_on, self._modswitcher, DelayMode(self._update_modswitcher, delay = .1)], behaviour = ColoredCancellableBehaviourWithRelease(color = 'ModeButtons.ModSwitcher', off_color = 'ModeButtons.ModSwitcherDisabled')) self._main_modes.add_mode('Translations', [common, main_faders, main_dials, self._mixer.main_knobs_layer, self._translations, DelayMode(self._translations.selector_layer, delay = .1)], behaviour = DefaultedBehaviour(default_mode = 'SantosMode', color = 'ModeButtons.Translations', off_color = 'ModeButtons.TranslationsDisabled')) self._main_modes.add_mode('DeviceSelector', [common, self._device_selector, DelayMode(self._device_selector.select_layer, delay = .1), DelayMode(self.modhandler.lock_layer, delay = .1), DelayMode(self._device_selector.assign_layer, delay = .5), main_buttons, main_dials, main_faders, self._mixer.main_knobs_layer, self._device, self._device_navigator], behaviour = ColoredCancellableBehaviourWithRelease(color = 'ModeButtons.DeviceSelector', off_color = 'ModeButtons.DeviceSelectorDisabled')) self._main_modes.add_mode('SantosMode', [self._mixer, self._mixer.main_faders_layer, self._device_toggle, self._translations2, self._instrument, self._instrument.shift_button_layer, self._mixer.santos_buttons_layer, self._device, self._device_navigator, self._session_ring, DelayMode(self._update_session_position, delay = .1)], ) self._main_modes.layer = Layer(priority = 4, ModSwitcher_button = self._encoder_button[2], MixMode_button = self._encoder_button[0], Translations_button = self._encoder_button[3]) #, self._main_modes.selected_mode = 'disabled' self._main_modes.set_enabled(True) # a
class Alias(LividControlSurface): _sysex_id = 11 _model_name = 'Alias' _color_type = 'OhmRGB' def __init__(self, c_instance): super(Alias, self).__init__(c_instance) self._skin = Skin(AliasColors) with self.component_guard(): self._setup_controls() self._setup_m4l_interface() self._setup_session_control() self._setup_mixer_control() self._setup_mixer_nav() def _setup_controls(self): is_momentary = True optimized = True resource = PrioritizedResource self._fader = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = ALIAS_FADERS[index], name = 'Fader_' + str(index), num = index, script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(9)] self._button = [MonoButtonElement(is_momentary = is_momentary, msg_type = MIDI_NOTE_TYPE, channel = CHANNEL, identifier = ALIAS_BUTTONS[index], name = 'Button_' + str(index), script = self, skin = self._skin, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) for index in range(16)] self._dial = [MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = ALIAS_DIALS[index], name = 'Dial_' + str(index), num = index + 8, script = self) for index in range(16)] self._encoder = MonoEncoderElement(msg_type = MIDI_CC_TYPE, channel = CHANNEL, identifier = ALIAS_ENCODER, name = 'Encoder', script = self, optimized_send_midi = optimized, resource_type = resource, monobridge = self._monobridge) self._fader_matrix = ButtonMatrixElement(name = 'FaderMatrix', rows = [self._fader[:8]]) self._button_matrix = ButtonMatrixElement(name = 'ButtonMatrix', rows = [self._button[:8], self._button[8:]]) self._dial_matrix = ButtonMatrixElement(name = 'DialMatrix', rows = [self._dial[:8], self._dial[8:]]) def _setup_m4l_interface(self): self._m4l_interface = M4LInterfaceComponent(controls=self.controls, component_guard=self.component_guard) self.get_control_names = self._m4l_interface.get_control_names self.get_control = self._m4l_interface.get_control self.grab_control = self._m4l_interface.grab_control self.release_control = self._m4l_interface.release_control def _setup_mixer_control(self): self._mixer = MonoMixerComponent(name = 'Mixer', tracks_provider = self._session_ring, track_assigner = simple_track_assigner, invert_mute_feedback = True, auto_name = True, enable_skinning = True) self._mixer.layer = Layer(volume_controls = self._fader_matrix, send_controls = self._dial_matrix, mute_buttons = self._button_matrix.submatrix[:,0], arm_buttons = self._button_matrix.submatrix[:,1]) self._mixer.master_strip().layer = Layer(volume_control = self._fader[8]) self._mixer.set_enabled(True) self.song.view.selected_track = self._mixer.channel_strip(0)._track def _setup_session_control(self): self._session_ring = SessionRingComponent(num_tracks = 8, num_scenes = 1, tracks_to_use = lambda : self.song.visible_tracks + self.song.return_tracks) self._session_ring.set_enabled(True) def _setup_mixer_nav(self): self._nav_change.subject = self._encoder @listens('value') def _nav_change(self, value): self._session_ring.set_offsets(int((float(value)/float(127))*max(8, len(self._session_ring.tracks_to_use())-8)), self._session_ring.scene_offset) # a