Синтезатор речи. Теперь и на русском
Меня всегда огорчало, что в Android не было синтезатора речи на русском. Изначально выбор языков был ограничен английским, испанским, французским, немецким и итальянским. Существовали отдельные коммерческие движки, а также производители могли добавить в свои устройства какой-нибудь движок с нужным языком, видимо договорившись с разработчиком. Но хотелось поддержки из коробки от самой «корпорации добра».Вчера, включив WiFi на своем телефоне в метро, увидел, что на аппарат прилетело несколько обновлений, в том числе и Синтезатор речи Google с поддержкой русского языка. Сначала я не обратил внимания на данное обстоятельство, а сегодня вдруг подумал, а не могу ли использовать теперь движок с русским языком в своём приложении? Набросал простенький пример с кнопкой, чтобы услышать фразу из классики: «А Васька слушает да ест». // Если этот код работает, его написал Александр Климов, //, а если нет, то не знаю, кто его писал.
package ru.alexanderklimov.tts;
import java.util.Locale;
import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;
public class MainActivity extends Activity implements TextToSpeech.OnInitListener {
private Button mButton; private TextToSpeech mTTS;
@Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mTTS = new TextToSpeech (this, this);
mButton = (Button) findViewById (R.id.button1); mButton.setOnClickListener (new OnClickListener () { @Override public void onClick (View v) { String text = «А Васька слушает да ест»; mTTS.speak (text, TextToSpeech.QUEUE_FLUSH, null); } }); }
@Override public void onInit (int status) { // TODO Auto-generated method stub if (status == TextToSpeech.SUCCESS) { Locale locale = new Locale («ru»);
int result = mTTS.setLanguage (locale); //int result = mTTS.setLanguage (Locale.getDefault ());
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e («TTS», «Извините, этот язык не поддерживается»); } else { mButton.setEnabled (true); }
} else { Log.e («TTS», «Ошибка!»); }
}
@Override public void onDestroy () { // Don’t forget to shutdown mTTS! if (mTTS!= null) { mTTS.stop (); mTTS.shutdown (); } super.onDestroy (); } } Запустив приложение, услышал родную речь, произнесённую женским голосом.Сначала я использовал локаль по умолчанию Locale.getDefault (). Для большинства российских пользователей это сработает, но некоторые пользователи оставляют на телефоне другую локаль, поэтому решил явно указать Locale («ru»). Наверное, так правильнее.Если к вам обновление Синтезатора речи Google ещё не прилетело, то можете скачать с Google Play по адресу https://play.google.com/store/apps/details? id=com.google.android.tts.