def _listen(self, hello: str, voice) -> tuple: lvl = 5 # Включаем монопольный режим commands = None if self.cfg.gts('alarmkwactivated'): self.own.play(self.cfg.path['ding'], lvl, blocking=2) else: self.own.set_lvl(lvl) self.own.kill_popen() self.log('audio devices: {}'.format(pyaudio.PyAudio().get_device_count() - 1), logger.DEBUG) hello = hello or self.sys_say.hello file_path = self.own.tts(hello) if not voice and hello else None if self.cfg.gts('blocking_listener'): audio, record_time, energy, rms = self._block_listen(hello, lvl, file_path) else: audio, record_time, energy, rms = self._non_block_listen(hello, lvl, file_path) self.log(F('Голос записан за {}', utils.pretty_time(record_time)), logger.INFO) # Выключаем монопольный режим self.own.clear_lvl() if self.cfg.gts('alarmstt'): self.own.play(self.cfg.path['dong']) if audio is not None: commands = self.voice_recognition(audio) if commands: self.log(utils.recognition_msg(commands, energy, rms), logger.INFO) return commands, rms
def _detected_sr(self, msg: str, model_name: str, model_msg: str or None, vad, cb=None): energy, rms = (vad.energy_threshold, vad.rms()) if vad is not None else (None, None) if not cb: msg = 'Activation error: \'{}\', trigger: {}{}'.format(msg, model_name, model_msg) msg = recognition_msg(msg, energy, rms) self.log(msg, logger.DEBUG) return self._recognition_sr_action(msg, energy, rms, model_name, model_msg, cb)
def _recognition_sr_action(self, msg, energy, rms, model_name, model_msg, cb): self.log(recognition_msg(msg, energy, rms), logger.INFO) self.log(F('Голосовая активация по {}{}', model_name, model_msg), logger.INFO) cb(False, msg, rms, model_name)