allocate filename when signal starts
[scannr.git] / scannr.py
blob:a/scannr.py -> blob:b/scannr.py
--- a/scannr.py
+++ b/scannr.py
@@ -2,31 +2,43 @@
 import time
 from datetime import date
 import threading
+from pydispatch import dispatcher
+import wave
 
-filename = ""
+filename = "demo.wav"
+
 def worker(filename):
     """thread worker function
     http://www.doughellmann.com/PyMOTW/threading/
 
-    https://github.com/uskr/pynma"""
+    https://github.com/uskr/pynma
+
+http://stackoverflow.com/questions/1092531/event-system-in-python """
     print 'Worker for '+filename
+    
     return
 
 def filenameMaker():
     global filename
-    while True:
-        filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'
-        time.sleep(5)
+    filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'
 
+def record_to_async_file():
+    "Records from the microphone and outputs the resulting data to `path`"
+    sample_width, data = snd.record()
+    data = snd.pack('<' + ('h'*len(data)), *data)
+    path = filename
+    dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename)
+    wf = wave.open(path, 'wb')
+    wf.setnchannels(1)
+    wf.setsampwidth(sample_width)
+    wf.setframerate(snd.RATE)
+    wf.writeframes(data)
+    wf.close()
+    print("done - result written to "+path)
 
-
-threads = []
-fm = threading.Thread(target=filenameMaker)
-fm.daemon = True
-fm.start()
+dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any )
+dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any )
 print "Scannr started..."
 while True:
     print "ready to record"
-    snd.record_to_file(filename)
-    t = threading.Thread(target=worker,args=(filename,))
-    t.start()
+    record_to_async_file()