def __init__(self, c_instance): self._ProjectMixIO__c_instance = c_instance self._ProjectMixIO__components = [] self._ProjectMixIO__main_display = MainDisplay(self) self._ProjectMixIO__components.append(self._ProjectMixIO__main_display) self._ProjectMixIO__main_display_controller = MainDisplayController( self, self._ProjectMixIO__main_display) self._ProjectMixIO__components.append( self._ProjectMixIO__main_display_controller) self._ProjectMixIO__software_controller = SoftwareController(self) self._ProjectMixIO__components.append( self._ProjectMixIO__software_controller) self._ProjectMixIO__transport = Transport(self) self._ProjectMixIO__components.append(self._ProjectMixIO__transport) self._ProjectMixIO__channel_strips = [ ChannelStrip(self, i) for i in range(NUM_CHANNEL_STRIPS) ] for s in self._ProjectMixIO__channel_strips: self._ProjectMixIO__components.append(s) self._ProjectMixIO__master_strip = MasterChannelStrip(self) self._ProjectMixIO__components.append(self._ProjectMixIO__master_strip) self._ProjectMixIO__channel_strip_controller = ChannelStripController( self, self._ProjectMixIO__channel_strips, self._ProjectMixIO__master_strip, self._ProjectMixIO__main_display_controller) self._ProjectMixIO__components.append( self._ProjectMixIO__channel_strip_controller) self._ProjectMixIO__shift_is_pressed = False self._ProjectMixIO__option_is_pressed = False self._ProjectMixIO__ctrl_is_pressed = False self._ProjectMixIO__alt_is_pressed = False self.is_pro_version = False
def __init__(self, c_instance): self.__c_instance = c_instance self.__components = [] self.__main_display = MainDisplay(self) self.__components.append(self.__main_display) self.__main_display_controller = MainDisplayController(self, self.__main_display) self.__components.append(self.__main_display_controller) self.__software_controller = SoftwareController(self) self.__components.append(self.__software_controller) self.__transport = Transport(self) self.__components.append(self.__transport) self.__channel_strips = [ ChannelStrip(self, i) for i in range(NUM_CHANNEL_STRIPS) ] for s in self.__channel_strips: self.__components.append(s) self.__master_strip = MasterChannelStrip(self) self.__components.append(self.__master_strip) self.__channel_strip_controller = ChannelStripController(self, self.__channel_strips, self.__master_strip, self.__main_display_controller) self.__components.append(self.__channel_strip_controller) self.__shift_is_pressed = False self.__option_is_pressed = False self.__ctrl_is_pressed = False self.__alt_is_pressed = False
class ProjectMixIO(object): def __init__(self, c_instance): self._ProjectMixIO__c_instance = c_instance self._ProjectMixIO__components = [] self._ProjectMixIO__main_display = MainDisplay(self) self._ProjectMixIO__components.append(self._ProjectMixIO__main_display) self._ProjectMixIO__main_display_controller = MainDisplayController( self, self._ProjectMixIO__main_display) self._ProjectMixIO__components.append( self._ProjectMixIO__main_display_controller) self._ProjectMixIO__software_controller = SoftwareController(self) self._ProjectMixIO__components.append( self._ProjectMixIO__software_controller) self._ProjectMixIO__transport = Transport(self) self._ProjectMixIO__components.append(self._ProjectMixIO__transport) self._ProjectMixIO__channel_strips = [ ChannelStrip(self, i) for i in range(NUM_CHANNEL_STRIPS) ] for s in self._ProjectMixIO__channel_strips: self._ProjectMixIO__components.append(s) self._ProjectMixIO__master_strip = MasterChannelStrip(self) self._ProjectMixIO__components.append(self._ProjectMixIO__master_strip) self._ProjectMixIO__channel_strip_controller = ChannelStripController( self, self._ProjectMixIO__channel_strips, self._ProjectMixIO__master_strip, self._ProjectMixIO__main_display_controller) self._ProjectMixIO__components.append( self._ProjectMixIO__channel_strip_controller) self._ProjectMixIO__shift_is_pressed = False self._ProjectMixIO__option_is_pressed = False self._ProjectMixIO__ctrl_is_pressed = False self._ProjectMixIO__alt_is_pressed = False self.is_pro_version = False def disconnect(self): for c in self._ProjectMixIO__components: c.destroy() def disconnect(self): for c in self._ProjectMixIO__components: c.destroy() def connect_script_instances(self, instanciated_scripts): pass def application(self): return Live.Application.get_application() def song(self): return self._ProjectMixIO__c_instance.song() def handle(self): return self._ProjectMixIO__c_instance.handle() def refresh_state(self): for c in self._ProjectMixIO__components: c.refresh_state() def is_extension(self): return False def request_rebuild_midi_map(self): self._ProjectMixIO__c_instance.request_rebuild_midi_map() def can_lock_to_devices(self): return False def build_midi_map(self, midi_map_handle): for s in self._ProjectMixIO__channel_strips: s.build_midi_map(midi_map_handle) self._ProjectMixIO__master_strip.build_midi_map(midi_map_handle) for i in range(SID_FIRST, SID_LAST + 1): if i not in function_key_control_switch_ids: Live.MidiMap.forward_midi_note(self.handle(), midi_map_handle, 0, i) Live.MidiMap.forward_midi_cc(self.handle(), midi_map_handle, 0, JOG_WHEEL_CC_NO) def update_display(self): for c in self._ProjectMixIO__components: c.on_update_display_timer() def send_midi(self, midi_event_bytes): self._ProjectMixIO__c_instance.send_midi(midi_event_bytes) def receive_midi(self, midi_bytes): if midi_bytes[0] & 240 == NOTE_ON_STATUS or midi_bytes[ 0] & 240 == NOTE_OFF_STATUS: note = midi_bytes[1] value = BUTTON_PRESSED if midi_bytes[2] > 0 else BUTTON_RELEASED if note in range(SID_FIRST, SID_LAST + 1): if note in display_switch_ids: self.handle_display_switch_ids(note, value) if note in channel_strip_switch_ids + fader_touch_switch_ids: for s in self._ProjectMixIO__channel_strips: s.handle_channel_strip_switch_ids(note, value) if note in channel_strip_control_switch_ids: self._ProjectMixIO__channel_strip_controller.handle_assignment_switch_ids( note, value) if note in function_key_control_switch_ids: self._ProjectMixIO__software_controller.handle_function_key_switch_ids( note, value) if note in software_controls_switch_ids: self._ProjectMixIO__software_controller.handle_software_controls_switch_ids( note, value) if note in transport_control_switch_ids: self._ProjectMixIO__transport.handle_transport_switch_ids( note, value) if note in marker_control_switch_ids: self._ProjectMixIO__transport.handle_marker_switch_ids( note, value) if note in jog_wheel_switch_ids: self._ProjectMixIO__transport.handle_jog_wheel_switch_ids( note, value) elif midi_bytes[0] & 240 == CC_STATUS: cc_no = midi_bytes[1] cc_value = midi_bytes[2] if cc_no == JOG_WHEEL_CC_NO: self._ProjectMixIO__transport.handle_jog_wheel_rotation( cc_value) elif cc_no in range(FID_PANNING_BASE, FID_PANNING_BASE + NUM_CHANNEL_STRIPS): for s in self._ProjectMixIO__channel_strips: s.handle_vpot_rotation(cc_no - FID_PANNING_BASE, cc_value) def shift_is_pressed(self): return self._ProjectMixIO__shift_is_pressed def set_shift_is_pressed(self, pressed): self._ProjectMixIO__shift_is_pressed = pressed def option_is_pressed(self): return self._ProjectMixIO__option_is_pressed def set_option_is_pressed(self, pressed): self._ProjectMixIO__option_is_pressed = pressed def control_is_pressed(self): return self._ProjectMixIO__control_is_pressed or self._ProjectMixIO__option_is_pressed def set_control_is_pressed(self, pressed): self._ProjectMixIO__control_is_pressed = pressed def alt_is_pressed(self): return self._ProjectMixIO__alt_is_pressed def set_alt_is_pressed(self, pressed): self._ProjectMixIO__alt_is_pressed = pressed def force_time_display_update(self): pass def handle_display_switch_ids(self, switch_id, value): if switch_id == SID_DISPLAY_NAME_VALUE: if value == BUTTON_PRESSED: self._ProjectMixIO__channel_strip_controller.toggle_meter_mode( )
class ProjectMixIO: """Subset of the Mackie Control Script, that works with the ProjectMix in Live Mackie Control Mode. """ def __init__(self, c_instance): self.__c_instance = c_instance self.__components = [] self.__main_display = MainDisplay(self) self.__components.append(self.__main_display) self.__main_display_controller = MainDisplayController(self, self.__main_display) self.__components.append(self.__main_display_controller) self.__software_controller = SoftwareController(self) self.__components.append(self.__software_controller) self.__transport = Transport(self) self.__components.append(self.__transport) self.__channel_strips = [ ChannelStrip(self, i) for i in range(NUM_CHANNEL_STRIPS) ] for s in self.__channel_strips: self.__components.append(s) self.__master_strip = MasterChannelStrip(self) self.__components.append(self.__master_strip) self.__channel_strip_controller = ChannelStripController(self, self.__channel_strips, self.__master_strip, self.__main_display_controller) self.__components.append(self.__channel_strip_controller) self.__shift_is_pressed = False self.__option_is_pressed = False self.__ctrl_is_pressed = False self.__alt_is_pressed = False def disconnect(self): for c in self.__components: c.destroy() def disconnect(self): for c in self.__components: c.destroy() def connect_script_instances(self, instanciated_scripts): pass def application(self): """returns a reference to the application that we are running in""" return Live.Application.get_application() def song(self): """returns a reference to the Live Song that we do interact with""" return self.__c_instance.song() def handle(self): """returns a handle to the c_interface that is needed when forwarding MIDI events via the MIDI map """ return self.__c_instance.handle() def refresh_state(self): for c in self.__components: c.refresh_state() def is_extension(self): return False def request_rebuild_midi_map(self): self.__c_instance.request_rebuild_midi_map() def build_midi_map(self, midi_map_handle): for s in self.__channel_strips: s.build_midi_map(midi_map_handle) self.__master_strip.build_midi_map(midi_map_handle) for i in range(SID_FIRST, SID_LAST + 1): if i not in function_key_control_switch_ids: Live.MidiMap.forward_midi_note(self.handle(), midi_map_handle, 0, i) Live.MidiMap.forward_midi_cc(self.handle(), midi_map_handle, 0, JOG_WHEEL_CC_NO) def update_display(self): for c in self.__components: c.on_update_display_timer() def send_midi(self, midi_event_bytes): self.__c_instance.send_midi(midi_event_bytes) def receive_midi(self, midi_bytes): if midi_bytes[0] & 240 == NOTE_ON_STATUS or midi_bytes[0] & 240 == NOTE_OFF_STATUS: channel = midi_bytes[0] & 15 note = midi_bytes[1] velocity = midi_bytes[2] if note in range(SID_FIRST, SID_LAST + 1): if note in display_switch_ids: self.handle_display_switch_ids(note, velocity) if note in channel_strip_switch_ids + fader_touch_switch_ids: for s in self.__channel_strips: s.handle_channel_strip_switch_ids(note, velocity) if note in channel_strip_control_switch_ids: self.__channel_strip_controller.handle_assignment_switch_ids(note, velocity) if note in function_key_control_switch_ids: self.__software_controller.handle_function_key_switch_ids(note, velocity) if note in software_controls_switch_ids: self.__software_controller.handle_software_controls_switch_ids(note, velocity) if note in transport_control_switch_ids: self.__transport.handle_transport_switch_ids(note, velocity) if note in marker_control_switch_ids: self.__transport.handle_marker_switch_ids(note, velocity) if note in jog_wheel_switch_ids: self.__transport.handle_jog_wheel_switch_ids(note, velocity) elif midi_bytes[0] & 240 == CC_STATUS: channel = midi_bytes[0] & 15 cc_no = midi_bytes[1] cc_value = midi_bytes[2] if cc_no == JOG_WHEEL_CC_NO: self.__transport.handle_jog_wheel_rotation(cc_value) elif cc_no in range(FID_PANNING_BASE, FID_PANNING_BASE + NUM_CHANNEL_STRIPS): for s in self.__channel_strips: s.handle_vpot_rotation(cc_no - FID_PANNING_BASE, cc_value) def shift_is_pressed(self): return self.__shift_is_pressed def set_shift_is_pressed(self, pressed): self.__shift_is_pressed = pressed def option_is_pressed(self): return self.__option_is_pressed def set_option_is_pressed(self, pressed): self.__option_is_pressed = pressed def control_is_pressed(self): return self.__control_is_pressed or self.__option_is_pressed def set_control_is_pressed(self, pressed): self.__control_is_pressed = pressed def alt_is_pressed(self): return self.__alt_is_pressed def set_alt_is_pressed(self, pressed): self.__alt_is_pressed = pressed def force_time_display_update(self): pass def handle_display_switch_ids(self, switch_id, value): if switch_id == SID_DISPLAY_NAME_VALUE: if value == BUTTON_PRESSED: self.__channel_strip_controller.toggle_meter_mode()
class ProjectMixIO: __module__ = __name__ __doc__ = 'Subset of the Mackie Control Script, that works with the ProjectMix in \n Live Mackie Control Mode.\n ' def __init__(self, c_instance): self._ProjectMixIO__c_instance = c_instance self._ProjectMixIO__components = [] self._ProjectMixIO__main_display = MainDisplay(self) self._ProjectMixIO__components.append(self._ProjectMixIO__main_display) self._ProjectMixIO__main_display_controller = MainDisplayController( self, self._ProjectMixIO__main_display) self._ProjectMixIO__components.append( self._ProjectMixIO__main_display_controller) self._ProjectMixIO__software_controller = SoftwareController(self) self._ProjectMixIO__components.append( self._ProjectMixIO__software_controller) self._ProjectMixIO__transport = Transport(self) self._ProjectMixIO__components.append(self._ProjectMixIO__transport) self._ProjectMixIO__channel_strips = [ ChannelStrip(self, i) for i in range(NUM_CHANNEL_STRIPS) ] for s in self._ProjectMixIO__channel_strips: self._ProjectMixIO__components.append(s) self._ProjectMixIO__master_strip = MasterChannelStrip(self) self._ProjectMixIO__components.append(self._ProjectMixIO__master_strip) self._ProjectMixIO__channel_strip_controller = ChannelStripController( self, self._ProjectMixIO__channel_strips, self._ProjectMixIO__master_strip, self._ProjectMixIO__main_display_controller) self._ProjectMixIO__components.append( self._ProjectMixIO__channel_strip_controller) self._ProjectMixIO__shift_is_pressed = False self._ProjectMixIO__option_is_pressed = False self._ProjectMixIO__ctrl_is_pressed = False self._ProjectMixIO__alt_is_pressed = False def disconnect(self): for c in self._ProjectMixIO__components: c.destroy() def disconnect(self): for c in self._ProjectMixIO__components: c.destroy() def connect_script_instances(self, instanciated_scripts): pass def application(self): """returns a reference to the application that we are running in""" return Live.Application.get_application() def song(self): """returns a reference to the Live Song that we do interact with""" return self._ProjectMixIO__c_instance.song() def handle(self): """returns a handle to the c_interface that is needed when forwarding MIDI events via the MIDI map """ return self._ProjectMixIO__c_instance.handle() def refresh_state(self): for c in self._ProjectMixIO__components: c.refresh_state() def is_extension(self): return False def request_rebuild_midi_map(self): self._ProjectMixIO__c_instance.request_rebuild_midi_map() def build_midi_map(self, midi_map_handle): for s in self._ProjectMixIO__channel_strips: s.build_midi_map(midi_map_handle) self._ProjectMixIO__master_strip.build_midi_map(midi_map_handle) for i in range(SID_FIRST, (SID_LAST + 1)): if (i not in function_key_control_switch_ids): Live.MidiMap.forward_midi_note(self.handle(), midi_map_handle, 0, i) Live.MidiMap.forward_midi_cc(self.handle(), midi_map_handle, 0, JOG_WHEEL_CC_NO) def update_display(self): for c in self._ProjectMixIO__components: c.on_update_display_timer() def send_midi(self, midi_event_bytes): self._ProjectMixIO__c_instance.send_midi(midi_event_bytes) def receive_midi(self, midi_bytes): if (((midi_bytes[0] & 240) == NOTE_ON_STATUS) or ((midi_bytes[0] & 240) == NOTE_OFF_STATUS)): channel = (midi_bytes[0] & 15) note = midi_bytes[1] velocity = midi_bytes[2] if (note in range(SID_FIRST, (SID_LAST + 1))): if (note in display_switch_ids): self.handle_display_switch_ids(note, velocity) if (note in (channel_strip_switch_ids + fader_touch_switch_ids)): for s in self._ProjectMixIO__channel_strips: s.handle_channel_strip_switch_ids(note, velocity) if (note in channel_strip_control_switch_ids): self._ProjectMixIO__channel_strip_controller.handle_assignment_switch_ids( note, velocity) if (note in function_key_control_switch_ids): self._ProjectMixIO__software_controller.handle_function_key_switch_ids( note, velocity) if (note in software_controls_switch_ids): self._ProjectMixIO__software_controller.handle_software_controls_switch_ids( note, velocity) if (note in transport_control_switch_ids): self._ProjectMixIO__transport.handle_transport_switch_ids( note, velocity) if (note in marker_control_switch_ids): self._ProjectMixIO__transport.handle_marker_switch_ids( note, velocity) if (note in jog_wheel_switch_ids): self._ProjectMixIO__transport.handle_jog_wheel_switch_ids( note, velocity) elif ((midi_bytes[0] & 240) == CC_STATUS): channel = (midi_bytes[0] & 15) cc_no = midi_bytes[1] cc_value = midi_bytes[2] if (cc_no == JOG_WHEEL_CC_NO): self._ProjectMixIO__transport.handle_jog_wheel_rotation( cc_value) elif (cc_no in range(FID_PANNING_BASE, (FID_PANNING_BASE + NUM_CHANNEL_STRIPS))): for s in self._ProjectMixIO__channel_strips: s.handle_vpot_rotation((cc_no - FID_PANNING_BASE), cc_value) def shift_is_pressed(self): return self._ProjectMixIO__shift_is_pressed def set_shift_is_pressed(self, pressed): self._ProjectMixIO__shift_is_pressed = pressed def option_is_pressed(self): return self._ProjectMixIO__option_is_pressed def set_option_is_pressed(self, pressed): self._ProjectMixIO__option_is_pressed = pressed def control_is_pressed(self): return (self._ProjectMixIO__control_is_pressed or self._ProjectMixIO__option_is_pressed) def set_control_is_pressed(self, pressed): self._ProjectMixIO__control_is_pressed = pressed def alt_is_pressed(self): return self._ProjectMixIO__alt_is_pressed def set_alt_is_pressed(self, pressed): self._ProjectMixIO__alt_is_pressed = pressed def force_time_display_update(self): pass def handle_display_switch_ids(self, switch_id, value): if (switch_id == SID_DISPLAY_NAME_VALUE): if (value == BUTTON_PRESSED): self._ProjectMixIO__channel_strip_controller.toggle_meter_mode( )