Changeset 68


Ignore:
Timestamp:
14/03/10 17:13:58 (5 months ago)
Author:
st8
Message:

LiveControl: Added Clip sequencer application, doubled resolution of device control. LiveOSC: Added toggles for meter/clip listeners, added transport listener

Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LiveControl/DeviceControl.py

    r64 r68  
    4040        self.dlisten = {} 
    4141        self.plisten = {} 
     42        self.bstates = {} 
     43        for i in range((self.width - 1) * self.height): 
     44            self.bstates[i] = 0 
    4245         
    4346        self.lcd2 = ["", ""] 
     
    234237        return cols 
    235238         
     239    def to_bid(self, x, y): 
     240        return ((self.width - 1) * x) + y 
     241         
    236242    def do_button_press(self, x, y, v): 
     243        # Record Button States 
     244        if x != self.width - 1: 
     245            self.bstates[self.to_bid(x,y)] = v 
     246     
    237247        if v == 1: 
    238248            # Track Right 
     
    293303                    bval  = float((self.height - 1) - y) / float(self.height - 1) 
    294304                    val   = (float(bval) * float(ran)) + float(start) 
    295                  
     305                     
     306                    if self.to_bid(x,y) + 1 < len(self.bstates) and self.to_bid(x,y) - 1 > 0: 
     307                        off = float(1.0 / float(self.height - 1))/2 * float(ran) 
     308                         
     309                        if self.bstates[(self.to_bid(x,y) + 1)] == 1: 
     310                            val -= off 
     311 
     312                        if self.bstates[(self.to_bid(x,y) - 1)] == 1: 
     313                            val += off 
     314                                         
    296315                    self.tracks()[self.device[0]].devices[self.device[1]].parameters[pid].value = val 
    297316                    self.device_cache[self.device[0]][self.device[1]][pid][1] = val 
    298                      
    299317                 
    300318    def do_bg(self): 
  • trunk/LiveControl/Looper.py

    r66 r68  
    4444        self.step   = 0 
    4545        self.sindex = [0.25,0.5,1,2,4,6,8,10,12] 
     46         
     47        self.precords = [0 for i in range(self.height - 2)] 
     48        self.patterns = [{} for i in range(self.height - 2)] 
    4649         
    4750        self.do_refresh_state() 
  • trunk/LiveOSC/LiveOSC.py

    r67 r68  
    213213        self.rem_tracks_listener() 
    214214        self.rem_device_listeners() 
     215        self.rem_transport_listener() 
    215216         
    216217        self.song().remove_visible_tracks_listener(self.refresh_state) 
     
    230231        self.add_tracks_listener() 
    231232        self.add_device_listeners() 
     233        self.add_transport_listener() 
    232234 
    233235        trackNumber = 0 
     
    306308        self.oscServer.sendOSC("/live/tempo", (tempo)) 
    307309         
     310    def add_transport_listener(self): 
     311        if self.song().is_playing_has_listener(self.transport_change) != 1: 
     312            self.song().add_is_playing_listener(self.transport_change) 
     313             
     314    def rem_transport_listener(self): 
     315        if self.song().is_playing_has_listener(self.transport_change) == 1: 
     316            self.song().remove_is_playing_listener(self.transport_change)     
     317     
     318    def transport_change(self): 
     319        self.oscServer.sendOSC("/live/play", (self.song().is_playing and 2 or 1)) 
     320     
    308321    def add_overdub_listener(self): 
    309322        self.rem_overdub_listener() 
     
    674687     
    675688    def clip_position(self, clip, tid, cid): 
    676         if clip.is_playing: 
    677             self.oscServer.sendOSC('/live/clip/position', (tid, cid, clip.playing_position, clip.length, clip.loop_start, clip.loop_end)) 
     689        if self.check_md(1): 
     690            if clip.is_playing: 
     691                self.oscServer.sendOSC('/live/clip/position', (tid, cid, clip.playing_position, clip.length, clip.loop_start, clip.loop_end)) 
    678692     
    679693    def slot_changestate(self, slot, tid, cid): 
     
    770784    def meter_changestate(self, tid, track, lr, r = 0): 
    771785        if r == 2: 
    772             if lr == 0: 
    773                 self.oscServer.sendOSC('/live/master/meter', (0, float(track.output_meter_left))) 
     786            if self.check_md(2): 
     787                if lr == 0: 
     788                    self.oscServer.sendOSC('/live/master/meter', (0, float(track.output_meter_left))) 
     789                else: 
     790                    self.oscServer.sendOSC('/live/master/meter', (1, float(track.output_meter_right))) 
     791        elif r == 1: 
     792            if self.check_md(3): 
     793                if lr == 0: 
     794                    self.oscServer.sendOSC('/live/return/meter', (tid, 0, float(track.output_meter_left))) 
     795                else: 
     796                    self.oscServer.sendOSC('/live/return/meter', (tid, 1, float(track.output_meter_right)))         
     797        else: 
     798            if self.check_md(4): 
     799                if lr == 0: 
     800                    self.oscServer.sendOSC('/live/track/meter', (tid, 0, float(track.output_meter_left))) 
     801                else: 
     802                    self.oscServer.sendOSC('/live/track/meter', (tid, 1, float(track.output_meter_right))) 
     803     
     804    def check_md(self, param): 
     805        devices = self.song().master_track.devices 
     806         
     807        if len(devices) > 0: 
     808            if devices[0].parameters[param].value > 0: 
     809                return 1 
    774810            else: 
    775                 self.oscServer.sendOSC('/live/master/meter', (1, float(track.output_meter_right))) 
    776         elif r == 1: 
    777             if lr == 0: 
    778                 self.oscServer.sendOSC('/live/return/meter', (tid, 0, float(track.output_meter_left))) 
    779             else: 
    780                 self.oscServer.sendOSC('/live/return/meter', (tid, 1, float(track.output_meter_right)))         
     811                return 0 
    781812        else: 
    782             if lr == 0: 
    783                 self.oscServer.sendOSC('/live/track/meter', (tid, 0, float(track.output_meter_left))) 
    784             else: 
    785                 self.oscServer.sendOSC('/live/track/meter', (tid, 1, float(track.output_meter_right))) 
    786          
     813            return 0 
     814     
    787815    # Device Listeners 
    788816    def add_device_listeners(self): 
  • trunk/LiveOSC/OSCAPI.txt

    r67 r68  
    160160without the need for a polling call 
    161161 
     162/live/play (2 = playing, 1 = stopped) 
     163 
    162164/live/track/info 
    163165/live/clip/info 
  • trunk/osc_tester.pd

    r23 r68  
    1 #N canvas 768 22 487 419 10; 
     1#N canvas 768 22 499 526 10; 
    22#X declare -lib mrpeach/unpackOSC; 
    33#X declare -lib mrpeach/udpreceive; 
     
    1818#X obj 308 214 routeOSC /live; 
    1919#X obj 308 245 routeOSC /tempo; 
    20 #X obj 192 97 print; 
    2120#X obj 27 131 loadbang; 
    2221#X msg 165 226 /live/return/device 0 0; 
     22#X obj 97 302 slider 127 0 15; 
     23#X obj 266 342 routeOSC /track; 
     24#X obj 213 390 routeOSC /meter; 
     25#X obj 63 472 route; 
     26#X obj 312 450 demux 1 2 3 4 5; 
     27#X floatatom 280 491 5 0 0 0 - - -; 
     28#X floatatom 160 494 5 0 0 0 - - -; 
     29#X floatatom 168 324 5 0 0 0 - - -; 
     30#X obj 169 302 * 100; 
     31#X obj 189 461 unpack 0 0 0; 
     32#X obj 356 411 swap; 
     33#X obj 57 302 slider 127 0 15; 
     34#X floatatom 115 276 5 0 0 0 - - -; 
     35#X obj 116 254 * 100; 
    2336#X connect 5 0 6 0; 
    2437#X connect 7 0 6 0; 
    2538#X connect 8 0 11 0; 
    26 #X connect 8 0 13 0; 
    2739#X connect 9 0 8 0; 
    2840#X connect 11 0 12 0; 
     41#X connect 11 0 16 0; 
    2942#X connect 12 0 10 0; 
    30 #X connect 14 0 5 0; 
    31 #X connect 15 0 7 0; 
     43#X connect 13 0 5 0; 
     44#X connect 14 0 7 0; 
     45#X connect 16 0 17 0; 
     46#X connect 17 0 24 0; 
     47#X connect 19 1 28 0; 
     48#X connect 19 2 23 0; 
     49#X connect 22 0 15 0; 
     50#X connect 23 0 22 0; 
     51#X connect 24 0 21 0; 
     52#X connect 24 0 25 0; 
     53#X connect 24 2 25 1; 
     54#X connect 25 0 19 0; 
     55#X connect 25 1 19 1; 
     56#X connect 27 0 26 0; 
     57#X connect 28 0 27 0; 
Note: See TracChangeset for help on using the changeset viewer.