--- a/utils/pianoroll-client.py Tue Jan 13 15:27:20 2015 +0100
+++ b/utils/pianoroll-client.py Fri Jan 16 03:16:19 2015 +0100
@@ -7,6 +7,7 @@
import argparse
import csv
+import signal
import time
import ntplib
@@ -19,7 +20,7 @@
"""
Example that sends UDP messages.
"""
- def __init__(self, port, host, address, rows, shift):
+ def __init__(self, port, host, address, rows, shift, token):
self.port = port
self.host = host
self.client = async.DatagramClientProtocol()
@@ -27,6 +28,7 @@
self.rows = rows
self.address = address
self.shift = shift
+ self.token = token
reactor.callLater(0, self.send_messages)
def _send(self, element):
@@ -36,19 +38,31 @@
def send_messages(self):
t0 = time.time()
+ #tc = 0
for row in self.rows:
+ if not self.token.running:
+ break
if self.shift:
- row[0] = ntplib.system_to_ntp_time(t0 + float(row[1])/10**3)
+ row[0] = ntplib.system_to_ntp_time(t0 + float(row[1])/1000.0)
row_conv = [ osc.TimeTagArgument(float(row[0]))] + [osc.IntArgument(int(a)) for a in row[1:]]
- #time.sleep((row_conv[1].value-tc)/10**3)
- time.sleep(0.1)
- #tc = row_conv[1].value
+ #time.sleep((row_conv[1].value-tc)/1000.0)
+ sleep_time = t0+float(row[1])/1000.0-time.time()
+ if sleep_time > 0:
+ time.sleep(sleep_time)
+ #time.sleep(0.1)
+ tc = row_conv[1].value
self._send(osc.Message(self.address,*row_conv))
print("Goodbye.")
reactor.callLater(0.1, reactor.stop)
+class Token(object):
+ def __init__(self):
+ self.running = True
+
if __name__ == "__main__":
+ token = Token()
+
parser = argparse.ArgumentParser(description='Simulate an (osc) pianoroll client.')
parser.add_argument('datafile', metavar='DATAFILE', help='The file containing the pianoroll data (CSV).')
parser.add_argument('-e', '--event', dest='event', metavar='EVENT', required=True, help='the event code.')
@@ -56,8 +70,16 @@
args = parser.parse_args()
+ def customHandler(signum, _):
+ print("Got signal: %s" % signum)
+ token.running = False
+ if reactor.running:
+ reactor.callFromThread(reactor.stop) # to stop twisted code when in the reactor loop
+ signal.signal(signal.SIGINT, customHandler)
+
+
with open(args.datafile, 'rU') as datafile:
reader = csv.reader(datafile, delimiter=' ')
- app = UDPSenderApplication(9090, "127.0.0.1", "/pianoroll/%s/" % args.event, list(reader), args.shift)
+ app = UDPSenderApplication(9090, "127.0.0.1", "/pianoroll/%s/" % args.event, list(reader), args.shift, token)
reactor.run()