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

в 11:08, , рубрики: Разработка под android

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

Автор: tehnolog

Источник

Поделиться

* - обязательные к заполнению поля