def quant_change(self): tquant = LiveUtils.getSong().clip_trigger_quantization rquant = LiveUtils.getSong().midi_recording_quantization self.oscServer.sendOSC( "/set/quantization", (int(LiveUtils.getSong().clip_trigger_quantization), int(LiveUtils.getSong().midi_recording_quantization)))
def drumpadSolo(self, msg): type = msg[2] track_id = msg[3] device_id = msg[4] number_of_steps = msg[5] drum_id = msg[6] solod = msg[7] if type == 1: track = LiveUtils.getSong().tracks[track_id] elif type == 3: track = LiveUtils.getSong().return_tracks[track_id] else: track = LiveUtils.getSong().master_track device = track.devices[device_id] for i in range(number_of_steps): chain_id = msg[8+i*2] device_id = msg[9+i*2] chain = device.chains[chain_id] device = chain.devices[device_id] if device.can_have_drum_pads == 1: drum_pad = device.drum_pads[drum_id] drum_pad.solo = solod
def redoCB(self, msg): """Called when a /live/redo message is received. Messages: /live/redo Requests the song to redo the last action """ LiveUtils.getSong().redo()
def playContinueCB(self, msg): """Called when a /live/play/continue message is received. Messages: /live/play/continue Continues playing the song from the current point """ LiveUtils.continuePlaying()
def devices_changed(self, track, tid, type): message = "devices changed for track :" + str(tid) + " and type :" + str(type) self.ta_logger(message, 4) a = Live.Application.get_application().get_major_version() length_tracks = len(LiveUtils.getSong().tracks) for a_tid in range(length_tracks): atrack = LiveUtils.getSong().tracks[a_tid] if atrack == track: tid = a_tid self.oscServer.sendOSC("/devices_empty", (int(type), int(tid))) did = 0 number_of_steps = 0 i = 0 indices = [] for device in track.devices: lis = list(indices) self.touchAble.tACommon.send_update_for_device(device, track, tid, did, type, len(track.devices), number_of_steps, lis, -1) did = did+1 self.oscServer.sendOSC('/devices_loaded', (int(type), int(tid))) self.add_device_listeners_for_track(track, int(tid), int(type))
def rem_all_device_listeners(self): #self.oscServer.sendOSC('/live/track/removing_all_dev_listeners', 1) try: self.do_remove_device_listeners(LiveUtils.getSong().tracks,0) except: err_message = "DeviceListener: do_remove_device_listeners for track " + str(0) + " failed" self.error_log(err_message) try: self.do_remove_device_listeners(LiveUtils.getSong().return_tracks,2) except: err_message = "DeviceListener: do_remove_device_listeners for track " + str(1) + " failed" self.error_log(err_message) try: self.do_remove_device_listeners([LiveUtils.getSong().master_track],1) except: err_message = "DeviceListener: do_remove_device_listeners for track " + str(2) + " failed" self.error_log(err_message) #self.oscServer.sendOSC('/live/track/removing_all_dev_listeners', 2) for key in self.drum_pad_listen: #self.oscServer.sendOSC('/live/track/removing_all_dev_listeners', 3) drum_pad_listen = self.drum_pad_listen[key] for drum_pad in drum_pad_listen: if drum_pad != None: ocb = drum_pad_listen[drum_pad] if drum_pad.name_has_listener(ocb) == 1: drum_pad.remove_name_listener(ocb) #self.oscServer.sendOSC('/live/track/removing_all_dev_listeners', 4) self.drum_pad_listen = {}
def prevCueCB(self, msg): """Called when a /live/prev/cue message is received. Messages: /live/prev/cue Jumps to the previous cue point """ LiveUtils.jumpToPrevCue()
def rem_can_capture_midi_listener(self): a_version = Live.Application.get_application().get_major_version() if a_version >= 10.0: if LiveUtils.getSong().can_capture_midi_has_listener( self.can_capture_midi_change) == 1: LiveUtils.getSong().remove_can_capture_midi_listener( self.can_capture_midi_change)
def get_device_for_message(self, msg): type = msg[2] tid = msg[3] did = msg[4] number_of_steps = msg[5] if type == 0: track = LiveUtils.getSong().tracks[tid] elif type == 2: track = LiveUtils.getSong().return_tracks[tid] elif type == 1: track = LiveUtils.getSong().master_track device = track.devices[did] for i in range(number_of_steps): chain_id = msg[6 + i * 2] device_id = msg[7 + i * 2] track = device.chains[chain_id] device = track.devices[device_id] return device
def nextCueCB(self, msg): """Called when a /live/next/cue message is received. Messages: /live/next/cue Jumps to the next cue point """ LiveUtils.jumpToNextCue()
def playCB(self, msg): """Called when a /live/play message is received. Messages: /live/play Starts the song playing """ LiveUtils.play()
def overdub_change(self): try: overdub = LiveUtils.getSong().arrangement_overdub except: overdub = LiveUtils.getSong().overdub self.oscServer.sendOSC("/set/overdub_status", (int(overdub) + 1)) trackNumber = 0 if Live.Application.get_application().get_major_version() == 8: for track in LiveUtils.getSong().tracks: if track.can_be_armed == 1: if track.arm == 1: if track.playing_slot_index != -2: tid = trackNumber cid = track.playing_slot_index if track.clip_slots[cid].clip.is_audio_clip == 0: if overdub == 1: self.oscServer.sendOSC( '/clip/playing_status', (tid, cid, 3)) else: self.oscServer.sendOSC( '/clip/playing_status', (tid, cid, 1)) else: self.oscServer.sendOSC('/clip/playing_status', (tid, cid, 3)) trackNumber = trackNumber + 1
def muteTrackCB(self, msg): """Called when a /live/mute message is received. Messages: /live/mute (int track) Mutes track number track """ ty = msg[0] == '/live/return/mute' and 1 or 0 track = msg[2] if len(msg) == 4: if msg[3] == 1: if ty == 1: status = LiveUtils.getSong().return_tracks[track].mute else: status = LiveUtils.getTrack(track).mute if status == 1: LiveUtils.unmuteTrack(track, ty) elif status == 0: LiveUtils.muteTrack(track, ty) else: LiveUtils.unmuteTrack(track, ty) elif len(msg) == 3: if ty == 1: status = LiveUtils.getSong().return_tracks[track].mute self.oscServer.sendOSC("/return/mute", (track, int(status))) else: status = LiveUtils.getTrack(track).mute self.oscServer.sendOSC("/mute", (track, int(status)))
def add_arrangement_overdub_listener(self): self.rem_arrangement_overdub_listener() if LiveUtils.getSong().arrangement_overdub_has_listener( self.overdub_change) != 1: LiveUtils.getSong().add_arrangement_overdub_listener( self.overdub_change)
def session_record_change(self): overdub = LiveUtils.getSong().session_record self.oscServer.sendOSC("/live/set/session_record", (int(overdub) + 1)) trackNumber = 0 numberOfTracks = len(LiveUtils.getSong().tracks) for i in range(numberOfTracks): track = LiveUtils.getSong().tracks[i] if track.can_be_armed == 1: if track.arm == 1: if track.playing_slot_index != -2: if track.playing_slot_index != -1: tid = trackNumber cid = track.playing_slot_index if track.clip_slots[cid].clip.is_audio_clip == 0: if overdub == 1: self.oscServer.sendOSC( '/clip/playing_status', (tid, cid, 3)) else: self.oscServer.sendOSC( '/clip/playing_status', (tid, cid, 1)) else: self.oscServer.sendOSC('/clip/playing_status', (tid, cid, 3)) trackNumber = trackNumber + 1
def add_session_automation_record_listener(self): self.rem_session_automation_record_listener() if LiveUtils.getSong().session_automation_record_has_listener( self.session_automation_record_change) != 1: LiveUtils.getSong().add_session_automation_record_listener( self.session_automation_record_change)
def add_re_enable_automation_enabled_listener(self): self.rem_re_enable_automation_enabled_listener() if LiveUtils.getSong().re_enable_automation_enabled_has_listener( self.re_enable_automation_enabled_changed) != 1: LiveUtils.getSong().add_re_enable_automation_enabled_listener( self.re_enable_automation_enabled_changed)
def add_session_record_status_listener(self): self.rem_session_record_status_listener() if LiveUtils.getSong().session_record_status_has_listener( self.session_record_status_changed) != 1: LiveUtils.getSong().add_session_record_status_listener( self.session_record_status_changed)
def cuelevelCB(self, msg): if len(msg) == 2: value = LiveUtils.getSong().master_track.mixer_device.cue_volume.value self.oscServer.sendOSC("/set/cuelevel", float(value)) elif len(msg) == 3: value = msg[2] LiveUtils.getSong().master_track.mixer_device.cue_volume.value = value
def playSelectionCB(self, msg): """Called when a /live/play/selection message is received. Messages: /live/play/selection Plays the current selection """ LiveUtils.playSelection()
def stopCB(self, msg): """Called when a /live/stop message is received. Messages: /live/stop Stops playing the song """ LiveUtils.stop()
def stopAllCB(self, msg): """Called when a /live/stop/track message is received. Messages: /live/stop/track (int track, int clip) Stops track number track """ if len(msg) == 2: LiveUtils.getSong().stop_all_clips()
def add_can_capture_midi_listener(self): a_version = Live.Application.get_application().get_major_version() if a_version >= 10.0: self.can_capture_midi_change() if LiveUtils.getSong().can_capture_midi_has_listener( self.can_capture_midi_change) != 1: LiveUtils.getSong().add_can_capture_midi_listener( self.can_capture_midi_change)
def mviewTrackCB(self, msg): """Called when a /live/master/view message is received. Messages: /live/track/view (int track) Selects a track to view """ track = LiveUtils.getSong().master_track LiveUtils.getSong().view.selected_track = track Live.Application.get_application().view.show_view("Detail/DeviceChain")
def chainLoad(self, msg): type = msg[2] tid = msg[3] steps = msg[4] #self.oscServer.sendOSC("/browser/loadstart", 1) track = LiveUtils.getSong().master_track if type == 0: track = LiveUtils.getSong().tracks[tid] elif type == 2: track = LiveUtils.getSong().return_tracks[tid] #LiveUtils.getSong().view.selected_track = track browser = Live.Application.get_application().browser #self.oscServer.sendOSC("/browser/loadstart", 2) track.view.device_insert_mode = Live.Track.DeviceInsertMode.default #self.oscServer.sendOSC("/browser/loadstart", 3) root_items = [] root_items.append(browser.sounds) root_items.append(browser.drums) root_items.append(browser.instruments) root_items.append(browser.audio_effects) root_items.append(browser.midi_effects) root_items.append(browser.max_for_live) root_items.append(browser.plugins) root_items.append(browser.clips) root_items.append(browser.samples) root_items.append(browser.packs) root_items.append(browser.user_library) item = root_items[msg[5]] #self.oscServer.sendOSC("/browser/loadstart", 4) for i in range(steps-1): index = msg[6+i] item = item.children[index] #self.oscServer.sendOSC("/browser/loadstart", 5) if not Live.Application.get_application().view.browse_mode: Live.Application.get_application().view.toggle_browse() browser.load_item(item) browser.hotswap_target = None if Live.Application.get_application().view.browse_mode: Live.Application.get_application().view.toggle_browse()
def device_changestate(self): self.ta_logger("device_changestate",5) device = LiveUtils.getSong().appointed_device if device == None: return else: pass track = device.canonical_parent did = 0 type = 0 number_of_steps = 0 indices = [] while track.canonical_parent != LiveUtils.getSong(): if number_of_steps % 2 != 0: indices.append(touchAbleUtils.tuple_idx(track.chains, device)) else: indices.append(touchAbleUtils.tuple_idx(track.devices, device)) number_of_steps = number_of_steps + 1 device = track track = device.canonical_parent self.ta_logger("got canonical_parent device",4) if track.canonical_parent == LiveUtils.getSong(): did = touchAbleUtils.tuple_idx(track.devices, device) tid = touchAbleUtils.tuple_idx(LiveUtils.getSong().tracks, track) type = 0 if tid < 0: tid = touchAbleUtils.tuple_idx(LiveUtils.getSong().return_tracks, track) if tid >= 0: type = 2 else: type = 1 tid = 0 indis = [type, tid, did, int(number_of_steps/2)] for i in range(len(indices)): indis.append(int(indices[len(indices)-1-i])) self.oscServer.sendOSC("/selected_device", tuple(indis)) self.ta_logger("sent selected device",4)
def viewSceneCB(self, msg): """Called when a /live/scene/view message is received. Messages: /live/scene/view (int track) Selects a track to view """ if len(msg) == 3: scene = msg[2] LiveUtils.getSong().view.selected_scene = LiveUtils.getSong( ).scenes[scene]
def update_simpler_waveformcb(self, msg): #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb") type = msg[2] tid = msg[3] did = msg[4] start_in_percent = msg[5] end_in_percent = msg[6] number_of_steps = msg[7] #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb0") if type == 0: track = LiveUtils.getSong().tracks[tid] elif type == 2: track = LiveUtils.getSong().return_tracks[tid] elif type == 1: track = LiveUtils.getSong().master_track #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb05") device = track.devices[did] #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb1115") num = len(track.devices) #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb15") indices = [] device_id = -1 #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb25") #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb1") for i in range(number_of_steps): chain_id = msg[8 + i * 2] device_id = msg[9 + i * 2] chain = device.chains[chain_id] indices.append(int(chain_id)) device = chain.devices[device_id] num = len(chain.devices) indices.append(int(device_id)) if device.class_name == 'OriginalSimpler': simpler = device #self.oscServer.sendOSC("/NSLOG_REPLACE", "update_simpler_waveformcb2") self.update_simpler_waveform(simpler, track, tid, did, type, number_of_steps, indices, start_in_percent, end_in_percent)
def monitorTrackCB(self, msg): """Called when a /live/monitor message is received. Messages: /live/monitor (int track) monitors track number track """ track = msg[2] status = msg[3] if len(msg) == 4: LiveUtils.getTrack(track).current_monitoring_state = status elif len(msg) == 3: status = LiveUtils.getTrack(track).current_monitoring_state self.oscServer.sendOSC("/monitor", (track, int(status)))
def tempoCB(self, msg): """Called when a /live/tempo message is received. Messages: /live/tempo Request current tempo, replies with /live/tempo (float tempo) /live/tempo (float tempo) Set the tempo, replies with /live/tempo (float tempo) """ if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): self.oscServer.sendOSC("/set/tempo", LiveUtils.getTempo()) elif len(msg) == 3: tempo = msg[2] LiveUtils.setTempo(tempo)