utils/pianoroll-client.py
changeset 0 e1d4d7a8255a
child 2 fc1ab0074e29
equal deleted inserted replaced
-1:000000000000 0:e1d4d7a8255a
       
     1 #!/usr/bin/env python
       
     2 """
       
     3 Example of a UDP txosc sender with Twisted.
       
     4 
       
     5 This example is in the public domain.
       
     6 """
       
     7 
       
     8 import csv
       
     9 import sys
       
    10 import time
       
    11 
       
    12 from twisted.internet import reactor
       
    13 from txosc import osc
       
    14 from txosc import dispatch
       
    15 from txosc import async
       
    16 
       
    17 
       
    18 class UDPSenderApplication(object):
       
    19     """
       
    20     Example that sends UDP messages.
       
    21     """
       
    22     def __init__(self, port, host, address, rows):
       
    23         self.port = port
       
    24         self.host = host
       
    25         self.client = async.DatagramClientProtocol()
       
    26         self._client_port = reactor.listenUDP(0, self.client)
       
    27         self.rows = rows
       
    28         self.address = address
       
    29         reactor.callLater(0, self.send_messages)
       
    30 
       
    31     def _send(self, element):
       
    32         # This method is defined only to simplify the example
       
    33         self.client.send(element, (self.host, self.port))
       
    34         print("Sent %s to %s:%d" % (element, self.host, self.port))
       
    35 
       
    36     def send_messages(self):
       
    37         tc = 0
       
    38         for row in self.rows:
       
    39             row_conv = [ osc.TimeTagArgument(float(row[0]))] + [osc.IntArgument(int(a)) for a in row[1:]]
       
    40             time.sleep((row_conv[1].value-tc)/10**3)
       
    41             tc = row_conv[1].value
       
    42             self._send(osc.Message(self.address,*row_conv))
       
    43             break
       
    44         print("Goodbye.")
       
    45         reactor.callLater(0.1, reactor.stop)
       
    46 
       
    47 if __name__ == "__main__":
       
    48 
       
    49     with open(sys.argv[1], 'rU') as datafile:
       
    50         reader = csv.reader(datafile, delimiter=' ')
       
    51         app = UDPSenderApplication(9090, "127.0.0.1", '/pianoroll/test/', list(reader))
       
    52 
       
    53     reactor.run()