每当我尝试访问语音识别程序中的文件时,我总是收到权限拒绝错误
I keep getting a permission denial error whenever I try to access a file in a speech recognition program
我正在尝试语音识别并将其用作某些语句的输入,同时让程序使用 playsound 和 gTTS 模块“跟我说话”。但是我 运行 遇到了一个我找不到解决方案的问题,我尝试了最常见的解决方案但没有成功。
程序使用了playsound
、speech_recognition
、gTTS
模块和两个函数; speak()
允许程序使用 google 的文本向用户回复语音 运行slation,并且 get_audio()
使用 [=13= 从用户的麦克风接收输入]的识别器和麦克风类.
import os
import time
import playsound
import speech_recognition as sr
from gtts import gTTS
run = True
def speak(text):
tts = gTTS(text=text, lang="en")
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)
print(said)
except Exception as e:
print("Exception: " + str(e))
return said
while run == True:
text = get_audio()
if "hello" in text:
speak("Hello, how are you?")
if "what are you" in text:
print("")
speak("I am a speech recognition program")
if "goodbye" in text:
speak("Talk to you later" or "Bye" or "Cya")
run = False
我在程序中设置了一个 while 循环,这样就可以进行对话,而且只有在用户说“再见”时对话才会中断。问题似乎是 .mp3 文件(voice.mp3
这是 speak()
函数用来存储音频以供程序播放的文件)在创建后无法访问。 python 文件和 mp3 文件都存储在同一个文件夹中。
完整的错误信息如下:
who are you
hello
Traceback (most recent call last):
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 34, in <module>
speak("Hello, how are you?")
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 12, in speak
tts.save(filename)
File "C:\Python\Python310\lib\site-packages\gtts\tts.py", line 328, in save
with open(str(savefile), "wb") as f:
PermissionError: [Errno 13] Permission denied: 'voice.mp3'
PS C:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition>
我在第一次通话时收到了回复(“你是谁”),但在第二次通话后弹出错误消息(“你好”)。
规格:python3.10.4
- playsound 1.2.2
- 其他都是最新的
我找到了一个似乎工作正常的解决方案;每次使用后我都会删除 .mp3 文件,所以在 speak()
函数的末尾我只使用 os.remove(filename)
然后下次它想说什么时创建一个新文件。
我发现其他一些解决方案说每次创建文件时都应该重命名文件名,但这对我来说太混乱了。
这是我对代码所做的更改,它只是 speak()
函数中的一行:
def speak(text):
tts = gTTS(text=text, lang="en")
filename = "voice.mp3"
tts.save(filename)
playsound.playsound(filename)
os.remove("voice.mp3")
到目前为止,这对我来说非常有效,它可以根据需要接受尽可能多的输入,因为每次使用 speak()
函数时都会删除并重新创建文件。
再一次,如果有人建议或找到更好更有效的解决方案,我会很乐意接受。
您的解决方案工作正常。
我只是将其调整为保留文件(如果您想出于测试目的收听它),而是在开头将其删除(如果存在)。
同时将文件名传递给您的函数可确保没有任何硬编码
def speak(text, filename):
if os.path.exists(filename):
os.remove(filename)
tts = gTTS(text=text, lang="en")
tts.save(filename)
playsound.playsound(filename)
我正在尝试语音识别并将其用作某些语句的输入,同时让程序使用 playsound 和 gTTS 模块“跟我说话”。但是我 运行 遇到了一个我找不到解决方案的问题,我尝试了最常见的解决方案但没有成功。
程序使用了playsound
、speech_recognition
、gTTS
模块和两个函数; speak()
允许程序使用 google 的文本向用户回复语音 运行slation,并且 get_audio()
使用 [=13= 从用户的麦克风接收输入]的识别器和麦克风类.
import os
import time
import playsound
import speech_recognition as sr
from gtts import gTTS
run = True
def speak(text):
tts = gTTS(text=text, lang="en")
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)
print(said)
except Exception as e:
print("Exception: " + str(e))
return said
while run == True:
text = get_audio()
if "hello" in text:
speak("Hello, how are you?")
if "what are you" in text:
print("")
speak("I am a speech recognition program")
if "goodbye" in text:
speak("Talk to you later" or "Bye" or "Cya")
run = False
我在程序中设置了一个 while 循环,这样就可以进行对话,而且只有在用户说“再见”时对话才会中断。问题似乎是 .mp3 文件(voice.mp3
这是 speak()
函数用来存储音频以供程序播放的文件)在创建后无法访问。 python 文件和 mp3 文件都存储在同一个文件夹中。
完整的错误信息如下:
who are you
hello
Traceback (most recent call last):
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 34, in <module>
speak("Hello, how are you?")
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 12, in speak
tts.save(filename)
File "C:\Python\Python310\lib\site-packages\gtts\tts.py", line 328, in save
with open(str(savefile), "wb") as f:
PermissionError: [Errno 13] Permission denied: 'voice.mp3'
PS C:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition>
我在第一次通话时收到了回复(“你是谁”),但在第二次通话后弹出错误消息(“你好”)。
规格:python3.10.4
- playsound 1.2.2
- 其他都是最新的
我找到了一个似乎工作正常的解决方案;每次使用后我都会删除 .mp3 文件,所以在 speak()
函数的末尾我只使用 os.remove(filename)
然后下次它想说什么时创建一个新文件。
我发现其他一些解决方案说每次创建文件时都应该重命名文件名,但这对我来说太混乱了。
这是我对代码所做的更改,它只是 speak()
函数中的一行:
def speak(text):
tts = gTTS(text=text, lang="en")
filename = "voice.mp3"
tts.save(filename)
playsound.playsound(filename)
os.remove("voice.mp3")
到目前为止,这对我来说非常有效,它可以根据需要接受尽可能多的输入,因为每次使用 speak()
函数时都会删除并重新创建文件。
再一次,如果有人建议或找到更好更有效的解决方案,我会很乐意接受。
您的解决方案工作正常。
我只是将其调整为保留文件(如果您想出于测试目的收听它),而是在开头将其删除(如果存在)。
同时将文件名传递给您的函数可确保没有任何硬编码
def speak(text, filename):
if os.path.exists(filename):
os.remove(filename)
tts = gTTS(text=text, lang="en")
tts.save(filename)
playsound.playsound(filename)