Голос, само собой, будет не совсем человеческим. Мы его синтезируем. То есть, Google синтезирует, а мы его об этом вежливо попросим.
Конечно, это не единственный спрособ: есть десяток голосовых движков, которые замечательно обходятся без Гугла, но подключать их в своё приложение - отдельная непростая (а порой и недешёвая) задача. Да, для них не нужен Интернет, но если ваше приложение и так его требует, то зачем себя исскуственно ограничивать? ;)
Для синтеза речи будем использовать неофициальное Google Text-To-Speech API. Оно замечательно работает для их браузера, поработает и для нас. Представимся только правильным User-Agent :)
Как и все API "корпорации добра", это API прекрасно в своей простоте:
http://translate.google.com/translate_tts?tl=en&q=text
И всё...
В ответе приедет mp3-кодированный звук с произнесённым приятным голосом текстом из параметра q на языке tl.
Вот простой класс, который мы можем использовать как "плейер" любой строки:
import android.media.MediaPlayer; import android.os.Environment; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URLEncoder; public class TextPlayer extends Thread { private String text; public TextPlayer(String text) { this.text = text; } @Override public void run() { try { HttpClient httpclient = new DefaultHttpClient(); HttpGet get = new HttpGet("http://translate.google.com/translate_tts?tl=ru&q="+ URLEncoder.encode(text, "UTF-8")); get.setHeader(new BasicHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11")); HttpResponse response = httpclient.execute(get); long length = response.getEntity().getContentLength(); InputStream content = response.getEntity().getContent(); String tmpf = Environment.getExternalStorageDirectory()+"/speech.mp3"; File tmpMp3 = new File(tmpf); FileOutputStream fos = new FileOutputStream(tmpMp3); long readed = 0; byte[] buf = new byte[512]; while ((readed+=content.read(buf))<length) { fos.write(buf); } fos.flush(); fos.close(); MediaPlayer player = new MediaPlayer(); player.reset(); player.setDataSource(tmpf); player.prepare(); player.start(); while (player.isPlaying()) {} tmpMp3.delete(); } catch (Exception e) { e.printStackTrace(); } } }
В любом месте нашего проекта мы теперь делаем
new TextPlayer("добрый вечер").start();
и Google с нами вежливо поздоровается :)
new TextPlayer("добрый вечер").start();
и Google с нами вежливо поздоровается :)
Подскажите пожалуйста как подключить библиотеки:
ОтветитьУдалитьimport org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;