def conversation(fp): global player, asr, ai, tts try: snowboydecoder.play_audio_file(constants.getData('beep_lo.wav')) print("converting audio to text") query = asr.transcribe(fp) utils.check_and_delete(fp) msg = ai.chat(query) voice = tts.get_speech(msg) player = Player.getPlayerByFileName(voice) player.play(voice) except ValueError as e: logger.critical(e) utils.clean()
def say(self, msg, cache=False, plugin='', onCompleted=None, wait=False, resident=False): """ 说一句话 :param resident: :param msg: 内容 :param cache: 是否缓存这句话的音频 :param plugin: 来自哪个插件的消息(将带上插件的说明) :param onCompleted: 完成的回调 :param wait: 是否要等待说完(为True将阻塞主线程直至说完这句话) """ self.appendHistory(1, msg, plugin=plugin) if re.match(r'^https?://.+', msg): logger.info("内容包含URL,所以不读出来") self.onSay(msg, '', plugin=plugin) self.onSay = None return voice = utils.getCache(msg, resident=resident) cache_path = '' if voice: logger.info("命中缓存,播放缓存语音") cache_path = voice else: try: voice = self.tts.get_speech(msg, resident=resident) cache_path = utils.saveCache(voice, msg, resident=resident) except Exception as e: logger.error('保存缓存失败:{}'.format(e)) if self.onSay: logger.info(cache) audio = 'http://{}:{}/audio/{}'.format( config.get('/server/host'), config.get('/server/port'), os.path.basename(cache_path)) logger.info('onSay: {}, {}'.format(msg, audio)) self.onSay(msg, audio, plugin=plugin) self.onSay = None if onCompleted is None: def onCompleted(): self._onCompleted(msg) self.player = Player.getPlayerByFileName(voice) self.player.play(voice, not cache, onCompleted, wait) utils.lruCache() # 清理缓存
def play(self, src, delete=False, onCompleted=None, volume=1): """ 播放一个音频 """ if self.player: self.interrupt() self.player = Player.getPlayerByFileName(src) self.player.play(src, delete=delete, onCompleted=onCompleted)