--- 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()