def mviewDeviceCB(self, msg, source): track = LiveUtils.getSong().master_track if len(msg) == 3: LiveUtils.getSong().view.selected_track = track LiveUtils.getSong().view.select_device(track.devices[msg[2]]) Live.Application.get_application().view.show_view("Detail/DeviceChain")
def redoCB(self, msg, source): """Called when a /live/redo message is received. Messages: /live/redo Requests the song to redo the last action """ LiveUtils.getSong().redo()
def crossfaderCB(self, msg, source): if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): self.oscEndpoint.send("/live/master/crossfader", float(LiveUtils.getSong().master_track.mixer_device.crossfader.value)) elif len(msg) == 3: val = msg[2] LiveUtils.getSong().master_track.mixer_device.crossfader.value = val
def undoCB(self, msg): """Called when a /live/undo message is received. Messages: /live/undo Requests the song to undo the last action """ LiveUtils.getSong().undo()
def mdeviceCB(self, msg, source): if len(msg) == 3: device = msg[2] po = [device] params = LiveUtils.getSong().master_track.devices[device].parameters for i in range(len(params)): po.append(i) po.append(float(params[i].value)) po.append(str(params[i].name)) self.oscEndpoint.send("/live/master/device", tuple(po)) elif len(msg) == 4: device = msg[2] param = msg[3] p = LiveUtils.getSong().master_track.devices[device].parameters[param] self.oscEndpoint.send("/live/master/device", (device, param, p.value, str(p.name))) elif len(msg) == 5: device = msg[2] param = msg[3] value = msg[4] LiveUtils.getSong().master_track.devices[device].parameters[param].value = value
def nameReturnCB(self, msg, source): """Called when a /live/name/return message is received. Messages: /live/name/return Returns a a series of all the track names in the form /live/name/track (int track, string name) /live/name/return (int track) Returns a single track's name in the form /live/name/track (int track, string name) /live/name/return (int track, string name)Sets track number track's name to name """ #Requesting all track names if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): trackNumber = 0 bundle = OSC.OSCBundle() for track in LiveUtils.getSong().return_tracks: bundle.append("/live/name/return", (trackNumber, str(track.name))) trackNumber = trackNumber + 1 self.oscEndpoint.sendMessage(bundle) return #Requesting a single track name if len(msg) == 3: trackNumber = msg[2] self.oscEndpoint.send("/live/name/return", (trackNumber, str(LiveUtils.getSong().return_tracks[trackNumber].name))) return #renaming a track if len(msg) == 4: trackNumber = msg[2] name = msg[3] LiveUtils.getSong().return_tracks[trackNumber].name = name
def devicerangeCB(self, msg, source): ty = msg[0] == '/live/return/device/range' and 1 or 0 track = msg[2] if len(msg) == 4: device = msg[3] po = [track, device] if ty == 1: params = LiveUtils.getSong().return_tracks[track].devices[device].parameters else: params = LiveUtils.getSong().visible_tracks[track].devices[device].parameters for i in range(len(params)): po.append(i) po.append(params[i].min) po.append(params[i].max) self.oscEndpoint.send(ty == 1 and "/live/return/device/range" or "/live/device/range", tuple(po)) elif len(msg) == 5: device = msg[3] param = msg[4] if ty == 1: p = LiveUtils.getSong().return_tracks[track].devices[device].parameters[param] else: p = LiveUtils.getSong().visible_tracks[track].devices[device].parameters[param] self.oscEndpoint.send(ty == 1 and "/live/return/device/range" or "/live/device/range", (track, device, param, p.min, p.max))
def tactileY(self, msg): """Called when a "/mrmr/tactilezoneY/49/iPhone1 message is received.""" value = msg[2] value *= 128.0 LiveUtils.getSong().visible_tracks[38].devices[0].parameters[2].value = value LiveUtils.getSong().visible_tracks[39].devices[0].parameters[2].value = value LiveUtils.getSong().visible_tracks[40].devices[0].parameters[2].value = value LiveUtils.getSong().visible_tracks[41].devices[0].parameters[2].value = value
def viewSceneCB(self, msg, source): """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 mviewTrackCB(self, msg, source): """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 stateCB(self, msg): tempo = LiveUtils.getTempo() overdub = LiveUtils.getSong().overdub selected_scene = LiveUtils.getSong().view.selected_scene scenes = LiveUtils.getScenes() index = 0 selected_index = 0 for scene in scenes: index = index + 1 if scene == selected_scene: selected_index = index self.oscServer.sendOSC("/live/state", (tempo, overdub, selected_index))
def warpingCB(self, msg, source): """ Called when a /live/clip/warping message is recieved """ track = msg[2] clip = msg[3] if len(msg) == 4: state = LiveUtils.getSong().visible_tracks[track].clip_slots[clip].clip.warping self.oscEndpoint.send("/live/clip/warping", (track, clip, int(state))) elif len(msg) == 5: LiveUtils.getSong().visible_tracks[track].clip_slots[clip].clip.warping = msg[4]
def viewClipCB(self, msg): """Called when a /live/clip/view message is received. Messages: /live/clip/view (int track, int clip) Selects a track to view """ track = LiveUtils.getSong().tracks[msg[2]] if len(msg) == 4: clip = msg[3] else: clip = 0 LiveUtils.getSong().view.detail_clip = track.clip_slots[clip].clip
def toggleMisc(self, msg): """Called when a /mrmr/pushbutton/48/iPhone1 message is received.""" track = 41 device = 0 paramter = 0 value = msg[2] LiveUtils.getSong().visible_tracks[track].devices[device].parameters[paramter].value = value
def viewClipCB(self, msg, source): """Called when a /live/clip/view message is received. Messages: /live/clip/view (int track, int clip) Selects a track to view """ track = LiveUtils.getSong().visible_tracks[msg[2]] if len(msg) == 4: clip = msg[3] else: clip = 0 LiveUtils.getSong().view.selected_track = track LiveUtils.getSong().view.detail_clip = track.clip_slots[clip].clip Live.Application.get_application().view.show_view("Detail/Clip")
def viewTrackCB(self, msg): """Called when a /live/track/view message is received. Messages: /live/track/view (int track) Selects a track to view """ ty = msg[0] == '/live/return/view' and 1 or 0 track_num = msg[2] if len(msg) == 3: if ty == 1: track = LiveUtils.getSong().return_tracks[track_num] else: track = LiveUtils.getSong().tracks[track_num] track.view.select_instrument()
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 track.view.select_instrument()
def toggleBass(self, msg): """Called when a /mrmr/pushbutton/45/iPhone1 message is received.""" track = 38 device = 0 paramter = 0 value = msg[2] LiveUtils.getSong().visible_tracks[track].devices[device].parameters[paramter].value = value """Print track names, devices and parameters
def viewTrackCB(self, msg, source): """Called when a /live/track/view message is received. Messages: /live/track/view (int track) Selects a track to view """ ty = msg[0] == '/live/return/view' and 1 or 0 track_num = msg[2] if len(msg) == 3: if ty == 1: track = LiveUtils.getSong().return_tracks[track_num] else: track = LiveUtils.getSong().visible_tracks[track_num] LiveUtils.getSong().view.selected_track = track Live.Application.get_application().view.show_view("Detail/DeviceChain")
def overdubCB(self, msg, source): """Called when a /live/overdub message is received. Messages: /live/overdub (int on/off) Enables/disables overdub """ if len(msg) == 3: overdub = msg[2] LiveUtils.getSong().overdub = overdub
def devicelistCB(self, msg, source): ty = msg[0] == '/live/return/devicelist' and 1 or 0 track = msg[2] if len(msg) == 3: do = [track] if ty == 1: devices = LiveUtils.getSong().return_tracks[track].devices else: devices = LiveUtils.getSong().visible_tracks[track].devices for i in range(len(devices)): do.append(i) do.append(str(devices[i].name)) self.oscEndpoint.send(ty == 1 and "/live/return/devicelist" or "/live/devicelist", tuple(do))
def stateCB(self, msg): """Called when a /live/state is received. Messages: /live/state Returns the current tempo and overdub status """ if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): tempo = LiveUtils.getTempo() overdub = LiveUtils.getSong().overdub self.oscServer.sendOSC("/live/state", (tempo, int(overdub)))
def viewDeviceCB(self, msg, source): """Called when a /live/track/device/view message is received. Messages: /live/track/device/view (int track) Selects a track to view """ ty = msg[0] == '/live/return/device/view' and 1 or 0 track_num = msg[2] if len(msg) == 4: if ty == 1: track = LiveUtils.getSong().return_tracks[track_num] else: track = LiveUtils.getSong().visible_tracks[track_num] LiveUtils.getSong().view.selected_track = track LiveUtils.getSong().view.select_device(track.devices[msg[3]]) Live.Application.get_application().view.show_view( "Detail/DeviceChain")
def sendCB(self, msg): """Called when a /live/send message is received. Messages: /live/send (int track, int send) Returns the send level of send (send) on track number track as: /live/send (int track, int send, float level(0.0 to 1.0)) /live/send (int track, int send, float level(0.0 to 1.0)) Sets the send (send) of track number (track)'s level to (level) """ ty = msg[0] == '/live/return/send' and 1 or 0 track = msg[2] if len(msg) == 5: send = msg[3] level = msg[4] if ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.sends[send].value = level else: LiveUtils.trackSend(track, send, level) elif len(msg) == 4: send = msg[3] if ty == 1: self.oscServer.sendOSC("/live/return/send", (track, send, float(LiveUtils.getSong().return_tracks[track].mixer_device.sends[send].value))) else: self.oscServer.sendOSC("/live/send", (track, send, float(LiveUtils.trackSend(track, send)))) elif len(msg) == 3: if ty == 1: sends = LiveUtils.getSong().return_tracks[track].mixer_device.sends else: sends = LiveUtils.getSong().tracks[track].mixer_device.sends so = [track] for i in range(len(sends)): so.append(i) so.append(float(sends[i].value)) if ty == 1: self.oscServer.sendOSC("/live/return/send", tuple(so)) else: self.oscServer.sendOSC("/live/send", tuple(so))
def stateCB(self, msg, source): """Called when a /live/state is received. Messages: /live/state Returns the current tempo and overdub status """ if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): tempo = LiveUtils.getTempo() overdub = LiveUtils.getSong().overdub self.oscEndpoint.send("/live/state", (tempo, int(overdub)))
def sendCB(self, msg, source): """Called when a /live/send message is received. Messages: /live/send (int track, int send) Returns the send level of send (send) on track number track as: /live/send (int track, int send, float level(0.0 to 1.0)) /live/send (int track, int send, float level(0.0 to 1.0)) Sets the send (send) of track number (track)'s level to (level) """ ty = msg[0] == '/live/return/send' and 1 or 0 track = msg[2] if len(msg) == 5: send = msg[3] level = msg[4] if ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.sends[send].value = level else: LiveUtils.trackSend(track, send, level) elif len(msg) == 4: send = msg[3] if ty == 1: self.oscEndpoint.send("/live/return/send", (track, send, float(LiveUtils.getSong().return_tracks[track].mixer_device.sends[send].value))) else: self.oscEndpoint.send("/live/send", (track, send, float(LiveUtils.trackSend(track, send)))) elif len(msg) == 3: if ty == 1: sends = LiveUtils.getSong().return_tracks[track].mixer_device.sends else: sends = LiveUtils.getSong().visible_tracks[track].mixer_device.sends so = [track] for i in range(len(sends)): so.append(i) so.append(float(sends[i].value)) if ty == 1: self.oscEndpoint.send("/live/return/send", tuple(so)) else: self.oscEndpoint.send("/live/send", tuple(so))
def mdevicelistCB(self, msg): if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): do = [] devices = LiveUtils.getSong().master_track.devices for i in range(len(devices)): do.append(i) do.append(str(devices[i].name)) self.oscServer.sendOSC("/live/master/devicelist", tuple(do))
def mdevicelistCB(self, msg, source): if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): do = [] devices = LiveUtils.getSong().master_track.devices for i in range(len(devices)): do.append(i) do.append(str(devices[i].name)) self.oscEndpoint.send("/live/master/devicelist", tuple(do))
def devicelistCB(self, msg, source): ty = msg[0] == '/live/return/devicelist' and 1 or 0 track = msg[2] if len(msg) == 3: do = [track] if ty == 1: devices = LiveUtils.getSong().return_tracks[track].devices else: devices = LiveUtils.getSong().visible_tracks[track].devices for i in range(len(devices)): do.append(i) do.append(str(devices[i].name)) self.oscEndpoint.send( ty == 1 and "/live/return/devicelist" or "/live/devicelist", tuple(do))
def returnsCB(self, msg, source): """Called when a /live/returns message is received. Messages: /live/returns no argument or 'query' Returns the total number of return tracks """ if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): trackTotal = len(LiveUtils.getSong().return_tracks) self.oscEndpoint.send("/live/returns", (trackTotal)) return
def scanMulti(self, msg, source): self.oscEndpoint.sendMessage(OSC.OSCMessage("/multi/start/")) index = 0 for scene in LiveUtils.getSong().scenes: self.oscEndpoint.sendMessage( OSC.OSCMessage("/multi/section/", (int(index), str(scene.is_empty), str( scene.name), float(scene.tempo)))) index += 1 self.oscEndpoint.sendMessage(OSC.OSCMessage("/multi/end/"))
def addControlClips(self, songID): controlTrack = LiveUtils.getTrack(0) slotNumber = 0 for slot in controlTrack.clip_slots: if not slot.has_clip: signature_denominator = LiveUtils.getSong( ).signature_denominator signature_numerator = LiveUtils.getSong().signature_numerator if slotNumber in self.sceneScanLengths.keys(): info = self.sceneScanLengths[slotNumber] length = info['length'] signature_numerator = int(info['signature_numerator']) signature_denominator = int(info['signature_denominator']) else: length = 4.0 slot.create_clip(length) slot.clip.signature_numerator = signature_numerator slot.clip.signature_denominator = signature_denominator slot.length = length slot.clip.name = CONTROL_CLIP_IDENTIFIER + " " + songID slotNumber = slotNumber + 1
def mdevicerangeCB(self, msg): if len(msg) == 3: device = msg[2] po = [device] params = LiveUtils.getSong().master_track.devices[device].parameters for i in range(len(params)): po.append(i) po.append(params[i].max) po.append(params[i].min) self.oscServer.sendOSC("/live/master/device/range", tuple(po)) elif len(msg) == 4: device = msg[2] param = msg[3] p = LiveUtils.getSong().master_track.devices[device].parameters[param] self.oscServer.sendOSC("/live/master/device/range", (device, param, p.min, p.max))
def mdevicerangeCB(self, msg, source): if len(msg) == 3: device = msg[2] po = [device] params = LiveUtils.getSong().master_track.devices[device].parameters for i in range(len(params)): po.append(i) po.append(params[i].max) po.append(params[i].min) self.oscEndpoint.send("/live/master/device/range", tuple(po)) elif len(msg) == 4: device = msg[2] param = msg[3] p = LiveUtils.getSong().master_track.devices[device].parameters[param] self.oscEndpoint.send("/live/master/device/range", (device, param, p.min, p.max))
def sceneCB(self, msg, source): """Called when a /live/scene message is received. Messages: /live/scene no argument or 'query' Returns the currently playing scene number """ if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"): selected_scene = LiveUtils.getSong().view.selected_scene scenes = LiveUtils.getScenes() index = 0 selected_index = 0 for scene in scenes: index = index + 1 if scene == selected_scene: selected_index = index self.oscEndpoint.send("/live/scene", (selected_index)) elif len(msg) == 3: scene = msg[2] LiveUtils.getSong().view.selected_scene = LiveUtils.getSong().scenes[scene]
def device_changestate(self, track, tid, type): did = self.tuple_idx(track.devices, track.view.selected_device) if type == 2: devices = LiveUtils.getSong().master_track.devices nm = str(devices[int(did)].name) params = LiveUtils.getSong().master_track.devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/master/selected_device', (1, did, nm, onoff, num)) elif type == 1: devices = LiveUtils.getSong().return_tracks[tid].devices nm = str(devices[int(did)].name) params = LiveUtils.getSong().return_tracks[tid].devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/return/selected_device', (2, tid, did, nm, onoff, num)) else: devices = LiveUtils.getSong().tracks[tid].devices nm = str(devices[int(did)].name) params = LiveUtils.getSong().tracks[tid].devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/track/selected_device', (0, tid, did, nm, onoff, num))
def trackxfaderCB(self, msg, source): """ Called when a /live/track/crossfader or /live/return/crossfader message is received """ ty = msg[0] == '/live/return/crossfader' and 1 or 0 if len(msg) == 3: track = msg[2] if ty == 1: assign = LiveUtils.getSong( ).return_tracks[track].mixer_device.crossfade_assign name = LiveUtils.getSong().return_tracks[ track].mixer_device.crossfade_assignments.values[assign] self.oscEndpoint.send("/live/return/crossfader", (track, str(assign), str(name))) else: assign = LiveUtils.getSong( ).visible_tracks[track].mixer_device.crossfade_assign name = LiveUtils.getSong().visible_tracks[ track].mixer_device.crossfade_assignments.values[assign] self.oscEndpoint.send("/live/track/crossfader", (track, str(assign), str(name))) elif len(msg) == 4: track = msg[2] assign = msg[3] if ty == 1: LiveUtils.getSong( ).return_tracks[track].mixer_device.crossfade_assign = assign else: LiveUtils.getSong( ).visible_tracks[track].mixer_device.crossfade_assign = assign
def device_changestate(self, track, tid, type): did = self.tuple_idx(track.devices, track.view.selected_device) if type == 2: devices = LiveUtils.getSong().master_track.devices nm = str(devices[int(did)].name) params = LiveUtils.getSong().master_track.devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/master/selected_device', (1, did, nm, onoff, num)) elif type == 1: devices = LiveUtils.getSong().return_tracks[tid].devices nm = str(devices[int(did)].name) params = LiveUtils.getSong( ).return_tracks[tid].devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/return/selected_device', (2, tid, did, nm, onoff, num)) else: devices = LiveUtils.getSong().tracks[tid].devices nm = str(devices[int(did)].name) params = LiveUtils.getSong().tracks[tid].devices[did].parameters onoff = params[0].value num = len(devices) self.oscEndpoint.send('/track/selected_device', (0, tid, did, nm, onoff, num))
def trackxfaderCB(self, msg, source): """ Called when a /live/track/crossfader or /live/return/crossfader message is received """ ty = msg[0] == '/live/return/crossfader' and 1 or 0 if len(msg) == 3: track = msg[2] if ty == 1: assign = LiveUtils.getSong().return_tracks[track].mixer_device.crossfade_assign name = LiveUtils.getSong().return_tracks[track].mixer_device.crossfade_assignments.values[assign] self.oscEndpoint.send("/live/return/crossfader", (track, str(assign), str(name))) else: assign = LiveUtils.getSong().visible_tracks[track].mixer_device.crossfade_assign name = LiveUtils.getSong().visible_tracks[track].mixer_device.crossfade_assignments.values[assign] self.oscEndpoint.send("/live/track/crossfader", (track, str(assign), str(name))) elif len(msg) == 4: track = msg[2] assign = msg[3] if ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.crossfade_assign = assign else: LiveUtils.getSong().visible_tracks[track].mixer_device.crossfade_assign = assign
def panCB(self, msg): """Called when a /live/pan message is received. Messages: /live/pan (int track) Returns the pan of track number track as: /live/pan (int track, float pan(-1.0 to 1.0)) /live/pan (int track, float pan(-1.0 to 1.0)) Sets track number track's pan to pan """ if msg[0] == '/live/return/pan': ty = 1 elif msg[0] == '/live/master/pan': ty = 2 else: ty = 0 if len(msg) == 2 and ty == 2: self.oscServer.sendOSC("/live/master/pan", LiveUtils.getSong().master_track.mixer_device.panning.value) elif len(msg) == 3 and ty == 2: pan = msg[2] LiveUtils.getSong().master_track.mixer_device.panning.value = pan elif len(msg) == 4: track = msg[2] pan = msg[3] if ty == 0: LiveUtils.trackPan(track, pan) elif ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.panning.value = pan elif len(msg) == 3: track = msg[2] if ty == 1: self.oscServer.sendOSC("/live/pan", (track, LiveUtils.getSong().return_tracks[track].mixer_device.panning.value)) else: self.oscServer.sendOSC("/live/pan", (track, LiveUtils.trackPan(track)))
def panCB(self, msg, source): """Called when a /live/pan message is received. Messages: /live/pan (int track) Returns the pan of track number track as: /live/pan (int track, float pan(-1.0 to 1.0)) /live/pan (int track, float pan(-1.0 to 1.0)) Sets track number track's pan to pan """ if msg[0] == '/live/return/pan': ty = 1 elif msg[0] == '/live/master/pan': ty = 2 else: ty = 0 if len(msg) == 2 and ty == 2: self.oscEndpoint.send("/live/master/pan", LiveUtils.getSong().master_track.mixer_device.panning.value) elif len(msg) == 3 and ty == 2: pan = msg[2] LiveUtils.getSong().master_track.mixer_device.panning.value = pan elif len(msg) == 4: track = msg[2] pan = msg[3] if ty == 0: LiveUtils.trackPan(track, pan) elif ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.panning.value = pan elif len(msg) == 3: track = msg[2] if ty == 1: self.oscEndpoint.send("/live/pan", (track, LiveUtils.getSong().return_tracks[track].mixer_device.panning.value)) else: self.oscEndpoint.send("/live/pan", (track, LiveUtils.trackPan(track)))
def volumeCB(self, msg): """Called when a /live/volume message is received. Messages: /live/volume (int track) Returns the current volume of track number track as: /live/volume (int track, float volume(0.0 to 1.0)) /live/volume (int track, float volume(0.0 to 1.0)) Sets track number track's volume to volume """ if msg[0] == '/live/return/volume': ty = 1 elif msg[0] == '/live/master/volume': ty = 2 else: ty = 0 if len(msg) == 2 and ty == 2: self.oscServer.sendOSC("/live/master/volume", LiveUtils.getSong().master_track.mixer_device.volume.value) elif len(msg) == 3 and ty == 2: volume = msg[2] LiveUtils.getSong().master_track.mixer_device.volume.value = volume elif len(msg) == 4: track = msg[2] volume = msg[3] if ty == 0: LiveUtils.trackVolume(track, volume) elif ty == 1: LiveUtils.getSong().return_tracks[track].mixer_device.volume.value = volume elif len(msg) == 3: track = msg[2] if ty == 1: self.oscServer.sendOSC("/live/return/volume", (track, LiveUtils.getSong().return_tracks[track].mixer_device.volume.value)) else: self.oscServer.sendOSC("/live/volume", (track, LiveUtils.trackVolume(track)))
def devicerangeCB(self, msg, source): ty = msg[0] == '/live/return/device/range' and 1 or 0 track = msg[2] if len(msg) == 4: device = msg[3] po = [track, device] if ty == 1: params = LiveUtils.getSong( ).return_tracks[track].devices[device].parameters else: params = LiveUtils.getSong( ).visible_tracks[track].devices[device].parameters for i in range(len(params)): po.append(i) po.append(params[i].min) po.append(params[i].max) self.oscEndpoint.send( ty == 1 and "/live/return/device/range" or "/live/device/range", tuple(po)) elif len(msg) == 5: device = msg[3] param = msg[4] if ty == 1: p = LiveUtils.getSong( ).return_tracks[track].devices[device].parameters[param] else: p = LiveUtils.getSong( ).visible_tracks[track].devices[device].parameters[param] self.oscEndpoint.send( ty == 1 and "/live/return/device/range" or "/live/device/range", (track, device, param, p.min, p.max))
def trimSong(self, msg, source): sceneCount = int(0) song = LiveUtils.getSong() sceneLength = len(song.scenes) - 1 #Live.remove_listeners() for scene in song.scenes: log(sceneLength) if sceneLength < int(msg[2]) or sceneLength > int(msg[3]): log("Deleted!!") song.delete_scene(sceneLength) #time.sleep(0.1) sceneLength -= 1 self.oscEndpoint.sendMessage(OSC.OSCMessage("/multi/trimmed/"))
def sigCB(self, msg, source): """ Called when a /live/clip/signature message is recieved """ track = msg[2] clip = msg[3] c = LiveUtils.getSong().visible_tracks[track].clip_slots[clip].clip if len(msg) == 4: self.oscEndpoint.send("/live/clip/signature", (track, clip, c.signature_numerator, c.signature_denominator)) if len(msg) == 6: self.oscEndpoint.send("/live/clip/signature", 1) c.signature_denominator = msg[5] c.signature_numerator = msg[4]
def deviceCB(self, msg, source): ty = msg[0] == '/live/return/device' and 1 or 0 track = msg[2] if len(msg) == 4: device = msg[3] po = [track, device] if ty == 1: params = LiveUtils.getSong( ).return_tracks[track].devices[device].parameters else: params = LiveUtils.getSong( ).visible_tracks[track].devices[device].parameters for i in range(len(params)): po.append(i) po.append(float(params[i].value)) po.append(str(params[i].name)) self.oscEndpoint.send( ty == 1 and "/live/return/device/allparam" or "/live/device/allparam", tuple(po)) elif len(msg) == 5: device = msg[3] param = msg[4] if ty == 1: p = LiveUtils.getSong( ).return_tracks[track].devices[device].parameters[param] else: p = LiveUtils.getSong( ).visible_tracks[track].devices[device].parameters[param] self.oscEndpoint.send( ty == 1 and "/live/return/device/param" or "/live/device/param", (track, device, param, p.value, str(p.name))) elif len(msg) == 6: device = msg[3] param = msg[4] value = msg[5] if ty == 1: LiveUtils.getSong().return_tracks[track].devices[ device].parameters[param].value = value else: LiveUtils.getSong().visible_tracks[track].devices[ device].parameters[param].value = value
def playSelectedClipCB(self, msg): """Called when a /live/play/clipslot message is received. Messages: /live/play/clipslot (int track) Launches current scenes clipslot in track number track """ if len(msg) == 3: selected_scene = LiveUtils.getSong().view.selected_scene scenes = LiveUtils.getScenes() index = 0 selected_index = 0 for scene in scenes: index = index + 1 if scene == selected_scene: selected_index = index track_num = msg[2] clip_num = (selected_index - 1) track = LiveUtils.getTrack(track_num) clipslot = track.clip_slots[clip_num] clipslot.fire()
def nameClipFromSceneCB(self, msg): """Called when a /live/name/clip message is received. Messages: /live/name/clip Returns a a series of all the clip names in the form /live/name/clip (int track, int clip, string name) /live/name/clip (int track, int clip) Returns a single clip's name in the form /live/name/clip (int clip, string name) /live/name/clip (int track, int clip, string name)Sets clip number clip in track number track's name to name """ if len(msg) == 3: selected_scene = LiveUtils.getSong().view.selected_scene scenes = LiveUtils.getScenes() index = 0 selected_index = 0 for scene in scenes: index = index + 1 if scene == selected_scene: selected_index = index trackNumber = msg[2] clipNumber = selected_index self.oscServer.sendOSC("/live/name/clipfromscene/" + str(selected_index), (str(LiveUtils.getClip(trackNumber, clipNumber).name))) return
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: 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("/live/return/mute", (track, int(status))) else: status = LiveUtils.getTrack(track).mute self.oscServer.sendOSC("/live/mute", (track, int(status)))
def soloTrackCB(self, msg): """Called when a /live/solo message is received. Messages: /live/solo (int track) Solos track number track """ ty = msg[0] == '/live/return/solo' and 1 or 0 track = msg[2] if len(msg) == 4: if msg[3] == 1: LiveUtils.soloTrack(track, ty) else: LiveUtils.unsoloTrack(track, ty) elif len(msg) == 3: if ty == 1: status = LiveUtils.getSong().return_tracks[track].solo self.oscServer.sendOSC("/live/return/solo", (track, int(status))) else: status = LiveUtils.getTrack(track).solo self.oscServer.sendOSC("/live/solo", (track, int(status)))
def overdub_change(self): overdub = LiveUtils.getSong().overdub self.oscServer.sendOSC("/live/overdub", (int(overdub) + 1))
def metronome_change(self): metronome = LiveUtils.getSong().metronome self.oscEndpoint.send("/live/metronome", int(metronome))
def signature_change(self): numerator = LiveUtils.getSong().signature_numerator denominator = LiveUtils.getSong().signature_denominator self.oscEndpoint.send("/live/signature", (int(numerator), int(denominator)))
def overdubCB(self, msg): if len(msg) == 3: overdub = msg[2] LiveUtils.getSong().overdub = overdub
def quantizationCB(self, msg, source): quant = msg[2] LiveUtils.getSong().clip_trigger_quantization = quant
def overdub_change(self): overdub = LiveUtils.getSong().overdub self.oscEndpoint.send("/live/overdub", (int(overdub) + 1))
def loop_change(self): loop = LiveUtils.getSong().loop self.oscEndpoint.send("/live/loop", int(loop))