2017-06-21 3 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() 

Hier die Mine Code ist, wenn ich versuche funtion in zweites Mal zu verwenden, es mir Fehler gibt (sorry für schlechtes Englisch)urllib - abrufen bekommt Fehler auf dem zweiten Lauf

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' 

auch habe ich versucht, aber es war es kein Ton spielen arbeiten, aber immer noch denselben Fehler zu erzeugen

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

Nicht ein urllib Ausgabe (btw stoppt, können Sie [Anfragen] (http verwenden möchten: //docs.python-requests.org/en/master/)), es sei denn, urlib hat es nicht geschlossen(). Ihr Programm konnte die Datei zum Schreiben nicht öffnen. Hast du es irgendwo anders geöffnet? –

+0

Es scheint sich um eine Berechtigung zu handeln, die für die Datei durch den Abrufaufruf abgelehnt wurde, möglicherweise aufgrund der Tatsache, dass Ihr Mixer noch Griffe für diese Datei hält. – BoboDarph

Antwort

0

Schließlich fixiert i mit diesem Code HINWEIS: Grund dieses Fehlers pygame nicht schließen Datei nach Musik

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

Scheint eine Berechtigung für die Datei durch das abrufen von Anruf verursacht verweigert werden, möglicherweise durch die Tatsache, verrohrt, dass Ihr Mischpult noch Griffe an dieser Datei hält. Schlagen Sie das Spiel mit

mixer.music.stop() 

stoppen Wenn das nicht funktioniert, versuchen, die Datei zu öffnen, bevor Sie es

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() 
abrufen

Weitere Details hier https://groups.google.com/forum/#!topic/pygame-mirror-on-google-groups/XjSh9zs8j0U

Sehen Sie sich auch die Datei zu entfernen, wenn Sie fertig sind damit.

+0

Ich versuchte 2. Methode, aber es funktioniert nicht, gibt es 'Datei" C: \ Benutzer \ PC \ AppData \ Lokale \ Programme \ Python \ Python36-32 \ lib \ urllib \ Anfrage .py ", Linie 1800, in abrufen tfp = öffnen (Dateiname, 'wb') TypeError: erwartetes str, bytes oder os.PathLike Objekt, nicht _io.BufferedWriter' –

+0

Ich habe versucht, 'downloader.retrieve ('https://translate.google.com/translate_tts? dh = UTF-8 & q = {0} & tl = en & client = tw-ob'.format (Zitat (Text)), mp3_file) 'to' downloader.retrieve ('https://translate.google.com/translate_tts?ie= UTF-8 & q = {0} & tl = en & client = tw-ob'.format (Zitat (Text)), mp3_file.name) 'aber es funktioniert immer noch nicht –

+0

wenn ich versuche, Datei manuell zu entfernen Windows sagt Python verwendet Datei –

Verwandte Themen