pygame 播放后不关闭文件

pygame does not close files after play

from urllib.request import URLopener
from urllib.parse   import quote
from pygame import mixer

def speak(text):
    downloader = URLopener()
    downloader.addheader('Referer', 'https://translate.google.com/')
    downloader.addheader('User-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')
    downloader.retrieve('https://translate.google.com/translate_tts?ie=UTF-8&q={0}&tl=en&client=tw-ob'.format(quote(text)), 'storage/tts.mp3')
    mixer.init()
    mixer.music.load('storage/tts.mp3')
    mixer.music.play()

这是我的代码,当我第二次尝试使用函数时它给了我错误(抱歉英语不好)

downloader.retrieve('https://translate.google.com/translate_tts?ie=UTF-8&q={
    0}&tl=en&client=tw-ob'.format(quote(text)), 'storage/tts.mp3')
      File "C:\Users\pc\AppData\Local\Programs\Python\Python36-32\lib\urllib\request
    .py", line 1800, in retrieve
        tfp = open(filename, 'wb')
    PermissionError: [Errno 13] Permission denied: 'storage/tts.mp3'

似乎是由检索调用导致的文件权限被拒绝,可能是因为您的混音器仍然持有该文件的句柄。建议用

停止播放
mixer.music.stop()

如果这不起作用,请尝试在检索之前打开文件

from urllib.request import URLopener
from urllib.parse   import quote
from pygame import mixer

def speak(text):
    downloader = URLopener()
    downloader.addheader('Referer', 'https://translate.google.com/')
    downloader.addheader('User-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')
    mp3_file = open('storage/tts.mp3')
    downloader.retrieve('https://translate.google.com/translate_tts?ie=UTF-8&q={0}&tl=en&client=tw-ob'.format(quote(text)), mp3_file)
    mixer.init()
    mixer.music.load('storage/tts.mp3')
    mixer.music.play()
    mixer.music.stop()
    mp3_file.close()

此处有更多详细信息https://groups.google.com/forum/#!topic/pygame-mirror-on-google-groups/XjSh9zs8j0U

还请考虑在完成文件后将其删除。