0

我正在用 Windows 上的 python 编写个人助理,它工作得非常糟糕,有时我有错误 13 - 对存储语音的文件的权限被拒绝。有时它直接无法识别我的声音,有时它会花费一分钟或更长时间来识别我的声音。查看代码,我应该改进哪些内容以使其更好地工作?

import os
import time
import playsound
import speech_recognition as sr
from gtts import gTTS


def speak(text):
    tts = gTTS(text=text, lang="es-ES")
    filename = "voice.mp3"
    tts.save(filename)
    playsound.playsound(filename)


def get_audio():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source)
        said = ""

        try:
            said = r.recognize_google(audio, language="es-ES")
            print(said)
        except Exception as e:
            print("Exception: " + str(e))

    return said

speak("Di algo")
get_audio()
4

1 回答 1

0

欢迎 Samuel_05 我也是新来的!

首先,我们可以使用io.BytesIO(称为 Bytes IO、Buffered IO、Virtual IO,等等……)对象来存储拉取的 tts 数据,而不是使用文件来存储来自 gTTS 的聚合数据。来自谷歌的记忆。不幸的是,playsound您的代码中使用的模块不支持通过类似文件的对象进行音频流传输。另一种方法是pygame通过类似文件的对象支持 mp3 播放。使用类似文件的对象应该可以解决您的权限被拒绝错误。

代码

from pygame import mixer
import speech_recognition as sr
from gtts import gTTS
from io import BytesIO


# Adapted from:
# https://github.com/pndurette/gTTS/issues/26#issuecomment-607573170
def speak(text):
    with BytesIO() as f:
        tts = gTTS(text=text, lang="es-ES")
        tts.write_to_fp(f)  # Write speech to f
        f.seek(0)  # seek to zero after writing
        mixer.music.load(f)
        mixer.music.play()
        while mixer.music.get_busy():
            continue


def get_audio():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source)
        said = ""

        try:
            said = r.recognize_google(audio, language="es-ES")
            print(said)
        except Exception as e:
            print("Exception: " + str(e))

    return said

mixer.init()
speak("Di algo")
于 2020-05-21T05:45:18.300 回答