Главная » Разработка для Android » Преобразование текста в речь на платформе Android

0

В Android 1.6 (SDK API level 4) представлен движок для преобразования текста в речь (text to speech, или TTS). Вы можете использовать этот API, чтобы синтезировать речь внутри  своих приложений, позволяя им «раз- говаривать» с пользователями.

Поскольку место для хранения  данных на некоторых  устройствах  под управлением Android  ограничено, языковые  пакеты не всегда изначально присутствуют в системе. Прежде чем запускать движок TTS, рекомендуется проверить наличие этих языковых  библиотек.

Для  этого запустите  новую Активность с помощью  метода startActi- vityForResult, используя Намерение с действием  ACTION_CHECK_TTS_ DATA.

Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);

startActivityForResult(intent, TTS_DATA_CHECK);

Если соответствующие библиотеки  успешно установлены,  обработчик onActivityResult получит действие CHECK_VOICE_DATA_PASS.

Если данные для воспроизведения речи недоступны, запустите  новую Активность, используя действие ACTION_INSTALL_TTS_DATA из класса TextToSpeech.Engine. Тем самым вы инициируете установку.

Подтвердив наличие  всех необходимых  данных, нужно создать и ини- циализировать новый экземпляр класса TextToSpeech. Обратите внимание, что вы не можете использовать объект TextToSpeech, пока не завершит- ся его инициализация. Добавьте  в конструктор реализацию интерфейса OnInitListener (показано в листинге  15.4), при ее срабатывании объект готов к использованию.

Листинг 15.4. Инициализация объекта TextToSpeech

boolean ttsIsInit = false; TextToSpeech tts = null;

tts = new TextToSpeech(this, new OnInitListener() {

public void onInit(int status) {

if (status == TextToSpeech.SUCCESS) {

ttsIsInit = true;

// TODO Воспроизведение речи.

}

}

});

Инициализировав объект TextToSpeech, вы можете использовать метод speak, чтобы синтезировать речь с помощью стандартного  аудиовыхода.

tts.speak("Hello, Android", TextToSpeech.QUEUE_ADD, null);

Дополнительный параметр метода speak позволяет выбирать, нужно ли добавлять новый голосовой вывод в уже имеющуюся очередь или начинать воспроизведение немедленно.

Вы можете изменять  способ, с помощью  которого  выводится голос, используя методы setPitch и setSpeechRate. Каждый  из них принимает в качестве параметра значение типа float, описывающее высоту и скорость воспроизведения голосового вывода соответственно.

Что еще более важно, вы можете изменять  произношение выводимой речи, используя метод setLanguage. Он принимает объект типа Local для за- дания страны и языка, относящихся к воспроизводимому тексту. Это влиет на то, каким образом произносится текст, позволяет  выбрать правильную языковую  модель и тип произношения.

Закончив воспроизведение речи, используйте метод stop, чтобы оста- новить голосовой  вывод, и shutdown, чтобы освободить  ресурсы движка TTS.

В листинге 15.5 показано, как определить наличие установленной библио- теки TTS, инициализировать новый объект TextToSpeech и использовать его для разговора на британском варианте английского языка.

Листинг 15.5. Преобразование текста в речь

private static int TTS_DATA_CHECK = 1;

private TextToSpeech tts = null;

private boolean ttsIsInit = false;

private void initTextToSpeech() {

Intent intent = new Intent(Engine.ACTION_CHECK_TTS_DATA);

startActivityForResult(intent, TTS_DATA_CHECK);

}

protected void onActivityResult(int requestCode,

int resultCode, Intent data) {

if (requestCode == TTS_DATA_CHECK) {

if (resultCode == Engine.CHECK_VOICE_DATA_PASS) {

tts = new TextToSpeech(this, new OnInitListener() {

public void onInit(int status) {

if (status == TextToSpeech.SUCCESS) {

ttsIsInit = true;

if (tts.isLanguageAvailable(Locale.UK) >= 0)

tts.setLanguage(Locale.UK); tts.setPitch(0.8f); tts.setSpeechRate(1.1f); speak();

}

}

});

} else {

Intent installVoice = new Intent(Engine.ACTION_INSTALL_TTS_DATA);

startActivity(installIntent);

}

}

}

private void speak() {

if (tts != null && ttsIsInit) {

tts.speak("Hello, Android", TextToSpeech.QUEUE_ADD, null);

}

}

@Override

public void onDestroy() {

if (tts != null) { tts.stop(); tts.shutdown();

}

super.onDestroy();

}

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии