Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Windows上使用pygame多次编写和播放相同的.mp3文件?_Python_Pygame - Fatal编程技术网

Python 如何在Windows上使用pygame多次编写和播放相同的.mp3文件?

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

在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: [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
。这是一个黑客,但它似乎为我的目的工作。