Re: Как сделать Text to speech с помощью Java и Eclipse на googl
От: UDI Россия  
Дата: 21.12.17 20:39
Оценка: 3 (1) +1
Здравствуйте, sasvak, Вы писали:

S>Мои вопросы:


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

После строчки "//Play stream" используется для воспроизведения потока (видимо, аудио), полученного в качестве ответа на запрос к сервису tts.

S>2. Что делать, чтобы программа работала правильно? Может быть, мне нужно пройти регистрацию Google, чтобы я мог использовать этот API без капчи?

Да, добавили captchа из-за этого поломалось, немного поискав можно найти, что нужно добавить еще один аргумент (client=tw-ob) в запрос:

http://translate.google.com/translate_tts?ie=UTF-8&q=test&tl=en&client=tw-ob

Остальные аргументы у вас есть, приведите свой URL к такому виду и должно заработать (но может быть при частом обращении к tts просто будут отвечать отказом).
"Не волнуйся, голова! Теперь будет думать компьютер"
Гомер Джей Симпсон
Как сделать Text to speech с помощью Java и Eclipse на googl
От: sasvak  
Дата: 20.12.17 21:11
Оценка:
Здравствуйте.

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

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

Суть программы (она состоит из 2 классов и подключаемой библиотеки) сводится к следующему:



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

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:

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.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)




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


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 без капчи?
Отредактировано 20.12.2017 22:06 sasvak . Предыдущая версия .
captcha java eclipse google api tts text-to-speech java se
Re[2]: Как сделать Text to speech с помощью Java и Eclipse на googl
От: sasvak  
Дата: 21.12.17 21:02
Оценка:
Здравствуйте, UDI, Вы писали:

UDI>Здравствуйте, sasvak, Вы писали:


S>>Мои вопросы:


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

UDI>После строчки "//Play stream" используется для воспроизведения потока (видимо, аудио), полученного в качестве ответа на запрос к сервису tts.

S>>2. Что делать, чтобы программа работала правильно? Может быть, мне нужно пройти регистрацию Google, чтобы я мог использовать этот API без капчи?

UDI>Да, добавили captchа из-за этого поломалось, немного поискав можно найти, что нужно добавить еще один аргумент (client=tw-ob) в запрос:
UDI>

UDI>http://translate.google.com/translate_tts?ie=UTF-8&q=test&tl=en&client=tw-ob

UDI>Остальные аргументы у вас есть, приведите свой URL к такому виду и должно заработать (но может быть при частом обращении к tts просто будут отвечать отказом).

Буду проверять, скажите, плиз, я вроде поставил вам "спасибо", но хотел бы, чтобы другие участники также дали свои ответы. То есть: Что мне НЕЛЬЗЯ нажимать (кубки разных видов, палец вверх и тд), чтобы остальные форумчане видели этот вопрос еще не получившим окончательного ответа?
Re[3]: Как сделать Text to speech с помощью Java и Eclipse на googl
От: UDI Россия  
Дата: 22.12.17 16:51
Оценка:
Здравствуйте, sasvak, Вы писали:

S>Буду проверять, скажите, плиз, я вроде поставил вам "спасибо", но хотел бы, чтобы другие участники также дали свои ответы. То есть: Что мне НЕЛЬЗЯ нажимать (кубки разных видов, палец вверх и тд), чтобы остальные форумчане видели этот вопрос еще не получившим окончательного ответа?


С появлением новых тем ваша тема будет смещаться вниз с списке. Ее можно поднять вверх новыми сообщениями. Нет никакого признака окончательного ответа в списке тем форума (там не будет написано [РЕШЕНО]). Никакие оценки ответов на это не влияют. Если вы удовлетворены ответами в теме, то можете резюмировать тему своим сообщением и написать в нем кратенько выводы (даже когды вы сами нашли ответ и никто больше не написал, чтобы в будущем люди с такой же проблемой смогли найти решение).
Ну и в корне раздела "Форумы" можете почитать правила.
"Не волнуйся, голова! Теперь будет думать компьютер"
Гомер Джей Симпсон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.