Подтвердить что ты не робот

API Google Text-To-Speech

Я хочу знать, как использовать API преобразования текста в речь в моем проекте .net. Мне кажется, мне нужно позвонить по URL-адресу, чтобы использовать веб-сервис, но идея для меня не ясна. может кто-нибудь помочь

4b9b3361

Ответ 1

Старый ответ:

Попробуйте использовать этот URL: http://translate.google.com/translate_tts?tl=en&q=Hello%20World Он автоматически генерирует wav файл, который вы можете легко получить с помощью HTTP-запроса через любое программирование .net.

Edit:

О, Google, вы думали, что можете помешать людям использовать ваш замечательный сервис с хлипкой проверкой заголовка http.

Вот решение, чтобы получить ответ на нескольких языках (я постараюсь добавить больше, когда мы идем):

NodeJS

// npm install `request`
const fs = require('fs');
const request = require('request');
const text = 'Hello World';

const options = {
    url: `https://translate.google.com/translate_tts?ie=UTF-8&q=${encodeURIComponent(text)}&tl=en&client=tw-ob`,
    headers: {
        'Referer': 'http://translate.google.com/',
        'User-Agent': 'stagefright/1.2 (Linux;Android 5.0)'
    }
}

request(options)
    .pipe(fs.createWriteStream('tts.mp3'))

Curl

curl 'https://translate.google.com/translate_tts?ie=UTF-8&q=Hello%20Everyone&tl=en&client=tw-ob' -H 'Referer: http://translate.google.com/' -H 'User-Agent: stagefright/1.2 (Linux;Android 5.0)' > google_tts.mp3

Обратите внимание, что заголовки основаны на примере @Chris Cirefice, если они перестанут работать в какой-то момент, я попытаюсь воссоздать условия для функционирования этого кода. Все кредиты для текущих заголовков идут к нему и замечательный инструмент, который является WireShark. (также благодаря Google за не исправление этого)

Ответ 2

В обновлении ответа Schahriar SaffarShargh Google недавно применил функцию "Google abuse", из-за чего невозможно отправить только обычный старый HTTP GET на URL-адрес например:

http://translate.google.com/translate_tts?tl=en&q=Hello%20World

который работал просто отлично и денди ранее. Теперь, после такой ссылки, вы представляете CAPTCHA. Это также влияет на HTTP GET-запросы вне браузера (например, cURL), поскольку использование этого URL-адреса дает перенаправление на страницу защиты от злоупотреблений (CAPTCHA).

Чтобы начать, вы должны добавить параметр запроса client к URL-адресу запроса:

http://translate.google.com/translate_tts?tl=en&q=Hello%20World&client=t

Google Translate отправляет &client=t, поэтому вам тоже нужно.

Прежде чем сделать этот HTTP-запрос, убедитесь, что вы установили заголовок Referer:

Referer: http://translate.google.com/

Очевидно, заголовок User-Agent также требуется, но, что интересно, он может быть пустым:

User-Agent:

Изменить: ПРИМЕЧАНИЕ - для некоторых пользовательских агентов, таких как Android 4.X, заголовок custom User-Agent не отправляется, что означает, что Google не будет обслуживать запрос. Чтобы решить эту проблему, я просто установил User-Agent в допустимый, например stagefright/1.2 (Linux;Android 5.0). Используйте Wireshark для отладки запросов (как и я), если серверы Google не отвечают, и убедитесь, что эти заголовки установлены правильно в GET! Google ответит с помощью 503 Service Unavailable, если запрос завершится с ошибкой, а затем перенаправляется на страницу CAPTCHA.

Это решение немного хрупкое; вполне возможно, что Google изменит способ обработки этих запросов в будущем, поэтому в конце я бы предложил попросить Google сделать реальную конечную точку API (бесплатную или платную), которую мы можем использовать, не чувствуя себя грязным для подделки заголовков HTTP.


Изменить 2. Для желающих эта команда cURL должна отлично работать, чтобы загрузить mp3 Hello на английском языке:

curl 'http://translate.google.com/translate_tts?ie=UTF-8&q=Hello&tl=en&client=t' -H 'Referer: http://translate.google.com/' -H 'User-Agent: stagefright/1.2 (Linux;Android 5.0)' > google_tts.mp3

Как вы можете заметить, я установил заголовки Referer и User-Agent в запросе, а также добавил параметр client=t в строку запроса. Вы можете использовать https вместо http, ваш выбор!


Изменить 3: Google теперь требует токена для каждого запроса GET (отмечен tk в querystring). Ниже приведена пересмотренная команда cURL, которая будет правильно загружать mp3 TTS:

curl 'https://translate.google.com/translate_tts?ie=UTF-8&q=hello&tl=en&tk=995126.592330&client=t' -H 'user-agent: stagefright/1.2 (Linux;Android 5.0)' -H 'referer: https://translate.google.com/' > google_tts.mp3

Обратите внимание на & tk = 995126.592330 в запросе; это новый токен. Я получил этот токен, нажав значок динамика на translate.google.com и посмотрев запрос GET. Я просто добавил этот параметр querystring к предыдущей команде cURL, и она работает.

ПРИМЕЧАНИЕ: очевидно, это решение очень хрупкое и ломается по прихоти архитекторов в Google, которые вводят новые вещи, такие как жетоны, необходимые для запросов. Этот токен может не работать завтра (хотя я проверю и отправлю отчет)... Дело в том, что нецелесообразно полагаться на этот метод; вместо этого следует обратиться к коммерческому решению TTS, особенно если использовать TTS в производстве.

Для дальнейшего объяснения генерации маркера и того, что вы можете с ней сделать, см. ответ Boude.


Если это решение будет нарушено в любое время в будущем, оставьте комментарий на этот ответ, чтобы мы могли попытаться найти исправление для него!

Ответ 3

Расширение на ответ Криса. Мне удалось обработать процесс генерации токена.

Маркер для запроса основан на тексте и глобальной переменной TKK, заданной на странице script. Они хэшируются в JavaScript, что приводит к tk param.

Где-то на странице script вы найдете что-то вроде этого:

TKK='403413';

Это количество часов, прошедших с эпохи.

Текст перекачивается в следующей функции (несколько деобфузированной):

var query = "Hello person";
var cM = function(a) {
    return function() {
        return a
    }
};
var of = "=";
var dM = function(a, b) {
    for (var c = 0; c < b.length - 2; c += 3) {
        var d = b.charAt(c + 2),
            d = d >= t ? d.charCodeAt(0) - 87 : Number(d),
            d = b.charAt(c + 1) == Tb ? a >>> d : a << d;
        a = b.charAt(c) == Tb ? a + d & 4294967295 : a ^ d
    }
    return a
};

var eM = null;
var cb = 0;
var k = "";
var Vb = "+-a^+6";
var Ub = "+-3^+b+-f";
var t = "a";
var Tb = "+";
var dd = ".";
var hoursBetween = Math.floor(Date.now() / 3600000);
window.TKK = hoursBetween.toString();

fM = function(a) {
    var b;
    if (null === eM) {
        var c = cM(String.fromCharCode(84)); // char 84 is T
        b = cM(String.fromCharCode(75)); // char 75 is K
        c = [c(), c()];
        c[1] = b();
        // So basically we're getting window.TKK
        eM = Number(window[c.join(b())]) || 0
    }
    b = eM;

    // This piece of code is used to convert d into the utf-8 encoding of a
    var d = cM(String.fromCharCode(116)),
        c = cM(String.fromCharCode(107)),
        d = [d(), d()];
    d[1] = c();
    for (var c = cb + d.join(k) +
            of, d = [], e = 0, f = 0; f < a.length; f++) {
        var g = a.charCodeAt(f);

        128 > g ? d[e++] = g : (2048 > g ? d[e++] = g >> 6 | 192 : (55296 == (g & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (g = 65536 + ((g & 1023) << 10) + (a.charCodeAt(++f) & 1023), d[e++] = g >> 18 | 240, d[e++] = g >> 12 & 63 | 128) : d[e++] = g >> 12 | 224, d[e++] = g >> 6 & 63 | 128), d[e++] = g & 63 | 128)
    }


    a = b || 0;
    for (e = 0; e < d.length; e++) a += d[e], a = dM(a, Vb);
    a = dM(a, Ub);
    0 > a && (a = (a & 2147483647) + 2147483648);
    a %= 1E6;
    return a.toString() + dd + (a ^ b)
};

var token = fM(query);
var url = "https://translate.google.com/translate_tts?ie=UTF-8&q="  + encodeURI(query) + "&tl=en&total=1&idx=0&textlen=12&tk=" + token + "&client=t";
document.write(url);

Ответ 4

Дополнительной альтернативой является responsivevoice.org простой пример JsFiddle Здесь

HTML

<div id="container">
<input type="text" name="text">
<button id="gspeech" class="say">Say It</button>
<audio id="player1" src="" class="speech" hidden></audio>
</div>

JQuery

$(document).ready(function(){

 $('#gspeech').on('click', function(){

        var text = $('input[name="text"]').val();
        responsiveVoice.speak("" + text +"");
        <!--  http://responsivevoice.org/ -->
    });

});

Внешний ресурс:

https://code.responsivevoice.org/responsivevoice.js

Ответ 5

Вы можете загрузить Голос с помощью Wget: D

wget -q -U Mozilla "http://translate.google.com/translate_tts?tl=en&q=Hello"

Сохраните вывод в mp3 файл:

wget -q -U Mozilla "http://translate.google.com/translate_tts?tl=en&q=Hello" -O hello.mp3

Наслаждайтесь!

Ответ 6

Текст Google в речь

<!DOCTYPE html>
<html>
    <head>
        <script>
            function play(id){
            var text = document.getElementById(id).value;
            var url = 'http://translate.google.com/translate_tts?tl=en&q='+text;
            var a = new Audio(url);
                a.play();
            }
        </script>
    </head>
    <body>
        <input type="text" id="text" />
        <button onclick="play('text');"> Speak it </button>
    </body>
</html>

Ответ 7

Хорошо, поэтому Google вводит токены (см. параметр tk в новом URL-адресе), и старое решение, похоже, не работает. Я нашел альтернативу, которую я даже думаю, лучше звучит и имеет больше голосов! Команда не очень красивая, но она работает. Обратите внимание, что это предназначено только для тестирования (я использую его для небольшого проекта domotica) и использую настоящую версию группы acapella, если вы планируете использовать ее в коммерческих целях.

curl $(curl --data 'MyLanguages=sonid10&MySelectedVoice=Sharon&MyTextForTTS=Hello%20World&t=1&SendToVaaS=' 'http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2.php' | grep -o "http.*mp3") > tts_output.mp3

Некоторые поддерживаемые голоса:

  • Шерон
  • Элла (подлинный детский голос)
  • EmilioEnglish (подлинный детский голос)
  • Джош (подлинный детский голос)
  • Karen
  • Кенни (искусственный детский голос)
  • Laura
  • Мих
  • Нелли (искусственный детский голос)
  • Rod
  • Райан
  • Saul
  • Скотт (настоящий подросток)
  • Tracy
  • ValeriaEnglish (подлинный детский голос)
  • Будет ли
  • WillBadGuy (эмоциональный голос)
  • WillFromAfar (эмоциональный голос)
  • WillHappy (эмоциональный голос)
  • WillLittleCreature (эмоциональный голос)
  • WillOldMan (эмоциональный голос)
  • WillSad (эмоциональный голос)
  • WillUpClose (эмоциональный голос)

Он также поддерживает несколько языков и больше голосов - для этого я ссылаюсь на ваш сайт; http://www.acapela-group.com/

Ответ 9

Я использовал URL-адрес, как указано выше: http://translate.google.com/translate_tts?tl=en&q=Hello%20World

И запрашивается в библиотеке python.., когда я получаю HTTP 403 FORBIDDEN

В конце концов мне пришлось издеваться над заголовком User-Agent с браузером для успеха.

Ответ 10

Перейдите в console.developer.google.com login и получите ключ API или использовать Microsoft bing API
 https://msdn.microsoft.com/en-us/library/?f=255&MSPPError=-2147217396

или даже лучше использовать AT & T речевой API developer.att.com (заплаченный)
Для распознавания речи

Public Class Voice_recognition

    Public Function convertTotext(ByVal path As String, ByVal output As String) As String
        Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create("https://www.google.com/speech-api/v1/recognize?xjerr=1&client=speech2text&lang=en-US&maxresults=10"), HttpWebRequest)
        'path = Application.StartupPath & "curinputtmp.mp3"
        request.Timeout = 60000
        request.Method = "POST"
        request.KeepAlive = True
        request.ContentType = "audio/x-flac; rate=8000"  
        request.UserAgent = "speech2text"

        Dim fInfo As New FileInfo(path)
        Dim numBytes As Long = fInfo.Length
        Dim data As Byte()

        Using fStream As New FileStream(path, FileMode.Open, FileAccess.Read)
            data = New Byte(CInt(fStream.Length - 1)) {}
            fStream.Read(data, 0, CInt(fStream.Length))
            fStream.Close()
        End Using

        Using wrStream As Stream = request.GetRequestStream()
            wrStream.Write(data, 0, data.Length)
        End Using

        Try
            Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
            Dim resp = response.GetResponseStream()

            If resp IsNot Nothing Then
                Dim sr As New StreamReader(resp)
                MessageBox.Show(sr.ReadToEnd())

                resp.Close()
                resp.Dispose()
            End If
        Catch ex As System.Exception
            MessageBox.Show(ex.Message)
        End Try

        Return 0
    End Function
End Class

И для текста в речь: используйте это.

Я думаю, вы поймете это
если бы не использовать vbscript для конвертера vb/С#.
до сих пор не связались со мной.

Я уже делал это раньше, не могу найти код сейчас, потому что я не прямо передаю вам код.

Ответ 11

Потому что он появился в чате здесь, и первая страница для googeling была именно этой, я решил оставить все в моих выводах по googling еще немного XD

вам действительно не нужно больше идти, чтобы заставить его работать просто стоять на плечах гигантов:

существует стандартный

https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html

и пример

http://html5-examples.craic.com/google_chrome_text_to_speech.html

по крайней мере для ваших веб-проектов это должно работать (например, asp.net)

Ответ 12

#! /usr/bin/python2
# -*- coding: utf-8 -*-

def run(cmd):
    import os
    import sys
    from subprocess import Popen, PIPE
    print(cmd)
    proc=Popen(cmd, stdin=None, stdout=PIPE, stderr=None, shell=True)
    while True:
        data = proc.stdout.readline()   # Alternatively proc.stdout.read(1024)
        if len(data) == 0:
            print("Finished process")
            break
        sys.stdout.write(data)

import urllib

msg='Hello preety world'
msg=urllib.quote_plus(msg)
# -v verbosity
cmd='curl '+ \
    '--output tts_responsivevoice.mp2 '+ \
    "\""+'https://code.responsivevoice.org/develop/getvoice.php?t='+msg+'&tl=en-US&sv=g2&vn=&pitch=0.5&rate=0.5&vol=1'+"\""+ \
    ' -H '+"\""+'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0'+"\""+ \
    ' -H '+"\""+'Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5'+"\""+ \
    ' -H '+"\""+'Accept-Language: pl,en-US;q=0.7,en;q=0.3'+"\""+ \
    ' -H '+"\""+'Range: bytes=0-'+"\""+ \
    ' -H '+"\""+'Referer: http://code.responsivevoice.org/develop/examples/example2.html'+"\""+ \
    ' -H '+"\""+'Cookie: __cfduid=ac862i73b6a61bf50b66713fdb4d9f62c1454856476; _ga=GA1.2.2126195996.1454856480; _gat=1'+"\""+ \
    ' -H '+"\""+'Connection: keep-alive'+"\""+ \
    ''
print('***************************')
print(cmd)
print('***************************')
run(cmd)

Линия:

/getvoice.php?t='+msg+'&tl=en-US&sv=g2&vn=&pitch=0.5&rate=0.5&vol=1'+"\""+ \

отвечает за язык.

tl=en-US

Существует еще один интересный сайт с tts-механизмами, который можно использовать таким образом.

заменить o на null iv0na.c0m

иметь приятный день