Пример #1
0
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()
Пример #2
0
    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()  # 清理缓存
Пример #3
0
 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)