utils/pianoroll-client.py
author ymh <ymh.work@gmail.com>
Mon, 27 Oct 2014 18:09:39 +0100
changeset 73 2a6590aeac15
parent 68 9f6b2da245a3
child 85 eff9460bd4f2
permissions -rw-r--r--
Add argument for events on pianoroll client
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env python
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
"""
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Example of a UDP txosc sender with Twisted.
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
This example is in the public domain.
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
"""
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
73
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
     8
import argparse
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
import csv
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
import sys
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
import time
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
from twisted.internet import reactor
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from txosc import osc
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from txosc import dispatch
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from txosc import async
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
class UDPSenderApplication(object):
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    """
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    Example that sends UDP messages.
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    """
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    def __init__(self, port, host, address, rows):
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        self.port = port
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        self.host = host
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        self.client = async.DatagramClientProtocol()
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        self._client_port = reactor.listenUDP(0, self.client)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        self.rows = rows
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        self.address = address
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        reactor.callLater(0, self.send_messages)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    def _send(self, element):
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        # This method is defined only to simplify the example
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        self.client.send(element, (self.host, self.port))
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        print("Sent %s to %s:%d" % (element, self.host, self.port))
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    def send_messages(self):
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        tc = 0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        for row in self.rows:
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            row_conv = [ osc.TimeTagArgument(float(row[0]))] + [osc.IntArgument(int(a)) for a in row[1:]]
21
89d235bcbbf3 few enhancements
cavaliet
parents: 2
diff changeset
    41
            #time.sleep((row_conv[1].value-tc)/10**3)
89d235bcbbf3 few enhancements
cavaliet
parents: 2
diff changeset
    42
            time.sleep(0.1)
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 21
diff changeset
    43
            #tc = row_conv[1].value
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
            self._send(osc.Message(self.address,*row_conv))
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        print("Goodbye.")
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        reactor.callLater(0.1, reactor.stop)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
if __name__ == "__main__":
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
73
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    50
    parser = argparse.ArgumentParser(description='Simulate an (osc) pianoroll client.')
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    51
    parser.add_argument('datafile', metavar='DATAFILE', help='The file containing the pianoroll data (CSV).')
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    52
    parser.add_argument('-e', '--event', dest='event', metavar='EVENT', required=True, help='the event code.')
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    53
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    54
    args = parser.parse_args()
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    55
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    56
    with open(args.datafile, 'rU') as datafile:
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        reader = csv.reader(datafile, delimiter=' ')
73
2a6590aeac15 Add argument for events on pianoroll client
ymh <ymh.work@gmail.com>
parents: 68
diff changeset
    58
        app = UDPSenderApplication(9090, "127.0.0.1", "/pianoroll/%s/" % args.event, list(reader))
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    reactor.run()