Как я могу контролировать, как Android TTS воспроизводит аудио
У меня есть класс, который использует Android TTS API для транскрипции текста в аудио. Я могу контролировать шаг и скорость; но я заметил, что движок требует текстовую строку, а также хэш-объект. Я заметил, что некоторые слова произносятся слишком быстро, чтобы их легко распознать, а перегибы выглядят слишком противоестественными. Есть ли способ управлять этими двумя вещами? возможно через HashMap
? Ниже приводится описание того, как я использую движок:
mTts = new TextToSpeech(Globals.context, this); // context, listener
}
@Override
public void onInit(int status) {
HashMap<String, String> myHashRender = new HashMap();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, speech);
mTts.setPitch(0.8f);
mTts.setSpeechRate(0.6f);
mTts.synthesizeToFile(speech, myHashRender, fileOutPath);
while (mTts.isSpeaking()) try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
mTts.stop();
mTts.shutdown();
Ответы
Ответ 1
Google TTS в настоящее время не поддерживает это, но вот что вы можете сделать: во время разбора вашего текста вы можете изменить его части, чтобы получить интонацию и флексию, которые вы хотите.
Например, если вы сталкиваетесь с словом "Эй", вы переписываете его на лету в "Heeeey", прежде чем отправлять его на движок TTS, чтобы получить другое произношение.
Это не очень, но это обходной путь.
Ответ 2
Google TTS в настоящее время не поддерживает изменение перегиба и не делает этого поддерживать встроенные теги просодии, как определено в SSML. - alanv 5 июня в 20:30
Ответ 3
Google TTS в настоящее время не поддерживает изменение перегибов и не поддерживает встроенные теги просодии, как определено в SSML. Хотя есть параметры, которые вы можете установить, ни один из них не контролирует перегиб или просодии на слово.
Могут быть другие двигатели, которые поддерживают эти функции. eSpeak, например, поддерживает теги SSML и имеет порт Android, доступный в Play Маркете.