2017-06-21 23 views
0
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() 

这里是我的代码时,我尝试在第二次使用funtion它给我的错误(对不起不好英语)的urllib - 检索得到错误的第二次运行

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' 

我也试过,但它没有工作,发挥它的声音,但仍然发生同样的错误

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() 
    while mixer.music.get_busy(): 
     pass 
    mixer.music.stop() 
+0

不是urllib的问题(顺便说一句之后,您可能需要使用[要求](HTTP: //docs.python-requests.org/en/master/)),除非urllib没有关闭()它。您的程序无法打开文件进行写入。你有没有在别的地方打开它? –

+0

似乎是由检索调用导致文件被拒绝的权限,可能是由于您的调音台仍然在该文件上持有句柄。 – BoboDarph

回答

0

最后我固定与此代码 注意:并不是这个错误pygame的原因确实关闭文件音乐停止

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() 
    while mixer.music.get_busy(): 
     pass 
    mixer.music.stop() 
    mixer.music.load('storage/dumpfile.mp3') 
1

似乎是造成检索调用,可能的事实,调音台仍抱着对文件句柄套管的文件拒绝权限。推荐使用

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

也可以考虑删除文件时,即可大功告成用它。

+0

我试过2.方法但它不工作,它给出了文件C:\ Users \ pc \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ urllib \ request .py“,1800行,检索 tfp = open(filename,'wb') TypeError:expected str,bytes或os.PathLike object,not _io.BufferedWriter' –

+0

我试过把'downloader.retrieve('https://translate.google.com/translate_tts? ie = UTF-8&q = {0}&tl = en&client = tw-ob'.format(quote(text)),mp3_file)'to'downloader.retrieve('https://translate.google.com/translate_tts?ie= UTF-8&q = {0}&tl = en&client = tw-ob'.format(quote(text)),mp3_file.name)'但它仍然不起作用 –

+0

当我尝试手动移除文件时,窗口说python使用文件 –

相关问题