allocate filename when signal starts
[scannr.git] / scannr.py
blob:a/scannr.py -> blob:b/scannr.py
import snd import snd
import time import time
from datetime import date from datetime import date
import threading import threading
  from pydispatch import dispatcher
  import wave
   
filename = "" filename = "demo.wav"
   
def worker(filename): def worker(filename):
"""thread worker function """thread worker function
http://www.doughellmann.com/PyMOTW/threading/ 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 print 'Worker for '+filename
   
return return
   
def filenameMaker(): def filenameMaker():
global filename global filename
while True: filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'
filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'  
time.sleep(5)  
   
  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)
   
  dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any )
threads = [] dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any )
fm = threading.Thread(target=filenameMaker)  
fm.daemon = True  
fm.start()  
print "Scannr started..." print "Scannr started..."
while True: while True:
print "ready to record" print "ready to record"
snd.record_to_file(filename) record_to_async_file()
t = threading.Thread(target=worker,args=(filename,))  
t.start()