def _mic_level_watcher(self, bus, message, *args):
structure = message.get_structure()
peak = structure.get_value('peak')[0]
self._log.info("Peak level %s", peak)
if peak > SILENCE_DETECTION_RANGE[0] and not self.speaking_started:
self.audio_from_mic = queue.Queue()
self._log.info("Speaking started into queue %s", self.audio_from_mic)
self.speaking_started = True
if self._listening_timeout_timer:
GObject.source_remove(self._listening_timeout_timer)
self.speaking_finished_event = threading.Event()
self.RecognizeCallback(self.audio_from_mic,
self._mic_pipeline.dialogid,
self.speaking_finished_event)
if peak < SILENCE_DETECTION_RANGE[1] and self.speaking_started:
self.silence_count += 1
if self.silence_count > 2:
self._log.info("Speaking finished")
self.speaking_started = False
self.silence_count = 0
self._mic_pipeline.set_state(Gst.State.PAUSED)
self.speaking_finished_event.set()
aplay(ACK_BEEP, _bg=True)
return True
评论列表
文章目录