Пример #1
0
    def mastermeters(self):
        tracks = LiveUtils.getSong().return_tracks
        vall = LiveUtils.getSong().master_track.output_meter_left
        valr = LiveUtils.getSong().master_track.output_meter_right

        vall = round(vall, 4)
        valr = round(valr, 4)

        if vall != self.mmcache:
            self.oscServer.sendOSC('/master/meter', (vall, valr))
            if vall == 0:
                self.oscServer.sendOSC('/master/meter',
                                       (0.0000000001, 0000000.1))
            self.mmcache = vall
        i = 0
        for track in tracks:
            vall = track.output_meter_left
            valr = track.output_meter_right

            vall = round(vall, 4)
            valr = round(valr, 4)

            if vall != self.mrcache[i]:
                self.oscServer.sendOSC('/return/meter', (i, vall, valr))
                self.mrcache[i] = vall
            else:
                pass
            i = i + 1
Пример #2
0
    def positions(self):
        tracks = LiveUtils.getSong().tracks
        pos = 0
        ps = 0
        if LiveUtils.getSong().is_playing != 4:
            #self.oscServer.sendOSC("/bundle/start", 1)
            for i in range(len(tracks)):
                track = tracks[i]
                if track.is_foldable != 1:
                    if track.playing_slot_index != -2:
                        if track.playing_slot_index != -1:
                            ps = track.playing_slot_index
                            clip = track.clip_slots[ps].clip
                            playing_pos = 0
                            pos = 0
                            try:
                                playing_pos = clip.playing_position
                                if clip.looping == 1:
                                    if clip.playing_position < clip.loop_start:
                                        #clip.looping = 0
                                        start = clip.loop_start
                                        end = clip.loop_end
                                        #clip.looping = 1
                                        pos = 1 - round(
                                            (end - clip.playing_position) /
                                            end, 6)
                                        #pos = round((clip.loop_start - clip.playing_position) / (clip.loop_start - start), 3)
                                    else:
                                        pos = round(
                                            (clip.playing_position -
                                             clip.loop_start) /
                                            (clip.loop_end - clip.loop_start),
                                            6)

                                else:
                                    pos = round(
                                        (clip.playing_position -
                                         clip.loop_start) /
                                        (clip.loop_end - clip.loop_start), 6)
                            except:
                                asddd = 1

                            self.oscServer.sendOSC('/clip/playing_position',
                                                   (i, ps, pos, playing_pos))
                        else:
                            pass
                    else:
                        pass

                else:
                    pass
            #self.oscServer.sendOSC("/bundle/end", (1))

        else:
            pass
Пример #3
0
    def loadAllCB(self, msg):
        """Called when a /live/tracks message is received.

        Messages:
        /live/tracks       no argument or 'query'  Returns the total number of scenes

        """
        if len(msg) == 2 or (len(msg) == 3 and msg[2] == "query"):
            trackTotal = len(LiveUtils.getTracks())
            sceneTotal = len(LiveUtils.getScenes())
            returnsTotal = len(LiveUtils.getSong().return_tracks)
            self.oscServer.sendOSC("/set/size",
                                   (trackTotal, sceneTotal, returnsTotal))
            self.oscServer.sendOSC("/NSLOG_REPLACE", "set size load all cb")
            return
Пример #4
0
    def loadScenesStartUp(self):

        sceneNumber = 0
        ascnm = " "
        nm = " "
        all_scenes = LiveUtils.getScenes()
        for scene in all_scenes:
            nm = ""
            if scene.name != None:
                nm = touchAbleUtils.cut_string2(scene.name)
            if scene.color == 0:
                self.oscServer.sendOSC("/scene", (sceneNumber, touchAbleUtils.repr2(nm), 0))
            else:
                self.oscServer.sendOSC("/scene", (sceneNumber, touchAbleUtils.repr2(nm), scene.color))

            scene_color = scene.color
            
            if sceneNumber == 0:

                self.oscServer.sendOSC("/color_pallet_start", 1)
                for x in range(0, 60):
                    try:
                        scene.color_index = x
                        scene1_color = scene.color
                        self.oscServer.sendOSC("/color_pallet", (scene1_color, x - 1))
                        scene.color = scene_color
                    except:
                        self.oscServer.sendOSC("/color_pallet_done", 1)
                        pass

                self.oscServer.sendOSC("/color_pallet_done", 1)
            
            sceneNumber = sceneNumber + 1
Пример #5
0
    def update_display(self):
        """
        This function is run every 100ms, so we use it to initiate our Song.current_song_time
        listener to allow us to process incoming OSC commands as quickly as possible under
        the current listener scheme.
        """
        ######################################################
        # START OSC LISTENER SETUP
        if self.tACallbacks == None and self.did_init == 1:

            # By default we have set tACallbacks to 0 so that we can assign it after
            # initialization. We try to get the current song and if we can we'll
            # connect our tACallbacks callbacks to the listener allowing us to
            # respond to incoming OSC every 60ms.
            #
            # Since this method is called every 100ms regardless of the song time
            # changing, we use both methods for processing incoming UDP requests
            # so that from a resting state you can initiate play/clip triggering.

            try:
                doc = LiveUtils.getSong()
            except:
                self.error_log("could not get song from Live Utils")
                return
            try:
                # LMH

                self.tACallbacks = touchAbleCallbacks.touchAbleCallbacks(
                    self._touchAble__c_instance, self.oscServer, self)
                self.tA_log("initialised tACallbacks..")

                # Commented for stability
                #doc.add_current_song_time_listener(self.oscServer.processIncomingUDP)
                #self.oscServer.sendOSC("/server/refresh", (1))

            except:
                self.error_log("could not create touchAbleCallbacks")
                return

            # If our OSC server is listening, try processing incoming requests.
            # Any 'play' initiation will trigger the current_song_time listener
            # and bump updates from 100ms to 60ms.

        if self.oscServer:
            try:
                #self.oscServer.sendOSC('/processingOSC', (1))

                self.oscServer.processIncomingUDP()

            except:
                pass
        #self.updateTime = self.updateTime +4
        #if self.updateTime >= 100:

        if self.oscServer:
            self.sendScriptPong()
            #self.tA_log("sent script pong..")

            self.updateCB()
Пример #6
0
    def loadReturnsStartUp(self,selected_track):

        returnNumber = 0
        returnsTotal = len(LiveUtils.getSong().return_tracks)
        self.oscServer.sendOSC("/returns", (int(returnsTotal), 1))

        all_return_tracks = LiveUtils.getSong().return_tracks
        for retTrack in all_return_tracks:
            name = retTrack.name
            color = 0
            try:
                color = retTrack.color
            except:
                pass

            self.oscServer.sendOSC("/return", (int(returnNumber), touchAbleUtils.repr2(name), int(color)))
            self.oscServer.sendOSC("/return/pan", (returnNumber, float(retTrack.mixer_device.panning.value)))
            self.oscServer.sendOSC("/return/mute", (returnNumber, int(retTrack.mute)))
            self.oscServer.sendOSC("/return/crossfade_assign", (returnNumber, int(retTrack.mixer_device.crossfade_assign)))
            self.oscServer.sendOSC("/return/solo", (returnNumber, int(retTrack.solo)))
            self.oscServer.sendOSC("/return/volume", (returnNumber, float(retTrack.mixer_device.volume.value)))

            try:  
                self.sendTrackIO(returnNumber, retTrack, "", 2)
            except:
                self.error_log("touchAbleCallbacks: loadReturnsStartUp : sendTrackIO for returns failed")

            try:  
                self.load_devices_for_track(retTrack, int(returnNumber), int(2))
            except:
                self.error_log("touchAbleCallbacks: loadReturnsStartUp : load_devices_for_track for returns failed")

            return_tracks_length = len(LiveUtils.getSong().return_tracks)

            for i in range(return_tracks_length):
                self.oscServer.sendOSC("/return/send", (returnNumber,i, float(retTrack.mixer_device.sends[i].value)))
        
            
            if retTrack == selected_track:
                selected_index = returnNumber
                self.oscServer.sendOSC("/set/selected_track", (2, (selected_index)))
                
            returnNumber = returnNumber + 1
Пример #7
0
    def init_locked_device(self):

        self.locked_device = LiveUtils.getSong(
        ).view.selected_track.view.selected_device
        self.lock_to_device(self.locked_device)
        self._device_appointer = None
        self._device_selection_follows_track_selection = True

        if self._device_selection_follows_track_selection == True:
            self.tA_log("devices DO follow track selection..")
        else:
            self.tA_log("devices DO NOT!!! follow track selection..")

        self.show_message("loading touchAble Pro Control Surface..")

        try:
            self._device_appointer = DeviceAppointer(
                song=LiveUtils.getSong(),
                appointed_device_setter=self._set_appointed_device)
        except:
            self.error_log("touchAble: DeviceAppointer init failed")
            pass
Пример #8
0
    def meters(self):
        #self.oscServer.sendOSC("/bundle/start", 1)
        tracks = LiveUtils.getSong().tracks
        vall = 0
        valr = 0
        for i in range(len(tracks)):
            track = tracks[i]
            if track.has_audio_output:
                vall = track.output_meter_left
                valr = track.output_meter_right
            else:
                vall = -1.0 * track.output_meter_level - 1.0
                valr = 0

            vall = round(vall, 4)
            valr = round(valr, 4)
            sum = vall + valr
            if sum != self.mlcache[i]:
                self.oscServer.sendOSC('/track/meter', (i, vall, valr))
                self.mlcache[i] = sum
            else:
                pass
Пример #9
0
    def loadSetStartup(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)))
        
        songtime = LiveUtils.getSong().current_song_time
        denom = LiveUtils.getSong().signature_denominator
        numer = LiveUtils.getSong().signature_numerator
        
        self.oscServer.sendOSC("/set/playing_position", (float(songtime) + 0.001, float(denom), float(numer)))
        
        overdub = LiveUtils.getSong().overdub
        self.oscServer.sendOSC("/set/overdub_status", (int(overdub) + 1))
        
        record = LiveUtils.getSong().record_mode
        self.oscServer.sendOSC("/set/recording_status", (int(record) + 1))
        
        try:
            overdub = LiveUtils.getSong().session_record
            self.oscServer.sendOSC("/live/set/session_record", (int(overdub)+1))
        
            overdub = LiveUtils.getSong().session_record_status
            self.oscServer.sendOSC("/live/set/session_record_status", (int(overdub)+1))
        
            overdub = LiveUtils.getSong().re_enable_automation_enabled
            self.oscServer.sendOSC("/live/set/re_enable_automation_enabled", (int(overdub)+1))
        
            overdub = LiveUtils.getSong().session_automation_record
            self.oscServer.sendOSC("/live/set/session_automation_record", (int(overdub)+1))
        except:
            self.oscServer.sendOSC("/live/", 8)
        
        master_color = LiveUtils.getSong().master_track.color
        self.oscServer.sendOSC("/master/color", master_color)
        
        tempo = LiveUtils.getTempo()
        self.oscServer.sendOSC("/set/tempo", (tempo))
        
        excl_arm = LiveUtils.getSong().exclusive_arm
        self.oscServer.sendOSC("/set/exclusive_arm", (int(excl_arm) + 1))
        
        excl_solo = LiveUtils.getSong().exclusive_solo
        self.oscServer.sendOSC("/set/exclusive_solo", (int(excl_solo) + 1))
        
        value = LiveUtils.getSong().master_track.mixer_device.cue_volume.value
        self.oscServer.sendOSC("/cuelevel", float(value))
        
        metronome = LiveUtils.getSong().metronome
        self.oscServer.sendOSC("/set/metronome_status", (int(metronome) + 1))
        
        play = LiveUtils.getSong().is_playing
        self.oscServer.sendOSC("/set/playing_status", (int(play) + 1))
        
        master = LiveUtils.getSong().master_track.mixer_device.volume.value
        self.oscServer.sendOSC("/master/volume", (float(master)))
        
        crossfader = LiveUtils.getSong().master_track.mixer_device.crossfader.value
        self.oscServer.sendOSC("/master/crossfader", float(crossfader))
Пример #10
0
    def loadTracksStartUp(self, msg):

        self.getVersion(1)

        try:
            self.loadSetStartup()
        except:
            self.error_log("touchAbleCallbacks: loadSetStartup failed")


        self.oscServer.sendOSC("/bundle/start", 1)
        self.oscServer.sendOSC("/song/loop", (int(LiveUtils.getSong().loop)))
               
        trackTotal = len(LiveUtils.getTracks())
        sceneTotal = len(LiveUtils.getScenes())
        returnsTotal = len(LiveUtils.getSong().return_tracks)
        self.oscServer.sendOSC("/set/size", (int(trackTotal), int(sceneTotal), int(returnsTotal)))

        selected_track = LiveUtils.getSong().view.selected_track
        selected_index = 0

        selected_scene = LiveUtils.getSong().view.selected_scene
        
        scene_index = 0
        selected_scene_index = 0
        all_scenes = LiveUtils.getSong().scenes
        
        for sce in all_scenes:
            if sce == selected_scene:
                selected_scene_index = scene_index
            scene_index = scene_index + 1
        
        self.oscServer.sendOSC("/set/selected_scene", int(selected_scene_index+1))


        trackNumber = 0
        ascnm = " "
        nm = " "
        grouptrack = 0
        is_midi_track = 0

        all_tracks = LiveUtils.getTracks()
        
        for track in all_tracks:
            clipNumber = 0
            if track.name != None:
                nm = touchAbleUtils.cut_string2(track.name)
                col = 0
                try:
                    col = track.color
                except:
                    pass
            if track.is_foldable == 1:
                grouptrack = 1
            else:
                grouptrack = 0
            is_midi_track = track.has_midi_input
            

            #self.touchAble._log( "track nr" + str(trackNumber), True)

            live_pointer = ""
            self.oscServer.sendOSC("/track", (trackNumber, touchAbleUtils.repr2(nm), col, grouptrack, int(is_midi_track),live_pointer))
            self.oscServer.sendOSC("/track/volume", (trackNumber, float(LiveUtils.trackVolume(trackNumber))))
            self.oscServer.sendOSC("/pan", (trackNumber, float(LiveUtils.trackPan(trackNumber))))
            self.oscServer.sendOSC("/track/mute", (trackNumber, int(track.mute)))
            self.oscServer.sendOSC("/track/solo", (trackNumber, int(track.solo)))
            self.oscServer.sendOSC("/track/crossfade_assign", (trackNumber, int(track.mixer_device.crossfade_assign)))
            self.oscServer.sendOSC("/track/is_grouped", (trackNumber, int(track.is_grouped)))
            self.oscServer.sendOSC("/track/is_visible", (trackNumber, int(track.is_visible)))

            try:
                self.sendTrackIO(trackNumber, track, "", 0)
            except:
                self.error_log("touchAbleCallbacks: sendTrackIO for track " + str(trackNumber) + "failed")

            try:
                self.sendTrackClips(trackNumber,track)
            except:
                self.error_log("touchAbleCallbacks: sendTrackClips for track " + str(trackNumber) + "failed")
            

            if track.can_be_armed == 1:
                self.oscServer.sendOSC("/track/arm", (trackNumber, int(track.arm)))
                self.oscServer.sendOSC("/track/current_monitoring_state", (trackNumber, track.current_monitoring_state))

            else:
                self.oscServer.sendOSC("/track/arm", (trackNumber, 0))
                self.oscServer.sendOSC("/track/current_monitoring_state", (trackNumber, 3))
     
            try:
                self.load_devices_for_track(track, trackNumber, 0)
            except:
                self.error_log("touchAbleCallbacks: load_devices_for_track for track " + str(trackNumber) + " failed")
            

            return_tracks_length = len(LiveUtils.getSong().return_tracks)
            for i in range(return_tracks_length):
                self.oscServer.sendOSC("/track/send", (trackNumber,i, float(LiveUtils.trackSend(trackNumber, i))))

            if track == selected_track:
                selected_index = trackNumber
                self.oscServer.sendOSC("/set/selected_track", (0, (selected_index)))

            trackNumber = trackNumber + 1
            #sleep(0.02)

        
        try:
            self.load_devices_for_track(LiveUtils.getSong().master_track, int(1), int(1))
        except:
            self.error_log("touchAbleCallbacks: load_devices_for_track for master_track failed")


        if LiveUtils.getSong().master_track == selected_track:
            self.oscServer.sendOSC("/set/selected_track", (1))
        
        try:
            self.loadReturnsStartUp(selected_track)
        except:
            self.error_log("touchAbleCallbacks: loadReturnsStartUp failed")

        self.oscServer.sendOSC("/done", (1))

        self.oscServer.sendOSC("/finish_loading", (1))
        self.oscServer.sendOSC("/bundle/end", (1))
        
        try:
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid 0"))
            setid = LiveUtils.getSong().get_data("setid", "")
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid 1"))
            
            if setid == "":
                #setid = self.my_random_string()
                setid = "no setid"
                LiveUtils.getSong().set_data("setid", setid)
                #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid 2"))
            else:
                pass

            #self.oscServer.sendOSC("/NSLOG_REPLACE", (str(setid)))

            self.oscServer.sendOSC("/setid", (str(setid)))
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid 3"))
        except:
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid -2"))
            
            setid = touchAbleUtils.my_random_string()
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid -3"))
            
            LiveUtils.getSong().set_data("setid", setid)
            #self.oscServer.sendOSC("/NSLOG_REPLACE", ("setid -4"))
            
            self.oscServer.sendOSC("/setid", (str(setid)))
        
        self.loading = 0
        if self.should_check_if_load == 1:

            trackTotal2 = len(LiveUtils.getTracks())
            sceneTotal2 = len(LiveUtils.getScenes())
            returnsTotal2 = len(LiveUtils.getSong().return_tracks)

            if (trackTotal != trackTotal2 or sceneTotal != sceneTotal2 or returnsTotal != returnsTotal2):
                self.touchAble.error_log("load is needed")

                self.should_check_if_load = 0
                self.tracksCB(msg)
Пример #11
0
    def send_update_for_device(self, device, track, tid, did, type, num,
                               number_of_steps, indices, i):

        message = "send_update_for_device for track: " + str(
            tid) + " and device: " + str(device.name)
        self.ta_logger(message, 4)
        """
        try:
            self.expand_device(device)
            #message = "expand_device here failed for track: " + str(tid) + " and device: " + str(device.name)
            #self.ta_logger(message, 4)
        except:
            self.error_log("tochAbleCommon failed expanding:" + touchAbleUtils.repr2(device.name))
            pass
        """

        if i != -1:
            indices.append(int(i))
            number_of_steps = number_of_steps + 1

        elif i == -1 and number_of_steps == 0:
            indic = []
            indices = list(indic)

        nm = touchAbleUtils.repr2(device.name)
        params = device.parameters
        onoff = params[0].value
        numParams = len(params)
        cnam = touchAbleUtils.repr2(device.class_name)

        tr = tid
        dev = did

        name = track.name
        devicename = device.name

        is_selected = 0

        if device == LiveUtils.getSong().appointed_device:
            is_selected = 1

        po = [type]
        po.append(int(tr))
        po.append(int(dev))

        po2 = [type]
        po2.append(int(tr))
        po2.append(int(dev))
        po2.append(touchAbleUtils.repr2(name))
        po2.append(touchAbleUtils.repr2(devicename))
        po2.append(int(is_selected))

        po.append(int(number_of_steps))
        po2.append(int(number_of_steps))

        po4 = [type]
        po4.append(int(tr))
        po4.append(int(dev))
        po4.append(int(number_of_steps))

        po5 = [type]
        po5.append(int(tr))
        po5.append(int(dev))
        po5.append(int(number_of_steps))

        for index in range(number_of_steps * 2):
            po.append(int(indices[index]))
            po2.append(int(indices[index]))
            po4.append(int(indices[index]))
            po5.append(int(indices[index]))

        for j in range(len(params)):
            po.append(params[j].min)
            po.append(params[j].max)
            po.append(params[j].is_quantized + 1)
            po2.append(float(params[j].value))
            po2.append(touchAbleUtils.repr2(params[j].name))
            po2.append(touchAbleUtils.repr2(params[j].__str__()))
            po4.append(int(params[j].is_enabled))
            automation_state = 0
            if params[j].automation_state:
                automation_state = params[j].automation_state
            po4.append(int(automation_state))
            reset_value = -13337.0
            if params[j].is_quantized == 0:
                reset_value = float(params[j].default_value)
            po5.append(float(reset_value))

        try:
            can_have_chains = device.can_have_chains
        except:
            can_have_chains = 0
        try:
            can_have_drumpads = device.can_have_drum_pads and device.has_drum_pads and device.class_name == 'MultiSampler' or device.class_name == "DrumGroupDevice"
        except:
            can_have_drumpads = 0

        live_pointer = str(device._live_ptr)

        if type == 0:

            po3 = [
                type, tid, did, nm, onoff,
                int(num), numParams,
                int(can_have_drumpads), cnam,
                int(can_have_chains), number_of_steps
            ]
            for index in range(number_of_steps * 2):
                po3.append(int(indices[index]))

            if can_have_drumpads or can_have_chains:
                po3.append(int(device.has_macro_mappings))

            po3.append(str(live_pointer))

            self.oscServer.sendOSC('/track/device', (tuple(po3)))
            self.oscServer.sendOSC("/device/range", tuple(po))
            self.oscServer.sendOSC("/track/device/parameters", tuple(po2))
            self.oscServer.sendOSC("/track/device/parameters/enabled",
                                   tuple(po4))
            self.oscServer.sendOSC("/track/device/parameters/default_value",
                                   tuple(po5))

            if can_have_drumpads:
                drum_pads_tuple = [type, tid, did, number_of_steps]
                for index in range(number_of_steps * 2):
                    drum_pads_tuple.append(int(indices[index]))

                drum_pads_tuple.append(int(len(device.drum_pads)))

                for drum_pad in device.drum_pads:

                    drum_pads_tuple.append(int(drum_pad.note))
                    drum_pads_tuple.append(touchAbleUtils.repr2(drum_pad.name))
                    drum_pads_tuple.append(int(drum_pad.mute))
                    drum_pads_tuple.append(int(drum_pad.solo))
                    #self.oscServer.sendOSC("/NSLOG_REPLACE", (str("SENDING DRUMPAD"), touchAbleUtils.repr2(drum_pad.name)))

                self.oscServer.sendOSC("/track/device/drumpads",
                                       tuple(drum_pads_tuple))

        elif type == 2:

            po3 = [
                type, tid, did, nm, onoff,
                int(num), numParams,
                int(can_have_drumpads), cnam,
                int(can_have_chains), number_of_steps
            ]
            for index in range(number_of_steps * 2):
                po3.append(int(indices[index]))

            po3.append(live_pointer)

            self.oscServer.sendOSC('/return/device', (tuple(po3)))

            self.oscServer.sendOSC("/device/range", tuple(po))
            self.oscServer.sendOSC("/return/device/parameters", tuple(po2))
            self.oscServer.sendOSC("/return/device/parameters/enabled",
                                   tuple(po4))

        elif type == 1:
            po3 = [
                type, 0, did, nm, onoff,
                int(num), numParams,
                int(can_have_drumpads), cnam,
                int(can_have_chains), number_of_steps
            ]
            for index in range(number_of_steps * 2):
                po3.append(int(indices[index]))

            po3.append(live_pointer)

            self.oscServer.sendOSC('/master/device', (tuple(po3)))

            self.oscServer.sendOSC("/device/range", tuple(po))
            self.oscServer.sendOSC("/master/device/parameters", tuple(po2))
            self.oscServer.sendOSC("/master/device/parameters/enabled",
                                   tuple(po4))

        if device.class_name == 'OriginalSimpler':
            try:
                self.touchAble.tAListener.simplerListener.update_simpler_parameters(
                    device, track, tid, did, type, number_of_steps, indices)
            except:
                self.error_log(
                    "tochAbleCommon: update_simpler_parameters failed")

        a_version = Live.Application.get_application().get_major_version()

        if a_version >= 10:
            try:
                self.touchAble.tAListener.compressorListener.update_compressor_parameters(
                    device, track, tid, did, type, number_of_steps, indices)
            except:
                self.error_log(
                    "tochAbleCommon: update_compressor_parameters failed")
            try:
                self.touchAble.tAListener.wavetableListener.update_wavetable_parameters(
                    device, track, tid, did, type, number_of_steps, indices)
            except:
                self.error_log(
                    "tochAbleCommon: update_wavetable_parameters failed")
            try:
                self.touchAble.tAListener.pluginListener.update_plugin_parameters(
                    device, track, tid, did, type, number_of_steps, indices)
            except:
                self.error_log(
                    "tochAbleCommon: update_plugin_parameters failed")

        if can_have_chains == 1:

            for chain_id in range(len(device.chains)):
                chain = device.chains[chain_id]

                indis = list(indices)
                indis.append(int(chain_id))

                po3 = [
                    type, tid, did,
                    touchAbleUtils.repr2(chain.name), number_of_steps
                ]
                for index in range(number_of_steps * 2 + 1):
                    po3.append(int(indis[index]))

                self.oscServer.sendOSC('/device_chain', (tuple(po3)))

                for device_id in range(len(chain.devices)):
                    dev = chain.devices[device_id]

                    lis = list(indis)
                    self.send_update_for_device(dev, track, tid, did, type,
                                                len(chain.devices),
                                                number_of_steps, lis,
                                                device_id)
Пример #12
0
 def songtime_change(self):
     denom = LiveUtils.getSong().signature_denominator
     numer = LiveUtils.getSong().signature_numerator
     self.oscServer.sendOSC("/set/playing_position",
                            (LiveUtils.getSong().current_song_time,
                             float(numer), float(denom)))