Завантажити MP3 з Google Translate тексту в мову

Я знайшов цей код з Інтернету, і він використовує текст перекладу Google для мовлення з використанням URL. ось код:

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

Я знаю, як називати це в моєму vb.net, але я не знаю, як зберегти MP3-файл з Google Translate. Я використав system.speech у vb.net, щоб мати цю можливість, але я спеціально потрібно отримати мовлення від Google Translate. так, хто-небудь знає, як зберегти звуковий файл з Перекладача Google, використовуючи цей URL? Дякую.

20
Дозвольте мені отримати це прямо, ви хочете завантажити mp3 (або хвильовий файл) TTS від Google і грати його в вашому додатку, виконання?
додано Автор John Demetriou, джерело
Хто-небудь це зрозумів? Я хотів би вбудувати вимову на певній мові на сайті.
додано Автор CMSCSS, джерело
Який код у вас є досі?
додано Автор Mooing Duck, джерело
@CMSCSS перевірити мою відповідь.
додано Автор Francisco Presencia, джерело

6 Відповіді

EDIT 2015-12-26

As of 2015-12-21 this code no longer works following further changes to the Google TTS API. As indicated by @ncpierson a new additional parameter tk is required, and I am having a hard time working out how to calculate it in a shell script. I will revise this answer with a new edit as/when I can.

I'm not sure about Windows, but in Linux this is very easy from the command line. I use a command line script to download English audio of text strings:

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

I do the same thing with Chinese (the script is a bit simpler because there are no spaces to parse between words):

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

Most Linux distros include wget as standard, but it can easily be downloaded (see, e.g, this link).

(Thanks to @ncpierson for client=t parameter).

21
додано
Тепер, коли ці служби вимагають вводу captcha, метод командного рядка не працюватиме. Послуги все ще доступні безкоштовно, але ви повинні ввести код captcha, тому потрібний веб-браузер.
додано Автор Bobble, джерело
@ncpierson Дякуємо за ваш коментар. Я переглянув свою відповідь (знову ...), щоб врахувати зміни.
додано Автор Bobble, джерело
@ncpierson Awesome link, але я все ще намагаюся отримати голову навколо цього. Де/як ви знайшли зміни API? Чи десь вона опублікована? Я хочу вирішити, якщо/як я можу змінити сценарії в моїй відповіді ...
додано Автор Bobble, джерело
@ncpierson Коротше кажучи, як розрахувати параметр tk?
додано Автор Bobble, джерело
Google ще більше ускладнив речі. Мені вдалося начебто це працювати, я думаю, але він відразу ж потрапив до мене і почав повертати запити капчі, а не аудіо. Не впевнені, куди піти звідси, крім оплати в їхній службі API.
додано Автор Nicholas R. Grant, джерело
Я забув згадати це у своєму останньому коментарі, але якщо ви відчайдушно бажаєте отримати файли, скористайтеся Firefox. Перейдіть до записів AppData/Mozilla/Profile/xyz/cache2/і змініть порядок файлів, змінений на новий. Потім введіть щось та відтворюйте звуковий файл. Вони закодовані в LAME 3.99 і становитимуть початковий розмір 9 Кб. Вони можуть бути розташовані за допомогою магічного пошуку заголовків FF F3 40 C4 як перші 4 байти. Проте я маю відзначити, що створені звуковими файлами Google містять в них мети метаданих, щоб відстежувати, коли і хто створив файли. Зніміть це і ви будете добре.
додано Автор Nicholas R. Grant, джерело
Google Translate знову змінено. Я вважаю, що потрібен інший параметр запиту: 'client = t'. Проте, тепер це, здається, обмежує швидкість.
додано Автор ncpierson, джерело
Перекладач Google оновився ще раз. Щоб належним чином отримати доступ до API, вам потрібно зробити щось на зразок цього: додано Автор ncpierson, джерело
Єдиний спосіб, яким я знаю, як це зроблено, я зробив. Цей код копіюється майже безпосередньо з погіршеного JS, що подається з translate.google.com. Функція 'TL' обчислює параметр 'tk'. На жаль, немає ніяких документів API, наскільки я знаю.
додано Автор ncpierson, джерело
Всім привіт. Безсоромна самореклама: мені це потрібно для мого сайту soundoftext.com . Я знайшов шляхи, які допомагають Google API кожного разу, коли вони його змінюють. Незабаром ми видаємо новий сайт і плануємо мати фактичний API. Так що пильнуйте. Хоча, навіть зараз ви можете інвертувати мій API. Багато людей мають:
додано Автор ncpierson, джерело

The script that the Google translate page ran, when I used your example, produced a file called "translate_tts" with no file extension.

Один простий спосіб використовувати цей файл - це повідомити веб-переглядачу, наприклад, Mozilla [під "ІНСТРУМЕНТИ" / "OPTIONS"/APPLICATIONS], щоб зберегти аудіофайли - у цьому випадку я вважаю, що це MP3, незважаючи на відсутність розширення. У будь-якому випадку, виберіть параметр "ACTION" поруч із аудіо/хвилею або аудіо/Mpg до "SAVE FILE"

Коли браузер завантажує URL-адресу, він завантажує файл з назвою "translate_tts", незалежно від даних. Отже, у вашому випадку я б змінив назву файлу на "Hello-World.mp3". Таким чином, ви маєте файл на жорсткому диску, що містить потрібний звук, який може відтворюватися будь-яким аудіоплеєром, бажано VLC media player, оскільки він буде грати практично в будь-якому форматі.

Звичайно, якщо ви хочете інший звук, наприклад, "Goodbye-World", ви просто зміните свою URL-адресу до

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

і повторіть описані вище дії, щоб зберегти файл як "Goodbye-World.mp3".

7
додано
Це просто працює. Хоча потрібно змінити tl-en на цільову мову.
додано Автор Thomas Altfather Good, джерело

If you want to do it manually, right click 'save as...' will do the trick. Example: test your own example.

I have no idea of vb.net, but I am going to try to download several bits of information through bash script in linux. I was going to recommend using wget until I saw the vb.net tag. Check this thread, it might give you some idea. You basically want to download the page of the link, which is an mp3.

4
додано

Я намагався написати функцію, яка робить саме те, що твоє, плюс трохи більше, і після деякого пошуку я зміг створити наступний код. Це робить чотири речі:

  1. Does a web request to get the MP3 file from Google TTS
  2. Saves the MP3 to a file (I put it 1 layer deeper into the running directory)
  3. Plays the file using the windows media player COM API (can be included as a COM reference in your project)
  4. Stores a history of previously uttered phrases so it doesn't have to hit the API again when a repeated phrase appears (the internet isn't great where I plan on installing this).

    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
додано

Ось рішення, написане на 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"));

Обробка винятку опущена. IOUtils поставляється з Apache Commons IO.

2
додано

Я випустив напівавтоматичний спосіб придбання згенерованих мовних файлів у 2017 році та видалення всіх метаданих Google. Це для Firefox і написано на C #. Так що це близько до того, що ви намагаєтеся зробити, але все ще не на 100%. Я спробував отримати файли безпосередньо, але Google реалізував деякі досить привабливі функції безпеки, які я не міг здаватися, щоб обійти в цей час. Коли я подумав, що я наблизився, він відправив мене назад.

Я відкрив його тут: https://github.com/Goodlookinguy/FFMediaCacheGrabber а також відеофайл.

Не буду брехати, я не відчуваю себе відмінно від цієї відповіді, оскільки це не те, що ви шукаєте, але це все, що я міг би зробити, принаймні зараз, щоб допомогти людям.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug