Я наткнулся на этот вопрос более чем через год после того, как он был опубликован, но я все равно продолжу и отвечу, надеясь, что это поможет кому-нибудь еще, кто окажется здесь в будущем.
Я пишу это против 2.1, поэтому извиняюсь, если вы работали с <2.1 (нет меток на вопрос) </p>
Есть несколько вещей, которые я могу заметить сразу, которые могут вас немного расстроить.
Во-первых, следующее:
mtts.speak(test1, TextToSpeech.QUEUE_FLUSH, null);
mtts.speak(test2, TextToSpeech.QUEUE_FLUSH, null);
Если я правильно понимаю TextToSpeech API , использование QUEUE_FLUSH приведет к удалению всего, что в данный момент говорится, поэтому возможно, чтовторая строка исполняется до того, как первая произнесет речь, и вы услышите то, о чем говорите выше, что говорят только последнюю.
В идеале, вам нужна только одна из этих строк,если пользователь вводит другую строку, то просто пропустите ее и дайте ей вымыться.
Затем вы должны инвестировать в переопределение onDestroy, здесь вы можете отключить мОбъект tts, это предотвращает использование вашего приложения движком TTS, всегда приятно высвобождать ресурсы, когда вы закончите с ними, вы бы не оставили ResultSet открытым, не так ли?!
@Override
public void onDestroy
() {
// Don't forget to shutdown!
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
Кроме того, как вы заявляете, он будет говорить только по-английски из-за строки, которую вы используете:
mtts.setLanguage(Locale.ENGLISH);
Это легко исправить, просто установите другую локаль.Возможно, есть несколько кнопок и соответственно установите локаль.Я полагаю, что движок Google TTS в настоящее время поддерживает только английский, французский, немецкий, итальянский и испанский языки, но сторонние движки TTS могут предложить больше.
Если ничего не помогает, я написал здесь учебник это может быть полезно.
Удачи!