Errno 13 Permission denied: 'file.mp3' Python

天涯浪子 提交于 2019-12-31 06:26:29

问题


I am getting an error when writing to an audio file.

Basically, I am overwriting the data in the mp3 whenever my function gets called and then playing it.

It works the first time through, but then gives me [Errno 13] Permission denied: 'file.mp3' then on.

Here is the code:

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()

Error is on the tts.save line.

More info:

Traceback (most recent call last):

  File "myprojectpath", line 63, in speech
    tts.save(audio_file)

  File "C:\Python35\lib\site-packages\gtts\tts.py", line 93, in save
    with open(savefile, 'wb') as f:

Thanks!


回答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)

change the file name every time you save it, this worked for me.




回答2:


a much better solution is this, if i had the time i would also calculate the probability of ever landing a same file

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:


You can create another file in the same folder, just copy and rename it.

File you want to use: ("C:/.../file.mp3") copied file: ("C:/.../file_copy.mp3")

You can change the file loaded in mixer.music.load("C:/.../file.mp3") to mixer.music.load("C:/.../file_copy.mp3") and delete delete the ("C:/.../file.mp3") without problem using this:

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")

but the code above will remove the file before even playing it, so you can use a method to await it play:

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:


You should name your file for a unique name each time , so the solution that I realized is to name your file with date like this ==>

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


来源:https://stackoverflow.com/questions/39818922/errno-13-permission-denied-file-mp3-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!