Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
sashatgu
0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 34
#1

Как довести до ума Text to speech на Java и Eclipse с google API?

21.12.2017, 22:24. Просмотров 222. Ответов 2

Здравствуйте.

Мой вопрос ниже. Сначала короткое введение.

Сейчас я учу Java (использую Эклипс) и наткнулся на следующий учебный пример - который представляет собой вариацию программы text-to-speech (TTS) на Java. Собственно сама программа лежит тут Lesson01_Speech.zip.

Суть программы (она состоит из 2 классов и подключаемой библиотеки) сводится к следующему:
  • Связать проект с библиотекой JLayer (jl1.0.1.jar) для воспроизведения mp3 с java
  • Создать экземпляр класса:
    Java
    1
    
    GoogleTextToSpeech gtts = new GoogleTextToSpeech()
  • Использовать метод:
    Java
    1
    
    gtts.say("Hello everybody", "en")
  • Первый аргумент фраза для произнесения, второй - язык.


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

Java
1
2
3
4
5
6
7
8
9
10
11
12
package com.example.TTS; // package of class Main
 
import com.example.TTS.GoogleTextToSpeech; // import class GoogleTextToSpeech
 
public class Main {
 
  public static void main(String[] args) {
    GoogleTextToSpeech gtts = new GoogleTextToSpeech(); // make instance gtts
    gtts.say("Hello dear friends", "en"); // use method say
//  gtts.say("Bonjour mon amis!", "fr");
  }
}
GoogleTextToSpeech class:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.example.TTS; // package of class GoogleTextToSpeech
 
import java.io.InputStream; // import  classes from Java library
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javazoom.jl.player.Player; // import class from jl1.0.1.jar
 
public class GoogleTextToSpeech {
  private static String ENCODING = "UTF-8"; //make constants and assign values to them
  private static String URL_BEGINNING = "http://translate.google.com/translate_tts?ie=";
  private static String URL_QUERY = "&q=";
  private static String URL_TL = "&tl=";
  private static String USER_AGENT_LITERAL = "User-Agent";
  private static String USER_AGENT = "Mozilla/4.7";
 
  public void say( String phrase, String lang ) {
 
    try {
      //Make full URL
      phrase=URLEncoder.encode(phrase, ENCODING); //assign value to variable with name 'phrase' by use method encode from class URLEncoder 
      String sURL = URL_BEGINNING + ENCODING + URL_TL + lang + URL_QUERY + phrase; //assign value to variable sURL 
          URL url = new URL(sURL); // make instance url with constructor
 
          //Create connection
          URLConnection urlConn = url.openConnection(); //assign value to variable urlConn 
          HttpURLConnection httpUrlConn = (HttpURLConnection) urlConn; //Declaring  httpUrlConn var of type HttpURLConnection, assigning it  value to  var urlConn (reduce to  HttpURLConnection)
          httpUrlConn.addRequestProperty(USER_AGENT_LITERAL, USER_AGENT);// use method 
 
          //Create stream
          InputStream mp3WebStream = urlConn.getInputStream();//create instance and assign it a value
 
          //Play stream
          Player plr = new Player(mp3WebStream); //create instance plr with constructor
          plr.play(); //use method
    }
      //use exception with name ex
      catch (Exception ex) { 
      ex.printStackTrace(); //use method
    }
  }
}

Стартую программу путем выбора Run as -> Java Application на Main.java.

И имею следующий вывод ( в эклипс консоли):

Java
1
2
3
4
5
java.io.IOException: Server returned HTTP response code: 503 for URL:http://ipv4.google.com/sorry/index?continue=http://translate.google.com/translate_tts%3Fie%3DUTF-8%26tl%3Den%26q%3DHello%2Bdear%2Bfriends&q=EgRbegWvGJ3FldEFIhkA8aeDS952qU94sbK8DAgP55pH8cbMicZdMgFy
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
    at com.example.TTS.GoogleTextToSpeech.say(GoogleTextToSpeech.java:32)
    at com.example.TTS.Main.main(Main.java:9)


Все, что я понял на данный момент, это то, что: в моем случае ошибка в строках:


Java
1
2
at com.example.TTS.GoogleTextToSpeech.say (GoogleTextToSpeech.java:32)
at com.example.TTS.Main.main (Main.java:9)

затем вызывается код библиотеки MP3 Decoder / player / converter,
который открывает соединение с translate.google.com, который:
1. перенаправляет на страницу с CAPTCHA
2. возвращает статус 503 Услуга недоступна


Мои вопросы:

1. Я не совсем понимаю, как работает эта программа и зачем ей нужна библиотека jl1.0.1.jar. Может быть можно обойтись без библиотеки и работать напрямую с API?

2. Что делать, чтобы программа работала правильно? Может быть, мне нужно пройти регистрацию Google, чтобы я мог использовать этот API без капчи?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2017, 22:24
Ответы с готовыми решениями:

Не могу довести до ума
Всем привет! У меня такой вопрос пишу простенькую игру для брата о таблице...

Пример. Облачный синтезатор речи Google. (Google speech synthesis. Example)
Может сгодится кому. :) В метод передаем фразу, получаем mp3 файлик со...

Google speech API и Java
Отправляю звуковой файл(.flac) гуглу. Path path=...

Как сделать десериализацию ответа от Google Speech API v2
Всем привет. Объясните как сделать десериализацию ответа от Google Speech API...

Как использовать java-sdk text-to-speech от IBM или любой пример с github
Есть IntelliJ и некоторый минимальный опыт его использования (простейшее...

2
Welemir1
Автоматизируй это!
814 / 549 / 228
Регистрация: 30.03.2015
Сообщений: 2,145
22.12.2017, 05:57 #2
Цитата Сообщение от sashatgu Посмотреть сообщение
в моем случае ошибка в строках:
нет, тебя не пускают по этой ссылке, возможно с момента написания этой проги что то изменилось. Ты попробуй сам в браузере сформировать свою ссылку и перейти, а потом почитай доки гугла по функции.
Цитата Сообщение от sashatgu Посмотреть сообщение
зачем ей нужна библиотека jl1.0.1.jar
может там звук декодирует и/или выводит на твои колонки?

Цитата Сообщение от sashatgu Посмотреть сообщение
Может быть, мне нужно пройти регистрацию Google
нет сначала почитай доки гугла по АПИ транслейта
0
dolomit
33 / 33 / 10
Регистрация: 12.07.2017
Сообщений: 90
23.12.2017, 09:37 #3
Google все свои сервисы перевел на условно бесплатную и платную основы.
Ну да, по запросу "http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=Hello dear friends" он просто посылает.
А в гугле поиск выдает что text tot speech доступно через Google Clouds.
Надо зарегистрироваться в гугле, подключить а аккаунту Google Clouds и так далее, там целая канитель.
В общем анонимно их сервис уже использовать не получится. Но зато бесплатно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2017, 09:37

HttpWebRequest к Google speech api
Всем привет! Давненько уже интересуюсь ASR и TTS от гугла....давненько ищу,...

Google Speech API python
Всем привет! У меня в проекте возникла задача. Мне нужно сконвертировать аудио...

Google Speech API - управление голосом
Привет. Мне нужно чтобы моя прога реагировала на голосовые команды. Хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru