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
还请考虑在完成文件后将其删除。
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
还请考虑在完成文件后将其删除。