Errno 13权限被拒绝:'file.mp3'Python

时间:2016-10-02 16:06:06

标签: python pygame mp3 text-to-speech

写入音频文件时出错。

基本上,每当我调用函数然后播放它时,我都会覆盖mp3中的数据。

它第一次通过,但后来给我workorder

以下是代码:

[Errno 13] Permission denied: 'file.mp3'

错误发生在def speech(self, response): audio_file = "response.mp3" tts = gTTS(text=str(response), lang="en") tts.save(audio_file) pygame.mixer.init() pygame.mixer.music.load(audio_file) pygame.mixer.music.play() 行。

更多信息:

tts.save

谢谢!

7 个答案:

答案 0 :(得分:1)

from gtts import gTTS
import playsound
import os

x = ['sunny', 'sagar', 'akhil']
tts = 'tts'
for i in range(0,3):
    tts = gTTS(text= x[i], lang = 'en')
    file1 = str("hello" + str(i) + ".mp3")
    tts.save(file1)
    playsound.playsound(file1,True)
    print 'after'
    os.remove(file1)

每次保存时都会更改文件名,这对我有用。

答案 1 :(得分:1)

您收到此错误,因为混音器没有释放该音频文件。如果要混合器释放该文件,则可以将无用或空文件加载到混合器中。然后,您可以覆盖该音频文件。 例如{。{1}} 此先前加载的文件释放后。

答案 2 :(得分:0)

这是一个更好的解决方案,如果我有时间我也会计算登陆同一档案的概率

from gtts import gTTS
from playsound import playsound
import random
import os

#creating a super random named file

r1 = random.randint(1,10000000)
r2 = random.randint(1,10000000)

randfile = str(r2)+"randomtext"+str(r1) +".mp3"

tts = gTTS(text='hey, STOP It!!', lang='en', slow=True)
tts.save(randfile)
playsound(randfile)

print(randfile)
os.remove(randfile)

答案 3 :(得分:0)

您可以在同一文件夹中创建另一个文件,只需复制并重命名即可。

您要使用的文件:(“ C:/.../ file.mp3”) 复制的文件:(“ C:/.../ file_copy.mp3”)

您可以将在mixer.music.load(“ C:/.../ file.mp3”)中加载的文件更改为mixer.music.load(“ C:/.../ file_copy.mp3”)和delete使用此命令可以毫无问题地删除(“ C:/.../ file.mp3”)

from pygame import mixer
import os

mixer.music.load("C:/.../file.mp3")
mixer.music.play()
mixer.music.load("C:/.../file_copy.mp3")
os.remove("C:/.../file.mp3")

但是上面的代码会在播放之前删除文件,因此您可以使用一种方法等待播放:

from pygame import mixer
import os

mixer.music.load("C:/.../file.mp3")
mixer.music.play()
while mixer.music.get_busy(): # check if the file is playing
    pass
mixer.music.load("C:/.../file_copy.mp3")
os.remove("C:/.../file.mp3")

答案 4 :(得分:0)

您每次都应使用唯一名称来命名文件,因此我意识到的解决方案是使用 date 来命名文件,例如==>

    date_string = datetime.now().strftime("%d%m%Y%H%M%S")
    filename = "voice"+date_string+".mp3"
    tts.save(filename)
    playsound.playsound(filename)

答案 5 :(得分:0)

我遇到了同样的问题,然后弄清楚该文件指向了先前的位置,因此我必须释放它。它工作正常,重要的是它也不会创建mp3文件。如果不释放它,它将第一次正常运行并保存音频文件,然后第二次出现错误。

from gtts import gTTS
import  os
import playsound

def tts(text, lang):
     file = gTTS(text = text, lang = lang)
     file.save("audio/speak_func.mp3")
     playsound.playsound('audio/speak_func.mp3', True)
     os.remove("audio/speak_func.mp3")

答案 6 :(得分:0)

如果您不想再保存文件,则可以在保存下一个文件之前删除音频文件。因此,您可以使用相同的名称保存新文件。 下面是我成功运行的代码

import speech_recognition as ram
from playsound import playsound
from gtts import gTTS
import os
r=ram.Recognizer()
with ram.Microphone() as source:
    while True:
        r.adjust_for_ambient_noise(source,duration=1)
        print("I'm Listening....")
        playsound('audio/listen.mp3')
        audio=r.listen(source, timeout=5)
        text=r.recognize_google(audio)
        tts = gTTS("Boss. you said "+str(text)+". i'm opening it")
        tts.save('audio/text.mp3')
        print("you said "+text+".")
        playsound('audio/text.mp3')
        os.remove('audio/text.mp3')