1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s\t%(levelname)s\t%(message)s') import snd import time from datetime import date import threading from pydispatch import dispatcher import wave import serial #python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr import psycopg2 import csv import sys,os sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma')) import pynma filename = "demo.wav" MIN_LENGTH = 90000 def worker(filename, length): """thread worker function http://www.doughellmann.com/PyMOTW/threading/ https://github.com/uskr/pynma ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp http://stackoverflow.com/questions/2559746/getting-error-while-converting-wav-to-amr-using-ffmpeg """ print 'Worker for '+filename ser.write("GLG\r") line = ser.readline() # read a '\n' terminated line print line reader = csv.reader([line]) for row in reader: #GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE if (row[0] != 'GLG'): print "uh oh" if (row[1] != ''): tgid = row[1] #nma.push("scannr", "ping", filename, "http://www.google.com") tgname = row[7] sitename = row[5] """http://initd.org/psycopg/docs/usage.html""" cur = conn.cursor() cur.execute("INSERT INTO recordings (filename,tgid,tgname,sitename,length) VALUES (%s, %s,%s, %s, %s)",(filename,tgid,tgname,sitename, length)) conn.commit() cur.close() else: print filename+" has no TGID" return def filenameMaker(): global filename 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() print str(len(data)) if len(data) > MIN_LENGTH: data = snd.pack('<' + ('h'*len(data)), *data) path = "./data/"+filename dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename, length=len(data)) wf = wave.open(path, 'wb') wf.setnchannels(2) wf.setsampwidth(sample_width) wf.setframerate(snd.RATE) wf.writeframes(data) wf.close() del wf print("done - result "+str(len(data))+" frames written to "+path) del data dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any ) dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any ) print "Opening serial port..." if sys.platform.startswith('darwin'): ser = serial.Serial('/dev/tty.usbserial-FTB3VL83', 112500, timeout=1) elif sys.platform.startswith('win32'): ser = serial.Serial('COM20', 112500, timeout=1) print "Loading notifymyandroid..." nma = pynma.PyNMA( "a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f") print "Connecting database..." conn = psycopg2.connect("dbname=scannr user=postgres password=snmc") print "Scannr started." while True: print "ready to record again" record_to_async_file() ser.close() |