web-dev-qa-db-fra.com

Télécharger des fichiers MP3 à partir de Google Traduire du texte en discours

J'ai trouvé ce code sur Internet et il utilise la fonctionnalité de synthèse vocale de Google en utilisant l'URL. voici le code:

http://translate.google.com/translate_tts?tl=en&q="hello world"

Je sais comment appeler cela sur mon vb.net mais je ne sais pas comment enregistrer le fichier MP3 à partir de Google Translate. J'ai utilisé le system.speech dans vb.net pour avoir cette capacité, mais j'ai particulièrement besoin d'obtenir le discours de Google Translate. Alors, est-ce que quelqu'un sait comment enregistrer le fichier son de Google Translate en utilisant cette URL? Merci.

20
user1169690

EDIT 2015-12-26

À compter du 2015-12-21, ce code ne fonctionne plus après les modifications ultérieures apportées à l'API Google TTS. Comme indiqué par @ncpierson, un nouveau paramètre supplémentaire tk est requis, et j'ai du mal à comprendre comment le calculer dans un script Shell. Je vais réviser cette réponse avec une nouvelle modification au fur et à mesure que je le pourrai.

Je ne suis pas sûr de Windows, mais sous Linux, c'est très facile depuis la ligne de commande. J'utilise un script en ligne de commande pour télécharger l'audio anglais de chaînes de texte:

#!/bin/bash
# write an English text string as an audio file using Google Translate
# usage: en2audio.sh <text>
wget -q -U Mozilla -O "$*.mp3" "http://translate.google.com/translate_tts?ie=UTF-8&client=t&tl=en&q=$*"

Je fais la même chose avec le chinois (le script est un peu plus simple car il n'y a pas d'espace pour analyser les mots):

#!/bin/bash
# write a Chinese text string as an audio file using Google Translate
# usage: zh2audio.sh <text>
wget -q -U Mozilla -O $1.mp3 "http://translate.google.com/translate_tts?ie=UTF-8&client=t&tl=zh&q=$1"

La plupart des distributions Linux incluent wget en standard, mais il peut être facilement téléchargé (voir, par exemple, ce lien ).

(Merci à @ncpierson pour le paramètre client=t).

21
Bobble

Lorsque j'ai utilisé votre exemple, le script exécuté par la page de traduction Google a généré un fichier Appelé "translate_tts" sans extension de fichier.

Un moyen simple d’utiliser ce fichier consiste à indiquer à votre navigateur, par exemple, Mozilla [sous "OUTILS" / "OPTIONS"/APPLICATIONS], pour sauvegarder des fichiers audio - dans ce cas, je crois que c'est un MP3, Même s'il n'y a pas d'extension. Dans tous les cas, sélectionnez l'option sous "ACTION" à côté de audio/wave ou audio/Mpg pour "SAVE FILE".

Lorsque le navigateur charge votre URL, il télécharge le fichier intitulé "translate_tts", , Quelles que soient les données. Donc, dans votre cas, je changerais le nom du fichier en "Hello-World.mp3". De cette façon, vous avez maintenant sur votre disque dur le fichier contenant le son que vous voulez, qui peut être lu par n’importe quel lecteur audio, de préférence un lecteur multimédia VLC, car il lira presque n'importe quel format.

Bien sûr, si vous voulez un audio différent, par exemple "Au revoir le monde", vous venez de changer votre URLto

http://translate.google.com/translate_tts?tl=en&q="Goodbye-World"

et répétez les étapes ci-dessus pour enregistrer le fichier sous le nom "Goodbye-World.mp3".

7
JCCbama

Si vous voulez le faire manuellement, cliquez avec le bouton droit de la souris sur "enregistrer sous ...". Exemple: testez votre propre exemple .

Je n'ai aucune idée de vb.net, mais je vais essayer de télécharger plusieurs informations via le script bash sous Linux. J'allais recommander d'utiliser wget jusqu'à ce que je voie la balise vb.net. Vérifiez ce fil , cela pourrait vous donner une idée. Vous voulez essentiellement télécharger la page du lien, qui est un mp3.

4
Francisco Presencia

J'essayais d'écrire une fonction qui fait exactement ce que fait le vôtre, avec un peu plus, et après quelques recherches, j'ai été capable de produire le code suivant. Il fait quatre choses:

  1. Est-ce qu'une demande Web pour obtenir le fichier MP3 à partir de Google TTS
  2. Enregistre le MP3 dans un fichier (je le mets 1 couche plus profondément dans le répertoire en cours d'exécution)
  3. Lit le fichier à l'aide de l'API COM du lecteur multimédia Windows (peut être incluse en tant que référence COM dans votre projet).
  4. Stocke un historique de phrases précédemment prononcées pour éviter de devoir appuyer à nouveau sur l'API lorsqu'une phrase répétée apparaît (Internet n'est pas génial là où je prévois de l'installer).

    Imports System.Net
    Imports System.IO
    Imports System.Text
    
    Dim MP As New MediaPlayer.MediaPlayer
    
    Private Sub SaySomething(TTS As String)
    If Not TTS = "" Then
        If Not System.IO.File.Exists(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3") Then
            Dim WR As HttpWebRequest = HttpWebRequest.Create("http://translate.google.com/translate_tts?tl=en&q=""" + TTS + """")
    
            Dim response As HttpWebResponse = CType(WR.GetResponse(), HttpWebResponse)
    
            Dim receiveStream As Stream = response.GetResponseStream()
    
            Dim readStream As New StreamReader(receiveStream, Encoding.UTF8)
    
            If Not System.IO.Directory.Exists(Environment.CurrentDirectory.ToString() + "/TTS") Then
                System.IO.Directory.CreateDirectory(Environment.CurrentDirectory.ToString() + "/TTS")
            End If
    
            Dim fs As New FileStream(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3", FileMode.Create)
    
            readStream.BaseStream.CopyTo(fs)
    
            fs.Close()
            fs.Dispose()
            readStream.Dispose()
            receiveStream.Dispose()
        End If
    
        MP.Open(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3")
    End If
    End Sub
    
2
Jrud

Voici une solution écrite en Java:

URL url = new URL("http://translate.google.com/translate_tts?tl=en&q=\"hello world\"");
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.addRequestProperty("User-Agent", "anything");
IOUtils.copy(httpcon.getInputStream(), new FileOutputStream("output.mp3"));

Traitement des exceptions omis. IOUtils vient d'Apache Commons IO.

2
Hunternif

J'ai créé un moyen semi-automatisé d'acquérir les fichiers de parole générés en 2017 et de supprimer toutes les métadonnées de Google. C'est pour Firefox et c'est écrit en C #. C'est donc proche de ce que vous essayez de faire, mais toujours pas à 100%. J'ai essayé d'obtenir les fichiers directement, mais Google a mis en place des fonctionnalités de sécurité assez sophistiquées que je n'arrivais pas à obtenir. Quand j'ai cru me rapprocher, cela m'a renvoyé un ReCaptcha.

Je l'ai ouvert source ici: https://github.com/Goodlookinguy/FFMediaCacheGrabber et fourni également une vidéo de démonstration.

Je ne vais pas mentir, je ne suis pas très content de cette réponse, car ce n'est pas ce que vous recherchez, mais c'est tout ce que je pourrais faire au moins pour le moment pour aider les gens.

0
Nicholas R. Grant