class MonoPedal(ControlSurface): def __init__(self, *a, **k): self.log_message = logger.warning super(MonoPedal, self).__init__(*a, **k) self._monomod_version = 'b996' self._codec_version = 'b996' self._cntrlr_version = 'b996' self._cntrlr = None self._host_name = 'MonoPedal' self._color_type = 'OhmRGB' self.hosts = [] self._timer = 0 self.flash_status = 1 self._touched = 0 self._last_main_mode = 'looper' with self.component_guard(): self._setup_monobridge() self._setup_controls() self._setup_looper() self._setup_launcher() self._setup_device_control() self._setup_modes() self.schedule_message(1, self._open_log) #self._loop_selector.set_enabled(True) """script initialization methods""" def _open_log(self): self.log_message("<<<<<<<<<<<<<<<<<<<<= " + str(self._host_name) + " " + str(self._monomod_version) + " log opened =>>>>>>>>>>>>>>>>>>>") self.show_message(str(self._host_name) + ' Control Surface Loaded') def _setup_monobridge(self): self._monobridge = MonoBridgeElement(self) self._monobridge.name = 'MonoBridge' def _setup_controls(self): self._pedal = [None for index in range(8)] for index in range(7): self._pedal[index] = DoublePressElement(MonoButtonElement(is_momentary = True, msg_type = MIDI_CC_TYPE, channel = 0, identifier = PEDAL_DEFS[index], name = 'Pedal_'+str(index), script = self)) self._pedal[index]._report = False self._pedal[7] = LoopPedalExpressionElement(script = self, msg_type = MIDI_CC_TYPE, channel = 0, identifier = 1, map_mode = Live.MidiMap.MapMode.absolute) self._pedal[7].name = 'Pedal_'+str(7) self._pedal[7]._report = False self._leds = [None for index in range(4)] for index in range(4): red_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]) green_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+4) blue_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]+8) self._leds[index] = RGB_LED(red_led, green_led, blue_led, is_momentary = True, msg_type = MIDI_NOTE_TYPE, channel = 0, identifier = index+13, name = 'LED_' + str(index), script = self) self._select_buttons = ButtonMatrixElement() self._select_buttons.name = 'SelectMatrix' self._select_buttons.add_row([self._pedal[6], self._pedal[5], self._pedal[4], self._pedal[3]]) self._doublepress_select_buttons = ButtonMatrixElement() self._doublepress_select_buttons.name = 'DoublepressSelectMatrix' self._doublepress_select_buttons.add_row([self._pedal[6].double_press, self._pedal[5].double_press, self._pedal[4].double_press, self._pedal[3].double_press]) self._record_button = self._pedal[1] self._mute_button = self._pedal[2] self._overdub_button = self._pedal[0] def _setup_looper(self): self._looper = MonolooperComponent(self._leds, self) self._looper.layer = Layer(select_buttons = self._select_buttons, doublepress_select_buttons = self._doublepress_select_buttons, overdub_button = self._pedal[2], record_button = self._pedal[1], mute_button = self._pedal[0], expression_pedal = self._pedal[7],) def _setup_launcher(self): self._launcher = LauncherComponent(self._leds, self) self._launcher.set_enabled(False) self._launcher.layer = Layer(select_buttons = self._select_buttons, doublepress_select_buttons = self._doublepress_select_buttons, fire1_button = self._pedal[2], fire2_button = self._pedal[1], fire3_button = self._pedal[0], expression_pedal = self._pedal[7]) def _setup_device_control(self): self._device_control = DeviceControlComponent(self._leds, self) self._device_control.set_enabled(False) self._device_control.layer = Layer(select_buttons = self._select_buttons, doublepress_select_buttons = self._doublepress_select_buttons, toggle1_button = self._pedal[2], toggle2_button = self._pedal[1], toggle3_button = self._pedal[0], expression_pedal = self._pedal[7]) def _setup_modes(self): self._button_modes = ModesComponent(name='Button_Modes') self._button_modes.add_mode('launcher', self._launcher) self._button_modes.add_mode('looper', self._looper) self._button_modes.add_mode('device', self._device_control) self._button_modes.selected_mode = 'looper' self._button_modes.set_enabled(True) def receive_led(self, button, value): #self.log_message('receive led: ' + str(index) + ' ' + str(value)) pass def toggle_mode(self): self._button_modes.selected_mode = 'launcher' if self._button_modes.selected_mode is 'looper' else 'looper' self._last_main_mode = self._button_modes.selected_mode #self.log_message('toggle mode to: ' + str(self._button_modes.selected_mode)) def toggle_device_control(self, x): self._button_modes.selected_mode = 'device' if not self._button_modes.selected_mode is 'device' else self._last_main_mode if self._button_modes.selected_mode is 'device': self._device_control.set_bank(x) """called on timer""" def update_display(self): super(MonoPedal, self).update_display() self._timer = (self._timer + 1) % 256 self.flash() def flash(self): if(self.flash_status > 0): for control in self.controls: if isinstance(control, MonoButtonElement): control.flash(self._timer)
class MonoFCBE3(ControlSurface): def __init__(self, *a, **k): self.log_message = logger.warning super(MonoFCBE3, self).__init__(*a, **k) self._monomod_version = 'b996' self._codec_version = 'b996' self._cntrlr_version = 'b996' self._cntrlr = None self._host_name = 'MonoFCBE3' self._color_type = 'Monochrome' self.hosts = [] self._timer = 0 self.flash_status = 1 self._touched = 0 self._last_main_mode = 'looper' self._skin = Skin(MONOFCBColors) with self.component_guard(): self._setup_monobridge() self._setup_controls() self._setup_looper() #self._setup_undo() self._setup_delete_actions() #self._setup_autoarm() self._setup_viewcontrol() self._setup_session_recording_component() self._setup_mixer() self._setup_modes() #self._on_device_changed.subject = self._device_provider self.schedule_message(1, self._open_log) self._on_device_changed.subject = self._device_provider self._on_selected_track_changed.subject = self.song.view #self._loop_selector.set_enabled(True) """script initialization methods""" def _open_log(self): self.log_message("<<<<<<<<<<<<<<<<<<<<= " + str(self._host_name) + " " + str(self._monomod_version) + " log opened =>>>>>>>>>>>>>>>>>>>") self.show_message(str(self._host_name) + ' Control Surface Loaded') def _setup_monobridge(self): self._monobridge = MonoBridgeElement(self) self._monobridge.name = 'MonoBridge' def _setup_controls(self): self._pedal = [None for index in range(14)] for index in range(5): self._pedal[index] = DoublePressElement( MonoButtonElement(is_momentary=True, msg_type=MIDI_NOTE_TYPE, channel=0, identifier=PEDAL_DEFS[index], name='Pedal_' + str(index), script=self, skin=self._skin)) self._pedal[index]._report = False for index in range(7): self._pedal[index + 5] = MonoButtonElement( is_momentary=True, msg_type=MIDI_NOTE_TYPE, channel=0, identifier=PEDAL_DEFS[index + 5], name='Pedal_' + str(index + 5), script=self, skin=self._skin) self._pedal[index + 5]._report = False self._pedal[12] = LoopPedalExpressionElement( script=self, msg_type=MIDI_CC_TYPE, channel=0, identifier=102, map_mode=Live.MidiMap.MapMode.absolute) self._pedal[12].name = 'Pedal_' + str(12) self._pedal[12]._report = False self._pedal[13] = LoopPedalExpressionElement( script=self, msg_type=MIDI_CC_TYPE, channel=0, identifier=103, map_mode=Live.MidiMap.MapMode.absolute) self._pedal[13].name = 'Pedal_' + str(13) self._pedal[13]._report = False self._leds = self._pedal[5:9] self._select_buttons = ButtonMatrixElement() self._select_buttons.name = 'SelectMatrix' self._select_buttons.add_row( [self._pedal[5], self._pedal[6], self._pedal[7], self._pedal[8]]) #self._doublepress_select_buttons = ButtonMatrixElement() #self._doublepress_select_buttons.name = 'DoublepressSelectMatrix' #self._doublepress_select_buttons.add_row([self._pedal[9].double_press, self._pedal[8].double_press, self._pedal[7].double_press, self._pedal[6].double_press]) self._overdub_button = self._pedal[0] self._record_button = self._pedal[1] self._mute_button = self._pedal[2] self._reverse_button = self._pedal[3] def _setup_mixer(self): self._session_ring = SessionRingComponent(name='Session_Ring', num_tracks=0, num_scenes=0) 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._selected_strip.layer = Layer( priority=4, volume_control=self._pedal[13], arm_button=self._pedal[7]) def _setup_looper(self): self._looper = MonolooperComponent(self._leds, self) self._looper.layer = Layer( record_button=self._pedal[0], overdub_button=self._pedal[1], mute_button=self._pedal[2], reverse_button=self._pedal[3], trans1_button=self._pedal[5], trans2_button=self._pedal[6], expression_pedal=self._pedal[12], ) def _setup_undo(self): self._undo = UndoRedoComponent(name='Undo', is_root=True) self._undo.layer = Layer(undo_button=self._pedal[4]) self._undo.set_enabled(False) def _setup_delete_actions(self): #self._delete_component = DeleteComponent(name='Deleter', is_root=True) #self._delete_component.layer = Layer(delete_button='delete_button') #self._delete_default_component = DeleteAndReturnToDefaultComponent(name='DeleteAndDefault', is_root=True) #self._delete_default_component.layer = Layer(delete_button='delete_button') self._delete_clip = DeleteSelectedClipComponent( name='Selected_Clip_Deleter') self._delete_clip.layer = Layer(action_button=self._pedal[4]) self._delete_clip.set_enabled(False) #self._delete_scene = DeleteSelectedSceneComponent(name='Selected_Scene_Deleter', is_root=True) #self._delete_scene.layer = Layer(action_button=self._with_shift('delete_button')) def _setup_viewcontrol(self): self._viewcontrol = ViewControlComponent() self._viewcontrol.layer = Layer(priority=4, prev_track_button=self._pedal[11], next_track_button=self._pedal[10]) self._viewcontrol.set_enabled(False) def _setup_session_recording_component(self): self._clip_creator = ClipCreator() self._clip_creator.name = 'ClipCreator' self._recorder = FixedLengthSessionRecordingComponent( length_values=LENGTH_VALUES, clip_creator=self._clip_creator, view_controller=self._viewcontrol) #self._recorder = FixedLengthSessionRecordingComponent(view_controller = self._viewcontrol) self._recorder.layer = Layer(priority=4, new_button=self._pedal[8], record_button=self._pedal[9]) self._recorder.set_enabled(False) def _setup_autoarm(self): self._auto_arm = AutoArmComponent(name='Auto_Arm') self._auto_arm.can_auto_arm_track = self._can_auto_arm_track self._auto_arm._update_notification = lambda: None def _setup_modes(self): self._button_modes = ModesComponent(name='Button_Modes') self._button_modes.add_mode('looper', [ self._looper, self._viewcontrol, self._recorder, self._delete_clip ]) self._button_modes.selected_mode = 'looper' self._button_modes.set_enabled(True) def receive_led(self, button, value): #self.log_message('receive led: ' + str(index) + ' ' + str(value)) pass """called on timer""" def update_display(self): super(MonoFCBE3, self).update_display() self._timer = (self._timer + 1) % 256 self.flash() def flash(self): if (self.flash_status > 0): for control in self.controls: if isinstance(control, MonoButtonElement): control.flash(self._timer) @listens('selected_track') def _on_selected_track_changed(self): self.detect_aliased_looper() def _can_auto_arm_track(self, track): routing = track.current_input_routing return routing == 'Ext: All Ins' or routing == 'All Ins' or routing.startswith( 'Livid Minim Input') def detect_aliased_looper(self): device = self._device_provider.device if device: found = -1 for index in range(16): key = str('@loop' + str(index + 1)) preset = None if (match(key, str(device.name)) != None): found = index break if found > -1: self._looper._select_looper(index) else: current_track = self.song.view.selected_track #debug('current track is:', current_track) key = str('@l:') looper_number = -1 if current_track.name.startswith(key) and len( current_track.name) > 4: looper_number = int(current_track.name[3]) - 1 self._looper._select_looper(looper_number) @listens('device') def _on_device_changed(self): debug('on device changed') device = self._device_provider.device if device: found = -1 for index in range(16): key = str('@loop' + str(index + 1)) preset = None if (match(key, str(device.name)) != None): found = index break if found > -1: self._looper._select_looper(index)
class MonoPedal(ControlSurface): def __init__(self, *a, **k): self.log_message = logger.warning super(MonoPedal, self).__init__(*a, **k) self._monomod_version = 'b996' self._codec_version = 'b996' self._cntrlr_version = 'b996' self._cntrlr = None self._host_name = 'MonoPedal' self._color_type = 'OhmRGB' self.hosts = [] self._timer = 0 self.flash_status = 1 self._touched = 0 self._last_main_mode = 'looper' with self.component_guard(): self._setup_monobridge() self._setup_controls() self._setup_looper() self._setup_launcher() self._setup_device_control() self._setup_modes() self.schedule_message(1, self._open_log) #self._loop_selector.set_enabled(True) """script initialization methods""" def _open_log(self): self.log_message("<<<<<<<<<<<<<<<<<<<<= " + str(self._host_name) + " " + str(self._monomod_version) + " log opened =>>>>>>>>>>>>>>>>>>>") self.show_message(str(self._host_name) + ' Control Surface Loaded') def _setup_monobridge(self): self._monobridge = MonoBridgeElement(self) self._monobridge.name = 'MonoBridge' def _setup_controls(self): self._pedal = [None for index in range(8)] for index in range(7): self._pedal[index] = DoublePressElement( MonoButtonElement(is_momentary=True, msg_type=MIDI_CC_TYPE, channel=0, identifier=PEDAL_DEFS[index], name='Pedal_' + str(index), script=self)) self._pedal[index]._report = False self._pedal[7] = LoopPedalExpressionElement( script=self, msg_type=MIDI_CC_TYPE, channel=0, identifier=1, map_mode=Live.MidiMap.MapMode.absolute) self._pedal[7].name = 'Pedal_' + str(7) self._pedal[7]._report = False self._leds = [None for index in range(4)] for index in range(4): red_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index]) green_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index] + 4) blue_led = ButtonElement(True, MIDI_NOTE_TYPE, 0, LED_DEFS[index] + 8) self._leds[index] = RGB_LED(red_led, green_led, blue_led, is_momentary=True, msg_type=MIDI_NOTE_TYPE, channel=0, identifier=index + 13, name='LED_' + str(index), script=self) self._select_buttons = ButtonMatrixElement() self._select_buttons.name = 'SelectMatrix' self._select_buttons.add_row( [self._pedal[6], self._pedal[5], self._pedal[4], self._pedal[3]]) self._doublepress_select_buttons = ButtonMatrixElement() self._doublepress_select_buttons.name = 'DoublepressSelectMatrix' self._doublepress_select_buttons.add_row([ self._pedal[6].double_press, self._pedal[5].double_press, self._pedal[4].double_press, self._pedal[3].double_press ]) self._record_button = self._pedal[1] self._mute_button = self._pedal[2] self._overdub_button = self._pedal[0] def _setup_looper(self): self._looper = MonolooperComponent(self._leds, self) self._looper.layer = Layer( select_buttons=self._select_buttons, doublepress_select_buttons=self._doublepress_select_buttons, overdub_button=self._pedal[2], record_button=self._pedal[1], mute_button=self._pedal[0], expression_pedal=self._pedal[7], ) def _setup_launcher(self): self._launcher = LauncherComponent(self._leds, self) self._launcher.set_enabled(False) self._launcher.layer = Layer( select_buttons=self._select_buttons, doublepress_select_buttons=self._doublepress_select_buttons, fire1_button=self._pedal[2], fire2_button=self._pedal[1], fire3_button=self._pedal[0], expression_pedal=self._pedal[7]) def _setup_device_control(self): self._device_control = DeviceControlComponent(self._leds, self) self._device_control.set_enabled(False) self._device_control.layer = Layer( select_buttons=self._select_buttons, doublepress_select_buttons=self._doublepress_select_buttons, toggle1_button=self._pedal[2], toggle2_button=self._pedal[1], toggle3_button=self._pedal[0], expression_pedal=self._pedal[7]) def _setup_modes(self): self._button_modes = ModesComponent(name='Button_Modes') self._button_modes.add_mode('launcher', self._launcher) self._button_modes.add_mode('looper', self._looper) self._button_modes.add_mode('device', self._device_control) self._button_modes.selected_mode = 'looper' self._button_modes.set_enabled(True) def receive_led(self, button, value): #self.log_message('receive led: ' + str(index) + ' ' + str(value)) pass def toggle_mode(self): self._button_modes.selected_mode = 'launcher' if self._button_modes.selected_mode is 'looper' else 'looper' self._last_main_mode = self._button_modes.selected_mode #self.log_message('toggle mode to: ' + str(self._button_modes.selected_mode)) def toggle_device_control(self, x): self._button_modes.selected_mode = 'device' if not self._button_modes.selected_mode is 'device' else self._last_main_mode if self._button_modes.selected_mode is 'device': self._device_control.set_bank(x) """called on timer""" def update_display(self): super(MonoPedal, self).update_display() self._timer = (self._timer + 1) % 256 self.flash() def flash(self): if (self.flash_status > 0): for control in self.controls: if isinstance(control, MonoButtonElement): control.flash(self._timer)