Python 如何在Windows上使用pygame多次编写和播放相同的.mp3文件?
在Linux上,以下示例可以正常工作:Python 如何在Windows上使用pygame多次编写和播放相同的.mp3文件?,python,pygame,Python,Pygame,在Linux上,以下示例可以正常工作: import pygame from gtts import gTTS pygame.mixer.init() t = 'temp.mp3' for i in range(5): gTTS(str(i)).save(t) pygame.mixer.music.load(t) pygame.mixer.munic.play() 这将播放数字0-4 在Windows上,相同的代码将导致错误: PermissionError: [E
import pygame
from gtts import gTTS
pygame.mixer.init()
t = 'temp.mp3'
for i in range(5):
gTTS(str(i)).save(t)
pygame.mixer.music.load(t)
pygame.mixer.munic.play()
这将播放数字0-4
在Windows上,相同的代码将导致错误:
PermissionError: [Errno 13] Permission denied: 'temp3.mp3'
当i==1
时。也就是说,它在第二个循环中崩溃。碰撞发生在gTTS内。保存在:
with open(savefile, 'wb') as f:
self.write_to_fp(f)
作为一种变通方法,我还尝试了:
with tempfile.TemporaryFile() as t:
gTTS(str(i)).save(t)
pygame.mixer.music.load(t)
pygame.mixer.munic.play()
但是,我得到了错误
error: Couldn't read from RWops
还值得注意的是,这是一个每次都失败的最小示例。在我的完整代码中,我通常很少编写和播放,这是成功的,我可以在同一个脚本中从temp.py
播放多次。只有在多次尝试背靠背写入和读取时,才会出现此问题 尝试使用NamedTemporaryFile()
并将t.name
而不是t
传递给with
子句中的两个函数。有趣的是,这在第三种方式中失败。我在tempfile位置(在AppData/Local中)再次得到了PermissionError
,但它在gTTS.save()中的第一个循环中崩溃,open(savefile,'wb')为f:self。write_to_fp(f)
我尝试以管理员身份运行,但错误以两种方式出现。在linux代码中,Windows上的i==1
出现PermissionError
,原因可能是上一次迭代中的文件播放尚未完成,因此该文件仍在使用中。不确定,因为您没有说明导致异常的代码行。原始异常也来自gTTS.save
功能。我编辑了我的答案以反映这一点。我认为你是对的,该文件仍在使用中。但完成播放似乎并没有释放文件。我找到了一个解决办法,基本上是加载第二个temp2.mp3
文件,它永远不会改变,它们会写入并重新加载原始的temp.mp3
。这是一个黑客,但它似乎为我的目的工作。