Как реализовать text-to-speech на Java?

146
05 декабря 2017, 20:46

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

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

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

Суть программы сводится к следующему::

  1. Связать проект с библиотекой JLayer   для воспроизведения mp3 с java (Using the library jl1.0.1.jar).

  2. Создать экземпляр класса: GoogleTextToSpeech gtts = new GoogleTextToSpeech().

  3. Использовать метод: gtts.say ("Hello everybody", "en"). Первый аргумент фраза для произнесения, второй - язык.

Я добавил в прогу свои комментарии (на английском) и закомментировал явно лишнею строчку, теперь прога выглядит так (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 a httpUrlConn variable of type HttpURLConnection and assigning it a value to some variable urlConn (which is previously 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)

Что надо сделать, чтобы эта программа работала?

Answer 1

Я бы не стал вызывать всякие непонятные сервисы со своего сайта. Лучше скачать прогу целиком и запускать со своего сервера, но что-то мне подсказывает, что гугол так просто ее не предоставит (У них там каптча еще)

Ищите аналог, а лучше всего, конечно, самому mp3 нарезать со звуками букв.

READ ALSO
Could not determine java version from '9.0.1'

Could not determine java version from '9.0.1'

После установки java 9 в командной строке видно, что java установлена:

295
Жизненный цикл активности

Жизненный цикл активности

Заметил, что при нажатии кнопки назад (аппаратной или оболочки), мое подключение к серверу через сокет прерывается и пересоздается и заново...

205
API бэкенд для Android приложения

API бэкенд для Android приложения

Разрабатываю Android приложение, которое включает в себя работу с БД (регистрация пользователя и тд

198
Перевод строки в символьный массив Java

Перевод строки в символьный массив Java

Здравствуйте, возможно ли выполнить подобное? Как перевести символьный массив в строку я знаю, а как наоборот?

181