Changeset 71


Ignore:
Timestamp:
22/03/10 20:42:06 (8 years ago)
Author:
st8
Message:

Sysex passthrough now uses OSC. Fixed OSC module to send 0 values

Location:
trunk/Sysex
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Sysex/Sysex.py

    r70 r71  
    66 
    77import Live 
    8 import sys 
     8import RemixNet 
    99from Logger import Logger 
    10  
    11 version = Live.Application.get_application().get_major_version() 
    12 if sys.platform == "win32": 
    13     import socket    
    14  
    15 else: 
    16     if version > 7: 
    17        # 10.5 
    18         try: 
    19             file = open("/usr/lib/python2.5/string.pyc") 
    20         except IOError: 
    21             sys.path.append("/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5") 
    22             import socket_live8 as socket   
    23         else: 
    24             sys.path.append("/usr/lib/python2.5") 
    25             import socket 
    2610 
    2711class Sysex: 
     
    3822        self.log("Logging Enabled") 
    3923         
    40         self.data = '' 
     24        self.prefix = "/ableton" 
     25        self.oscServer = RemixNet.OSCServer('localhost', 5001, None, 5000) 
     26        self.oscServer.callbackManager.add(self.send, self.prefix + "/sysex") 
     27        self.oscServer.callbackManager.add(self.selection, self.prefix + "/selection") 
    4128         
    42         self.ip   = 'localhost' 
    43         self.outp = 5001 
    44         self.inp  = 5000 
     29    def send(self, msg): 
     30        self.log("Sent to Device: " + str(msg[2])) 
     31        self.c_instance.send_midi((msg[2])) 
     32 
     33    def receive_midi(self, midi_bytes):     
     34        self.log("Received from Device: " + str(midi_bytes)) 
     35        for byte in midi_bytes: 
     36            self.oscServer.sendOSC(self.prefix + "/sysex", (byte)) 
    4537         
    46         self.UDPSockIn = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    47         self.UDPSockIn.bind((self.ip, self.inp)) 
    48         self.UDPSockIn.setblocking(0) 
     38    def selection(self, msg): 
     39        if len(msg) == 6: 
     40            self.c_instance.set_session_highlight(msg[2], msg[3], msg[4], msg[5], 0) 
    4941         
    50         self.UDPSockOut = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
     42    def update_display(self): 
     43        if self.oscServer: 
     44            try: 
     45                self.oscServer.processIncomingUDP() 
     46            except: 
     47                pass 
     48                     
     49    def build_midi_map(self, midi_map_handle): 
     50        for i in range(0,128): 
     51            for j in (range(0,16)): 
     52                Live.MidiMap.forward_midi_cc(self.c_instance.handle(), midi_map_handle, j, i) 
     53                 
     54    def disconnect(self): 
     55        self.oscServer.shutdown() 
     56         
     57    def log(self, msg): 
     58        if self._LOG == 1: 
     59            self.logger.log(msg)  
    5160 
    5261    def connect_script_instances(self, instanciated_scripts): 
     
    5867    def request_rebuild_midi_map(self): 
    5968        return 
    60      
    61     def update_display(self): 
    62         try: 
    63             self.data,self.addr = self.UDPSockIn.recvfrom(4096) 
    64  
    65             if not self.data: 
    66                 return 
    67             else: 
    68                 if self.data != '\n': 
    69                     tup = self.to_tuple(self.data) 
    70                      
    71                     if len(tup) == 5 and tup[0] == 0: 
    72                         self.c_instance.set_session_highlight(tup[1], tup[2], tup[3], tup[4], 0)                     
    73                          
    74                     else: 
    75                         self.send_midi(tup) 
    76                          
    77         except Exception, e: 
    78             pass 
    79  
    80     def receive_midi(self, midi_bytes): 
    81         str = '' 
    82         for i in range(len(midi_bytes)): 
    83             str += chr(midi_bytes[i]) 
    84              
    85         self.log("Received: " + str) 
    86         self.send(str) 
    87          
    88     def send(self, data): 
    89         self.UDPSockOut.sendto(data, (self.ip, self.outp)) 
    90          
    91     def send_midi(self, midi_event_bytes): 
    92         self.log("Sent: " + str(midi_event_bytes)) 
    93         self.c_instance.send_midi(midi_event_bytes) 
    94          
    95     def to_tuple(self, data): 
    96         list = [] 
    97         for i in range(len(data)): 
    98             list.append(ord(data[i])) 
    99              
    100         return tuple(list) 
    101  
    102     def log(self, msg): 
    103         if self._LOG == 1: 
    104             self.logger.log(msg)  
    10569 
    10670    def can_lock_to_devices(self): 
     
    11579    def __handle_display_switch_ids(self, switch_id, value): 
    11680        pass 
    117     
    118     def disconnect(self): 
    119         self.UDPSockIn.close() 
    120         self.UDPSockOut.close() 
    121                      
    122     def build_midi_map(self, midi_map_handle): 
    123         for i in range(0,128): 
    124             for j in (range(0,16)): 
    125                 Live.MidiMap.forward_midi_cc(self.c_instance.handle(), midi_map_handle, j, i) 
    126              
     81 
    12782    def refresh_state(self): 
    12883        pass 
Note: See TracChangeset for help on using the changeset viewer.