11#!/usr/bin/python
22
33import contextlib
4+ import re
45import threading
56
67from gcloud .credentials import get_credentials
@@ -70,16 +71,27 @@ def request_stream(stop_audio, channels=CHANNELS, rate=RATE, chunk=CHUNK):
7071 # The initial request must contain metadata about the stream, so the
7172 # server knows how to interpret it.
7273 metadata = InitialRecognizeRequest (
73- encoding = 'LINEAR16' , sample_rate = rate )
74- audio_request = AudioRequest (content = audio_stream .read (chunk ))
74+ encoding = 'LINEAR16' , sample_rate = rate ,
75+ # Note that setting interim_results to True means that you'll
76+ # likely get multiple results for the same bit of audio, as the
77+ # system re-interprets audio in the context of subsequent audio.
78+ # However, this will give us quick results without having to tell
79+ # the server when to finalize a piece of audio.
80+ interim_results = True , continuous = False ,
81+ )
82+ data = audio_stream .read (chunk )
83+ audio_request = AudioRequest (content = data )
7584
7685 yield RecognizeRequest (
7786 initial_request = metadata ,
7887 audio_request = audio_request )
7988
8089 while not stop_audio .is_set ():
90+ data = audio_stream .read (chunk )
91+ if not data :
92+ raise StopIteration ()
8193 # Subsequent requests can all just have the content
82- audio_request = AudioRequest (content = audio_stream . read ( chunk ) )
94+ audio_request = AudioRequest (content = data )
8395
8496 yield RecognizeRequest (audio_request = audio_request )
8597
@@ -95,8 +107,7 @@ def listen_print_loop(recognize_stream):
95107
96108 # Exit recognition if any of the transcribed phrases could be
97109 # one of our keywords.
98- if any (alt .confidence > .5 and
99- (alt .transcript .strip () in ('exit' , 'quit' ))
110+ if any (re .search (r'\b(exit|quit)\b' , alt .transcript )
100111 for result in resp .results
101112 for alt in result .alternatives ):
102113 print ('Exiting..' )
0 commit comments