我正在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()
答案 0 :(得分:0)
欢迎Samuel_05我也是这里的新朋友!
首先,我们可以使用io.BytesIO(称为字节IO,缓冲IO,虚拟IO,并且列表继续...)代替使用文件来存储来自gTTS的聚合数据。将从Google提取的TTS数据存储在内存中。不幸的是,您的代码中使用的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")