idea ide updates
[scannr.git] / snd.py
blob:a/snd.py -> blob:b/snd.py
--- a/snd.py
+++ b/snd.py
@@ -14,9 +14,9 @@
 FORMAT = pyaudio.paInt16
 RATE = 44100
 if sys.platform.startswith('darwin'):
-       CHANNELS = 2
+    CHANNELS = 2
 elif sys.platform.startswith('win32'):
-       CHANNELS = 1
+    CHANNELS = 1
 
 MAX_SILENT = 80
 
@@ -26,24 +26,27 @@
     "print max(L) < THRESHOLD"
     return max(L) < THRESHOLD
 
+
 def normalize(L):
     "Average the volume out"
     MAXIMUM = 16384
-    times = float(MAXIMUM)/max(abs(i) for i in L)
+    times = float(MAXIMUM) / max(abs(i) for i in L)
 
     LRtn = array('h')
     for i in L:
-        LRtn.append(int(i*times))
+        LRtn.append(int(i * times))
     return LRtn
+
 
 def trim(L):
     "Trim the blank spots at the start and end"
+
     def _trim(L):
         snd_started = False
         LRtn = array('h')
 
         for i in L:
-            if not snd_started and abs(i)>THRESHOLD:
+            if not snd_started and abs(i) > THRESHOLD:
                 snd_started = True
                 LRtn.append(i)
 
@@ -60,12 +63,14 @@
     L.reverse()
     return L
 
+
 def add_silence(L, seconds):
     "Add silence to the start and end of `L` of length `seconds` (float)"
-    LRtn = array('h', [0 for i in xrange(int(seconds*RATE))])
+    LRtn = array('h', [0 for i in xrange(int(seconds * RATE))])
     LRtn.extend(L)
-    LRtn.extend([0 for i in xrange(int(seconds*RATE))])
+    LRtn.extend([0 for i in xrange(int(seconds * RATE))])
     return LRtn
+
 
 def record():
     """
@@ -79,8 +84,8 @@
     """
     p = pyaudio.PyAudio()
     stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE,
-                    input=True,
-                    frames_per_buffer=CHUNK_SIZE)
+        input=True,
+        frames_per_buffer=CHUNK_SIZE)
 
     num_silent = 0
     snd_started = False
@@ -88,13 +93,13 @@
     LRtn = array('h')
 
     while 1:
-	try:
-	        data = stream.read(CHUNK_SIZE)
-	except IOError as ex:
-    		if ex[1] != pyaudio.paInputOverflowed:
-		        raise
-	    	data = '\x00' * CHUNK_SIZE
-        L = unpack('<' + ('h'*(len(data)/2)), data) # little endian, signed short
+        try:
+            data = stream.read(CHUNK_SIZE)
+        except IOError as ex:
+            if ex[1] != pyaudio.paInputOverflowed:
+                raise
+            data = '\x00' * CHUNK_SIZE
+        L = unpack('<' + ('h' * (len(data) / 2)), data) # little endian, signed short
         L = array('h', L)
 
         silent = is_silent(L)
@@ -104,11 +109,11 @@
             num_silent += 1
             #print num_silent
         elif not silent and not snd_started:
-            dispatcher.send( signal='SND_STARTED')
+            dispatcher.send(signal='SND_STARTED')
             snd_started = True
             print snd_started
         if snd_started and not silent:
-	    num_silent = 0
+            num_silent = 0
         if snd_started:
             LRtn.extend(L)
         if snd_started and num_silent > MAX_SILENT:
@@ -124,10 +129,11 @@
     LRtn = add_silence(LRtn, 0.5)
     return sample_width, LRtn
 
+
 def record_to_file(path):
     "Records from the microphone and outputs the resulting data to `path`"
     sample_width, data = record()
-    data = pack('<' + ('h'*len(data)), *data)
+    data = pack('<' + ('h' * len(data)), *data)
 
     wf = wave.open(path, 'wb')
     wf.setnchannels(CHANNELS)
@@ -135,14 +141,12 @@
     wf.setframerate(RATE)
     wf.writeframes(data)
     wf.close()
-    print("done - result written to "+path)
+    print("done - result written to " + path)
     del data
 
 
+if __name__ == '__main__':
+    filename = 'demo.wav'
+    record_to_file(filename)
+    print("done - result written to " + filename)
 
-
-if __name__ == '__main__':
-	filename = 'demo.wav'
-        record_to_file(filename)
-        print("done - result written to "+filename)
-