Синтезатор речи. Теперь и на русском

от автора

Меня всегда огорчало, что в 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.

ссылка на оригинал статьи http://habrahabr.ru/post/224685/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *