@@ -24,14 +24,42 @@ def __init__(self, energy_threshold=1000, phrase_timeout=3.0, record_timeout=30)
2424 self .data_queue = Queue ()
2525 self .mic_dev_index = None
2626
27- def listen (self ):
27+ def listen (self , ready_callback = None ):
28+ self .phrase_complete = False
29+ start = datetime .utcnow ()
30+ self .start_listening ()
31+ if ready_callback :
32+ ready_callback ()
33+ while (
34+ self .listener_handle
35+ and not self .speech_waiting ()
36+ or not self .phrase_complete
37+ ):
38+ if self .phrase_time and start - self .phrase_time > timedelta (
39+ seconds = self .phrase_timeout
40+ ):
41+ self .last_sample = bytes ()
42+ self .phrase_complete = True
43+ self .phrase_time = start
44+ self .stop_listening ()
45+
46+ def start_listening (self ):
2847 if not self .listener_handle :
2948 with sr .Microphone () as source :
30- print (source .stream )
3149 self .recognizer .adjust_for_ambient_noise (source )
32- audio = self .recognizer .listen (source , timeout = self .record_timeout )
33- data = audio .get_raw_data ()
34- self .data_queue .put (data )
50+ self .listener_handle = self .recognizer .listen_in_background (
51+ sr .Microphone (),
52+ self .record_callback ,
53+ phrase_time_limit = self .record_timeout ,
54+ )
55+
56+ def stop_listening (self , wait_for_stop = False ):
57+ if self .listener_handle :
58+ self .listener_handle (wait_for_stop = wait_for_stop )
59+ self .listener_handle = None
60+
61+ def is_listening (self ):
62+ return self .listener_handle is not None
3563
3664 def record_callback (self , _ , audio : sr .AudioData ) -> None :
3765 # Grab the raw bytes and push it into the thread safe queue.
0 commit comments