2017-06-21 78 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使用文件 –

相關問題