class Midi_Fighter_64(ControlSurface): def __init__(self, c_instance): super(Midi_Fighter_64, self).__init__(c_instance) self._color_skin = make_rgb_skin() self._default_skin = make_default_skin() with self.component_guard(): global _map_modes _map_modes = Live.MidiMap.MapMode self.current_track_offset = 0 self.current_scene_offset = 0 # mixer global mixer num_tracks = 128 num_returns = 24 self.mixer = MixerComponent(num_tracks, num_returns) global active_mode #self._mode0() active_mode = "_mode1" self._set_active_mode() self._set_track_select_led() self.show_message("Powered by DJ TechTools") ''' def _mode4(self): self.show_message("_mode4 is active") # mixer global mixer # session global _session num_tracks = 8 num_scenes = 7 self._session = SessionComponent(num_tracks, num_scenes) clip_color_table = colors.LIVE_COLORS_TO_MIDI_VALUES.copy() clip_color_table[16777215] = 119 self._session.set_rgb_mode(colors.LIVE_COLORS_TO_MIDI_VALUES, colors.RGB_COLOR_TABLE) track_offset = self.current_track_offset scene_offset = self.current_scene_offset self._session.set_offsets(track_offset, scene_offset) self._session._reassign_scenes() self.set_highlighting_session_component(self._session) # clip launch buttons session_buttons = [60, 61, 62, 63, 92, 93, 94, 95, 56, 57, 58, 59, 88, 89, 90, 91, 52, 53, 54, 55, 84, 85, 86, 87, 48, 49, 50, 51, 80, 81, 82, 83, 44, 45, 46, 47, 76, 77, 78, 79, 40, 41, 42, 43, 72, 73, 74, 75, 36, 37, 38, 39, 68, 69, 70, 71] session_channels = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] session_types = [MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE] session_is_momentary = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] self._pads = [ButtonElement(session_is_momentary[index], session_types[index], session_channels[index], session_buttons[index]) for index in range(num_tracks*num_scenes)] self._grid = ButtonMatrixElement(rows=[self._pads[(index*num_tracks):(index*num_tracks)+num_tracks] for index in range(num_scenes)]) self._session.set_clip_launch_buttons(self._grid) # LED feedback self._session._enable_skinning() for scene_index in range(num_scenes): scene = self._session.scene(scene_index) for track_index in range(num_tracks): clip_slot = scene.clip_slot(track_index) clip_slot.set_triggered_to_play_value(61) clip_slot.set_triggered_to_record_value(13) clip_slot.set_record_button_value(19) #clip_slot.set_stopped_value(49) #clip_slot.set_started_value(127) clip_slot.set_recording_value(13) self.delete_button = ConfigurableButtonElement(0, MIDI_NOTE_TYPE, 1, 67) self.delete_button.set_on_off_values(49, 55) self._session._link() self.refresh_state() self.clip_xtra_back = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 96) self.clip_xtra_back.add_value_listener(self._activate_mode1,identify_sender= False) self.clip_xtra_back.send_value(85) # transport global transport self.transport = TransportComponent() self.transport.name = 'Transport' overdub_button = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 64) overdub_button.set_on_off_values(13, 19) overdub_button.name = 'overdub_button' self.transport.set_overdub_button(overdub_button) if((hasattr(self, 'clip_xtra')) and (self.clip_xtra is not None)): self.clip_xtra.send_value(85) def _remove_mode4(self): # mixer global mixer # session global _session # clip launch buttons self._session.set_clip_launch_buttons(None) self.set_highlighting_session_component(None) self.current_track_offset = self._session._track_offset self.current_scene_offset = self._session._scene_offset self._session._unlink() self._session = None self.clip_xtra_back.send_value(0) self.clip_xtra_back.remove_value_listener(self._activate_mode1) self.clip_xtra_back = None # transport global transport self.transport.set_overdub_button(None) self.transport = None if((hasattr(self, 'clip_xtra')) and (self.clip_xtra is not None)): self.clip_xtra.send_value(91) ''' def _mode1(self): self.show_message("Script Loaded") # mixer global mixer # session global _session num_tracks = 8 num_scenes = 8 # self._session = SessionComponent(auto_name=True, is_enabled=False, enable_skinning=True) self._session = SessionComponent(num_tracks, num_scenes) clip_color_table = colors.LIVE_COLORS_TO_MIDI_VALUES.copy() clip_color_table[16777215] = 119 self._session.set_rgb_mode(colors.LIVE_COLORS_TO_MIDI_VALUES, colors.RGB_COLOR_TABLE) track_offset = self.current_track_offset scene_offset = self.current_scene_offset self._session.set_offsets(track_offset, scene_offset) self._session._reassign_scenes() self.set_highlighting_session_component(self._session) # clip launch buttons session_buttons = [ 64, 65, 66, 67, 96, 97, 98, 99, 60, 61, 62, 63, 92, 93, 94, 95, 56, 57, 58, 59, 88, 89, 90, 91, 52, 53, 54, 55, 84, 85, 86, 87, 48, 49, 50, 51, 80, 81, 82, 83, 44, 45, 46, 47, 76, 77, 78, 79, 40, 41, 42, 43, 72, 73, 74, 75, 36, 37, 38, 39, 68, 69, 70, 71 ] session_channels = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] #change all the session channels to 2 in order to use the first bank. This will potentially allow for blinking/flashing animations in the future. session_types = [ MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE ] session_is_momentary = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] self._pads = [ ButtonElement(session_is_momentary[index], session_types[index], session_channels[index], session_buttons[index]) for index in range(num_tracks * num_scenes) ] self._grid = ButtonMatrixElement(rows=[ self._pads[(index * num_tracks):(index * num_tracks) + num_tracks] for index in range(num_scenes) ]) self._session.set_clip_launch_buttons(self._grid) # LED feedback self._session._enable_skinning() for scene_index in range(num_scenes): scene = self._session.scene(scene_index) for track_index in range(num_tracks): clip_slot = scene.clip_slot(track_index) clip_slot.set_triggered_to_play_value(61) #orange-red clip_slot.set_triggered_to_record_value(13) #yellow clip_slot.set_record_button_value(5) #bright red #clip_slot.set_stopped_value(49) #blue #clip_slot.set_started_value(127) #dark red clip_slot.set_recording_value(13) #yellow # these are written in decimal format, correspond to the RGB_COLOR_TABLE in pushbase/colors.py """ # session navigation self.session_up = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 64) self.session_up.set_on_off_values(25, 31) self._session.set_page_up_button(self.session_up) self.session_down = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 65) self.session_down.set_on_off_values(25, 31) self._session.set_page_down_button(self.session_down) self.session_left = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 66) self.session_left.set_on_off_values(25, 31) self._session.set_page_left_button(self.session_left) self.session_right = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 67) # "ConfigurableButtonElement(1," was originally set to 0, fixed by Jademalo self.session_right.set_on_off_values(25, 31) self._session.set_page_right_button(self.session_right) self._session._link() self.refresh_state() self.clip_xtra = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 96) self.clip_xtra.add_value_listener(self._activate_mode4,identify_sender= False) self.clip_xtra.send_value(91) if((hasattr(self, 'clip_xtra_back')) and (self.clip_xtra_back is not None)): self.clip_xtra_back.send_value(91) """ def _remove_mode1(self): # mixer global mixer # session global _session # clip launch buttons self._session.set_clip_launch_buttons(None) self.set_highlighting_session_component(None) """ # session navigation self._session.set_page_up_button(None) self._session.set_page_down_button(None) self._session.set_page_left_button(None) self._session.set_page_right_button(None) self.current_track_offset = self._session._track_offset self.current_scene_offset = self._session._scene_offset self._session._unlink() self._session = None self.clip_xtra.send_value(0) self.clip_xtra.remove_value_listener(self._activate_mode4) self.clip_xtra = None if((hasattr(self, 'clip_xtra_back')) and (self.clip_xtra_back is not None)): self.clip_xtra_back.send_value(85) """ """ def _mode2(self): self.show_message("_mode2 is active") # mixer global mixer # session global _session num_tracks = 8 num_scenes = 7 self._session = SessionComponent(num_tracks, num_scenes) clip_color_table = colors.LIVE_COLORS_TO_MIDI_VALUES.copy() clip_color_table[16777215] = 119 self._session.set_rgb_mode(colors.LIVE_COLORS_TO_MIDI_VALUES, colors.RGB_COLOR_TABLE) track_offset = self.current_track_offset scene_offset = self.current_scene_offset self._session.set_offsets(track_offset, scene_offset) self._session._reassign_scenes() self.set_highlighting_session_component(self._session) # clip launch buttons session_buttons = [60, 61, 62, 63, 92, 93, 94, 121, 56, 57, 58, 59, 88, 89, 90, 122, 52, 53, 54, 55, 84, 85, 86, 123, 48, 49, 50, 51, 80, 81, 82, 124, 44, 45, 46, 47, 76, 77, 78, 125, 40, 41, 42, 43, 72, 73, 74, 126, 36, 37, 38, 39, 68, 69, 70, 127] # in mode 2, the last buttons in rows aren't used for launching clips and instead are used for launching scenes # because of this, the last clip-launching button in every row is moved out of range (121,122,123,124,125,126,127) so it doesn't interfere. clever! # 121-127 seems arbitrary, 100-107 probably would have worked just as well since the last midi fighter button is 99 anyways session_channels = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] session_types = [MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE] session_is_momentary = [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0] self._pads = [ButtonElement(session_is_momentary[index], session_types[index], session_channels[index], session_buttons[index]) for index in range(num_tracks*num_scenes)] self._grid = ButtonMatrixElement(rows=[self._pads[(index*num_tracks):(index*num_tracks)+num_tracks] for index in range(num_scenes)]) self._session.set_clip_launch_buttons(self._grid) # session scene launch scene_buttons = [95, 91, 87, 83, 79, 75, 71] #the last buttons in every row, mentioned earlier scene_channels = [1, 1, 1, 1, 1, 1, 1] scene_types = [MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE] scene_momentarys = [1, 1, 1, 1, 1, 1, 1] self._scene_launch_buttons = [ButtonElement(scene_momentarys[index], scene_types[index], scene_channels[index], scene_buttons[index]) for index in range(num_scenes)] self._scene_launch_buttons = ButtonMatrixElement(rows=[self._scene_launch_buttons]) self._session.set_scene_launch_buttons(self._scene_launch_buttons) # LED feedback self._session._enable_skinning() for scene_index in range(num_scenes): scene = self._session.scene(scene_index) scene.set_scene_value(127) scene.set_no_scene_value(0) scene.set_triggered_value(61) for track_index in range(num_tracks): clip_slot = scene.clip_slot(track_index) clip_slot.set_triggered_to_play_value(61) clip_slot.set_triggered_to_record_value(13) clip_slot.set_record_button_value(19) #clip_slot.set_stopped_value(49) #clip_slot.set_started_value(127) clip_slot.set_recording_value(13) self._session._link() self.refresh_state() if((hasattr(self, 'scene_shift')) and (self.scene_shift is not None)): self.scene_shift.send_value(127) def _remove_mode2(self): # mixer global mixer # session global _session # clip launch buttons self._session.set_clip_launch_buttons(None) self.set_highlighting_session_component(None) # session scene launch self._scene_launch_buttons = None self._session.set_scene_launch_buttons(None) self.current_track_offset = self._session._track_offset self.current_scene_offset = self._session._scene_offset self._session._unlink() self._session = None if((hasattr(self, 'scene_shift')) and (self.scene_shift is not None)): self.scene_shift.send_value(66) """ """ def _mode0(self): self.show_message("_mode0 is active") # mixer global mixer self.scene_shift = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 99) self.scene_shift.add_value_listener(self._activate_shift_mode2,identify_sender= False) self.scene_shift.send_value(66) self.shift_mixer = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 98) self.shift_mixer.add_value_listener(self._activate_shift_mode3,identify_sender= False) self.shift_mixer.send_value(37) def _remove_mode0(self): # mixer global mixer self.scene_shift.send_value(0) self.scene_shift.remove_value_listener(self._activate_shift_mode2) self.scene_shift = None self.shift_mixer.send_value(0) self.shift_mixer.remove_value_listener(self._activate_shift_mode3) self.shift_mixer = None """ """ def _mode3(self): self.show_message("_mode3 is active") # mixer # the set_on_off_values were originally completely different, fixed by Jademalo global mixer arm_specific_0 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 40) arm_specific_0.set_on_off_values(5, 7) self.mixer.channel_strip(0).set_arm_button(arm_specific_0) arm_specific_1 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 41) arm_specific_1.set_on_off_values(5, 7) self.mixer.channel_strip(1).set_arm_button(arm_specific_1) arm_specific_2 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 42) arm_specific_2.set_on_off_values(5, 7) self.mixer.channel_strip(2).set_arm_button(arm_specific_2) arm_specific_3 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 43) arm_specific_3.set_on_off_values(5, 7) self.mixer.channel_strip(3).set_arm_button(arm_specific_3) arm_specific_4 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 72) arm_specific_4.set_on_off_values(5, 7) self.mixer.channel_strip(4).set_arm_button(arm_specific_4) arm_specific_5 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 73) arm_specific_5.set_on_off_values(5, 7) self.mixer.channel_strip(5).set_arm_button(arm_specific_5) arm_specific_6 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 74) arm_specific_6.set_on_off_values(5, 7) self.mixer.channel_strip(6).set_arm_button(arm_specific_6) arm_specific_7 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 75) arm_specific_7.set_on_off_values(5, 7) self.mixer.channel_strip(7).set_arm_button(arm_specific_7) solo_specific_0 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 44) solo_specific_0.set_on_off_values(37, 47) self.mixer.channel_strip(0).set_solo_button(solo_specific_0) solo_specific_1 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 45) solo_specific_1.set_on_off_values(37, 47) self.mixer.channel_strip(1).set_solo_button(solo_specific_1) solo_specific_2 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 46) solo_specific_2.set_on_off_values(37, 47) self.mixer.channel_strip(2).set_solo_button(solo_specific_2) solo_specific_3 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 47) solo_specific_3.set_on_off_values(37, 47) self.mixer.channel_strip(3).set_solo_button(solo_specific_3) solo_specific_4 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 76) solo_specific_4.set_on_off_values(37, 47) self.mixer.channel_strip(4).set_solo_button(solo_specific_4) solo_specific_5 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 77) solo_specific_5.set_on_off_values(37, 47) self.mixer.channel_strip(5).set_solo_button(solo_specific_5) solo_specific_6 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 78) solo_specific_6.set_on_off_values(37, 47) self.mixer.channel_strip(6).set_solo_button(solo_specific_6) solo_specific_7 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 79) solo_specific_7.set_on_off_values(37, 47) self.mixer.channel_strip(7).set_solo_button(solo_specific_7) mute_specific_0 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 48) mute_specific_0.set_on_off_values(13, 15) self.mixer.channel_strip(0).set_mute_button(mute_specific_0) self.mixer.channel_strip(0).set_invert_mute_feedback(True) mute_specific_1 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 49) mute_specific_1.set_on_off_values(13, 15) self.mixer.channel_strip(1).set_mute_button(mute_specific_1) self.mixer.channel_strip(1).set_invert_mute_feedback(True) mute_specific_2 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 50) mute_specific_2.set_on_off_values(13, 15) self.mixer.channel_strip(2).set_mute_button(mute_specific_2) self.mixer.channel_strip(2).set_invert_mute_feedback(True) mute_specific_3 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 51) mute_specific_3.set_on_off_values(13, 15) self.mixer.channel_strip(3).set_mute_button(mute_specific_3) self.mixer.channel_strip(3).set_invert_mute_feedback(True) mute_specific_4 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 80) mute_specific_4.set_on_off_values(13, 15) self.mixer.channel_strip(4).set_mute_button(mute_specific_4) self.mixer.channel_strip(4).set_invert_mute_feedback(True) mute_specific_5 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 81) mute_specific_5.set_on_off_values(13, 15) self.mixer.channel_strip(5).set_mute_button(mute_specific_5) self.mixer.channel_strip(5).set_invert_mute_feedback(True) mute_specific_6 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 82) mute_specific_6.set_on_off_values(13, 15) self.mixer.channel_strip(6).set_mute_button(mute_specific_6) self.mixer.channel_strip(6).set_invert_mute_feedback(True) mute_specific_7 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 83) mute_specific_7.set_on_off_values(13, 15) self.mixer.channel_strip(7).set_mute_button(mute_specific_7) self.mixer.channel_strip(7).set_invert_mute_feedback(True) # session global _session num_tracks = 8 num_scenes = 7 self._session = SessionComponent(num_tracks, num_scenes) clip_color_table = colors.LIVE_COLORS_TO_MIDI_VALUES.copy() clip_color_table[16777215] = 119 self._session.set_rgb_mode(colors.LIVE_COLORS_TO_MIDI_VALUES, colors.RGB_COLOR_TABLE) track_offset = self.current_track_offset scene_offset = self.current_scene_offset self._session.set_offsets(track_offset, scene_offset) self._session._reassign_scenes() self.set_highlighting_session_component(self._session) # session track stop stop_track_buttons = [36, 37, 38, 39, 68, 69, 70, 71] stop_track_channels = [1, 1, 1, 1, 1, 1, 1, 1] stop_track_types = [MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE, MIDI_NOTE_TYPE] stop_track_is_momentary = [0, 0, 0, 0, 0, 0, 0, 0] self._track_stop_buttons = [ConfigurableButtonElement(stop_track_is_momentary[index], stop_track_types[index], stop_track_channels[index], stop_track_buttons[index]) for index in range(num_tracks)] self._session.set_stop_track_clip_buttons(tuple(self._track_stop_buttons)) # LED feedback self._session._enable_skinning() self._session.set_stop_clip_triggered_value(61) self._session.set_stop_clip_value(127) for scene_index in range(num_scenes): scene = self._session.scene(scene_index) for track_index in range(num_tracks): clip_slot = scene.clip_slot(track_index) # session navigation # several lines originally missing, added by Jademalo self.session_up = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 64) self.session_up.set_on_off_values(25, 31) self._session.set_page_up_button(self.session_up) self.session_down = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 65) self.session_down.set_on_off_values(25, 31) self._session.set_page_down_button(self.session_down) self.session_left = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 66) self.session_left.set_on_off_values(25, 31) self._session.set_page_left_button(self.session_left) self.session_right = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 67) self.session_right.set_on_off_values(25, 31) self._session.set_page_right_button(self.session_right) self._session._link() self._session.set_mixer(self.mixer) self.refresh_state() # select track 1 button self.select_1 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 52) self.select_1.set_on_off_values(73, 79) self.select_1.add_value_listener(self.track_select_1, identify_sender=False) # select track 2 button self.select_2 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 53) self.select_2.set_on_off_values(73, 79) self.select_2.add_value_listener(self.track_select_2, identify_sender=False) # select track 3 button self.select_3 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 54) self.select_3.set_on_off_values(73, 79) self.select_3.add_value_listener(self.track_select_3, identify_sender=False) # select track 4 button self.select_4 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 55) self.select_4.set_on_off_values(73, 79) self.select_4.add_value_listener(self.track_select_4, identify_sender=False) # select track 5 button self.select_5 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 84) self.select_5.set_on_off_values(73, 79) self.select_5.add_value_listener(self.track_select_5, identify_sender=False) # select track 6 button self.select_6 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 85) self.select_6.set_on_off_values(73, 79) self.select_6.add_value_listener(self.track_select_6, identify_sender=False) # select track 7 button self.select_7 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 86) self.select_7.set_on_off_values(73, 79) self.select_7.add_value_listener(self.track_select_7, identify_sender=False) # select track 8 button self.select_8 = ConfigurableButtonElement(1, MIDI_NOTE_TYPE, 1, 87) self.select_8.set_on_off_values(73, 79) self.select_8.add_value_listener(self.track_select_8, identify_sender=False) if((hasattr(self, 'shift_mixer')) and (self.shift_mixer is not None)): self.shift_mixer.send_value(127) def _remove_mode3(self): # mixer global mixer self.mixer.channel_strip(0).set_arm_button(None) self.mixer.channel_strip(1).set_arm_button(None) self.mixer.channel_strip(2).set_arm_button(None) self.mixer.channel_strip(3).set_arm_button(None) self.mixer.channel_strip(4).set_arm_button(None) self.mixer.channel_strip(5).set_arm_button(None) self.mixer.channel_strip(6).set_arm_button(None) self.mixer.channel_strip(7).set_arm_button(None) self.mixer.channel_strip(0).set_solo_button(None) self.mixer.channel_strip(1).set_solo_button(None) self.mixer.channel_strip(2).set_solo_button(None) self.mixer.channel_strip(3).set_solo_button(None) self.mixer.channel_strip(4).set_solo_button(None) self.mixer.channel_strip(5).set_solo_button(None) self.mixer.channel_strip(6).set_solo_button(None) self.mixer.channel_strip(7).set_solo_button(None) self.mixer.channel_strip(0).set_mute_button(None) self.mixer.channel_strip(1).set_mute_button(None) self.mixer.channel_strip(2).set_mute_button(None) self.mixer.channel_strip(3).set_mute_button(None) self.mixer.channel_strip(4).set_mute_button(None) self.mixer.channel_strip(5).set_mute_button(None) self.mixer.channel_strip(6).set_mute_button(None) self.mixer.channel_strip(7).set_mute_button(None) # session global _session self.set_highlighting_session_component(None) self._session.set_mixer(None) # session track stop self._track_stop_buttons = None self._session.set_stop_track_clip_buttons(None) # session navigation self._session.set_page_left_button(None) self._session.set_page_right_button(None) self.current_track_offset = self._session._track_offset self.current_scene_offset = self._session._scene_offset self._session._unlink() self._session = None self.select_1.send_value(0) self.select_1.remove_value_listener(self.track_select_1) self.select_1 = None self.select_2.send_value(0) self.select_2.remove_value_listener(self.track_select_2) self.select_2 = None self.select_3.send_value(0) self.select_3.remove_value_listener(self.track_select_3) self.select_3 = None self.select_4.send_value(0) self.select_4.remove_value_listener(self.track_select_4) self.select_4 = None self.select_5.send_value(0) self.select_5.remove_value_listener(self.track_select_5) self.select_5 = None self.select_6.send_value(0) self.select_6.remove_value_listener(self.track_select_6) self.select_6 = None self.select_7.send_value(0) self.select_7.remove_value_listener(self.track_select_7) self.select_7 = None self.select_8.send_value(0) self.select_8.remove_value_listener(self.track_select_8) self.select_8 = None if((hasattr(self, 'shift_mixer')) and (self.shift_mixer is not None)): self.shift_mixer.send_value(37) """ def _set_track_select_led(self): self._turn_off_track_select_leds() # take sessionbox into account if its present offset = 0 if (hasattr(self, '_session')): offset = self._session._track_offset num_of_tracks = len(self.song().tracks) # next is each track select item # select_1 pos = offset + 0 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_1')) and (self.select_1 is not None)): self.select_1.send_value(73) # select_2 pos = offset + 1 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_2')) and (self.select_2 is not None)): self.select_2.send_value(73) # select_3 pos = offset + 2 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_3')) and (self.select_3 is not None)): self.select_3.send_value(73) # select_4 pos = offset + 3 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_4')) and (self.select_4 is not None)): self.select_4.send_value(73) # select_5 pos = offset + 4 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_5')) and (self.select_5 is not None)): self.select_5.send_value(73) # select_6 pos = offset + 5 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_6')) and (self.select_6 is not None)): self.select_6.send_value(73) # select_7 pos = offset + 6 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_7')) and (self.select_7 is not None)): self.select_7.send_value(73) # select_8 pos = offset + 7 pos2 = pos + 1 if num_of_tracks >= pos2: if (self.song().view.selected_track == self.song().tracks[pos]): if ((hasattr(self, 'select_8')) and (self.select_8 is not None)): self.select_8.send_value(73) def _turn_off_track_select_leds(self): num_of_tracks = len(self.song().tracks) # take sessionbox into account if its present offset = 0 if (hasattr(self, '_session')): offset = self._session._track_offset # select_1 pos = offset + 0 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_1')) and (self.select_1 is not None)): self.select_1.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_1')) and (self.select_1 is not None)): self.select_1.send_value(0) # select_2 pos = offset + 1 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_2')) and (self.select_2 is not None)): self.select_2.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_2')) and (self.select_2 is not None)): self.select_2.send_value(0) # select_3 pos = offset + 2 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_3')) and (self.select_3 is not None)): self.select_3.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_3')) and (self.select_3 is not None)): self.select_3.send_value(0) # select_4 pos = offset + 3 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_4')) and (self.select_4 is not None)): self.select_4.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_4')) and (self.select_4 is not None)): self.select_4.send_value(0) # select_5 pos = offset + 4 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_5')) and (self.select_5 is not None)): self.select_5.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_5')) and (self.select_5 is not None)): self.select_5.send_value(0) # select_6 pos = offset + 5 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_6')) and (self.select_6 is not None)): self.select_6.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_6')) and (self.select_6 is not None)): self.select_6.send_value(0) # select_7 pos = offset + 6 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_7')) and (self.select_7 is not None)): self.select_7.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_7')) and (self.select_7 is not None)): self.select_7.send_value(0) # select_8 pos = offset + 7 pos2 = pos + 1 if ((num_of_tracks >= pos2) and (hasattr(self, 'select_8')) and (self.select_8 is not None)): self.select_8.send_value(79) elif ((num_of_tracks < pos2) and (hasattr(self, 'select_8')) and (self.select_8 is not None)): self.select_8.send_value(0) def track_select_1(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 1 else: move = 1 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_2(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 2 else: move = 2 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_3(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 3 else: move = 3 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_4(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 4 else: move = 4 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_5(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 5 else: move = 5 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_6(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 6 else: move = 6 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_7(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 7 else: move = 7 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def track_select_8(self, value): if value > 0: if (hasattr(self, '_session')): move = self._session._track_offset + 8 else: move = 8 num_of_tracks = len(self.song().tracks) if num_of_tracks >= move: move = move - 1 self.song().view.selected_track = self.song().tracks[move] def _on_selected_track_changed(self): ControlSurface._on_selected_track_changed(self) self._display_reset_delay = 0 value = "selected track changed" if (hasattr(self, '_set_track_select_led')): self._set_track_select_led() if (hasattr(self, '_reload_active_devices')): self._reload_active_devices(value) if (hasattr(self, 'update_all_ab_select_LEDs')): self.update_all_ab_select_LEDs(1) def _is_prev_device_on_or_off(self): self._device = self.song().view.selected_track.view.selected_device self._device_position = self.selected_device_idx() if (self._device is None) or (self._device_position == 0): on_off = "off" else: on_off = "on" return on_off def _is_nxt_device_on_or_off(self): self._selected_device = self.selected_device_idx( ) + 1 # add one as this starts from zero if (self._device is None) or (self._selected_device == len( self.song().view.selected_track.devices)): on_off = "off" else: on_off = "on" return on_off def _set_active_mode(self): global active_mode # activate mode if active_mode == "_mode4": self._mode4() elif active_mode == "_mode1": self._mode1() elif active_mode == "_mode2": self._mode2() elif active_mode == "_mode0": self._mode0() elif active_mode == "_mode3": self._mode3() if hasattr(self, '_set_track_select_led'): self._set_track_select_led() if hasattr(self, '_turn_on_device_select_leds'): self._turn_off_device_select_leds() self._turn_on_device_select_leds() if hasattr(self, '_all_prev_device_leds'): self._all_prev_device_leds() if hasattr(self, '_all_nxt_device_leds'): self._all_nxt_device_leds() if hasattr(self, 'update_all_ab_select_LEDs'): self.update_all_ab_select_LEDs(1) def _remove_active_mode(self): global active_mode # remove activate mode if active_mode == "_mode4": self._remove_mode4() elif active_mode == "_mode1": self._remove_mode1() elif active_mode == "_mode2": self._remove_mode2() elif active_mode == "_mode0": self._remove_mode0() elif active_mode == "_mode3": self._remove_mode3() """ def _activate_mode4(self,value): global active_mode global shift_previous_is_active if value > 0: shift_previous_is_active = "off" self._remove_active_mode() active_mode = "_mode4" self._set_active_mode() """ def _activate_mode1(self, value): global active_mode global shift_previous_is_active if value > 0: shift_previous_is_active = "off" self._remove_active_mode() active_mode = "_mode1" self._set_active_mode() """ def _activate_mode2(self,value): global active_mode global shift_previous_is_active if value > 0: shift_previous_is_active = "off" self._remove_active_mode() active_mode = "_mode2" self._set_active_mode() def _activate_mode0(self,value): global active_mode global shift_previous_is_active if value > 0: shift_previous_is_active = "off" self._remove_active_mode() active_mode = "_mode0" self._set_active_mode() def _activate_mode3(self,value): global active_mode global shift_previous_is_active if value > 0: shift_previous_is_active = "off" self._remove_active_mode() active_mode = "_mode3" self._set_active_mode() def _activate_shift_mode4(self,value): global active_mode global previous_shift_mode4 global shift_previous_is_active if value > 0: shift_previous_is_active = "on" previous_shift_mode4 = active_mode self._remove_active_mode() active_mode = "_mode4" self._set_active_mode() elif shift_previous_is_active == "on": try: previous_shift_mode4 except NameError: self.log_message("previous shift mode not defined yet") else: self._remove_active_mode() active_mode = previous_shift_mode4 self._set_active_mode() def _activate_shift_mode1(self,value): global active_mode global previous_shift_mode1 global shift_previous_is_active if value > 0: shift_previous_is_active = "on" previous_shift_mode1 = active_mode self._remove_active_mode() active_mode = "_mode1" self._set_active_mode() elif shift_previous_is_active == "on": try: previous_shift_mode1 except NameError: self.log_message("previous shift mode not defined yet") else: self._remove_active_mode() active_mode = previous_shift_mode1 self._set_active_mode() def _activate_shift_mode2(self,value): global active_mode global previous_shift_mode2 global shift_previous_is_active if value > 0: shift_previous_is_active = "on" previous_shift_mode2 = active_mode self._remove_active_mode() active_mode = "_mode2" self._set_active_mode() elif shift_previous_is_active == "on": try: previous_shift_mode2 except NameError: self.log_message("previous shift mode not defined yet") else: self._remove_active_mode() active_mode = previous_shift_mode2 self._set_active_mode() def _activate_shift_mode0(self,value): global active_mode global previous_shift_mode0 global shift_previous_is_active if value > 0: shift_previous_is_active = "on" previous_shift_mode0 = active_mode self._remove_active_mode() active_mode = "_mode0" self._set_active_mode() elif shift_previous_is_active == "on": try: previous_shift_mode0 except NameError: self.log_message("previous shift mode not defined yet") else: self._remove_active_mode() active_mode = previous_shift_mode0 self._set_active_mode() def _activate_shift_mode3(self,value): global active_mode global previous_shift_mode3 global shift_previous_is_active if value > 0: shift_previous_is_active = "on" previous_shift_mode3 = active_mode self._remove_active_mode() active_mode = "_mode3" self._set_active_mode() elif shift_previous_is_active == "on": try: previous_shift_mode3 except NameError: self.log_message("previous shift mode not defined yet") else: self._remove_active_mode() active_mode = previous_shift_mode3 self._set_active_mode() """ def selected_device_idx(self): self._device = self.song().view.selected_track.view.selected_device return self.tuple_index(self.song().view.selected_track.devices, self._device) def selected_track_idx(self): self._track = self.song().view.selected_track self._track_num = self.tuple_index(self.song().tracks, self._track) self._track_num = self._track_num + 1 return self._track_num def tuple_index(self, tuple, obj): for i in xrange(0, len(tuple)): if (tuple[i] == obj): return i return (False) def disconnect(self): super(Midi_Fighter_64, self).disconnect()
class LambdaControl(ControlSurface): __module__ = __name__ __doc__ = "LambdaControl Live Script" def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): self.__c_instance = c_instance self._skin = make_default_skin() #scene up and down by encoder self.pad_down_button = self.create_button(MATRIX_CONTROL_CHN, MATRIX_CONTROL_KEY_DOWN, MIDI_NOTE_TYPE, 'Down_Button', is_rgb=False) self.pad_up_button = self.create_button(MATRIX_CONTROL_CHN, MATRIX_CONTROL_KEY_UP, MIDI_NOTE_TYPE, 'Up_Button', is_rgb=False) #stop all clips by press on switch scene encoder self.stop_all_clips_button = self.create_button( STOP_ALL_CLIPS_CHN, STOP_ALL_CLIPS_KEY, MIDI_NOTE_TYPE, 'Stop_All_Clips_Button', is_rgb=False) #array for stop track clip buttons self.stop_track_clip_buttons_raw = [[ self.create_button(MATRIX_CHANNEL, STOP_TRACK_CLIP_OFFSET + i, MIDI_CC_TYPE, 'Stop_' + str(i) + '_Button', is_rgb=True) for i in range(NUMBER_OF_TRACKS) ]] self.stop_track_clip_buttons = ButtonMatrixElement( name='Stop_Track_Clip_Buttons', rows=self.stop_track_clip_buttons_raw) self.matrix_rows_raw = [[ self.create_button( MATRIX_CHANNEL, (NUMBER_OF_SCENES - 1 - row) * NUMBER_OF_TRACKS + column + PAD_OFFSET, MIDI_NOTE_TYPE, str(column) + '_Clip_' + str(row) + '_Button', is_rgb=True, default_states={ True: 'DefaultMatrix.On', False: 'DefaultMatrix.Off' }) for column in xrange(NUMBER_OF_TRACKS) ] for row in xrange(NUMBER_OF_SCENES)] self.matrix = ButtonMatrixElement(name='Button_Matrix', rows=self.matrix_rows_raw) self.side_buttons = ButtonMatrixElement(name='Scene_Launch_Buttons', rows=[[ self.create_button(MATRIX_CHANNEL, 36 + idx, MIDI_CC_TYPE, 'Scene_Launch_Button' + str(idx), is_rgb=True, default_states={True: 'DefaultMatrix.On', False: 'DefaultMatrix.Off'}) \ for idx in reversed(xrange(NUMBER_OF_SCENES)) ]]) #initialisation of the session self.create_session() self.set_highlighting_session_component(self.session) def create_button(self, channel, note, midi_type, name, **k): return ConfigurableButtonElement(True, midi_type, channel, note, name=name, skin=self._skin, **k) def create_session_layer(self): return Layer(scene_launch_buttons=self.side_buttons, clip_launch_buttons=self.matrix, stop_track_clip_buttons=self.stop_track_clip_buttons, stop_all_clips_button=self.stop_all_clips_button, scene_bank_up_button=self.pad_up_button, scene_bank_down_button=self.pad_down_button) def create_session(self): self.session = SessionComponent(NUMBER_OF_TRACKS, NUMBER_OF_SCENES, enable_skinning=True, is_enabled=False, auto_name=True, layer=self.create_session_layer()) self.session.set_offsets( TRACK_OFFSET, SCENE_OFFSET) #offset start a the up-left corner (track1,row1) self.session._do_show_highlight( ) #to ensure that this session will be highlighted self.session.set_rgb_mode(Colors.CLIP_COLOR_TABLE, Colors.RGB_COLOR_TABLE, clip_slots_only=True) self.session.set_enabled(True) def get_matrix_button(self, column, row): return self.matrix_rows_raw[NUMBER_OF_SCENES - row][column]