Android TTS не говорит

Я пытаюсь реализовать технологию text to speech android в своей деятельности, но я сталкиваюсь со странной ошибкой. Я не слышу ни звука из своего кода. Метод speak работает, только если я помещаю его в метод onInit, иначе он не говорит.

мой код выглядит следующим образом :

public class GameOverActivity extends Activity implements OnInitListener {
private TextToSpeech talker;
....
talker = new TextToSpeech(this, this);  
say("Something",false);
...
   public void onInit(int status) {  
        if (status == TextToSpeech.SUCCESS) {
          talker.setLanguage(Locale.US);
        }
        else if (status == TextToSpeech.ERROR) {
            Toast.makeText(this,"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }

void say(String text, boolean flush) {
         if(flush == true)
         {
        talker.speak(text,TextToSpeech.QUEUE_FLUSH,null);
         }
         if(flush == false)
         {
        talker.speak(text,TextToSpeech.QUEUE_ADD,null);
         }         
    }

странно то, что если я помещаю метод say в onInit, он работает нормально!

Я внимательно смотрел logcat и вот результаты :

TtsService.Метод onCreate () ТТС загружается Запущен AudioTrack TTSService.setLanguage нагруженный en-US succusfully настройка скорости речи до 100

и ничего не происходит.

есть идеи о том, что не так с вышеуказанным кодом?

спасибо заранее!

4 ответов


после еще нескольких часов просмотра кода я заметил, что проблема в том, что инициализация двигателя TTS занимает некоторое время. Если инициализация не завершена, вызов метода speak завершится ошибкой.

Если вы "скажете" что-то при нажатии кнопки, вам, вероятно, это не понадобится, потому что пользователю потребуется некоторое время, чтобы подумать, прежде чем нажимать кнопку, и инициализация будет закончена.

Если вы хотите "сказать" что-то как только закончит инициализацию, используйте этот код :

talker = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int arg0) {
       if(arg0 == TextToSpeech.SUCCESS) 
           {
        talker.setLanguage(Locale.US);
            say(gameover,true);
            say(line,false);
            say(definition_string,false);
            }
        }
    });

рекомендуется осуществлять TextToSpeech.OnInitListener из вашей основной деятельности. попробуйте это

public class GameOverActivity extends Activity implements TextToSpeech.OnInitListener {

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {

        int result = mTts.setLanguage(Locale.US);
        // Try this someday for some interesting results.
        // int result mTts.setLanguage(Locale.FRANCE);
        if (result == TextToSpeech.LANG_MISSING_DATA ||
                result == TextToSpeech.LANG_NOT_SUPPORTED) {
            // Lanuage data is missing or the language is not supported.
            //Log.e(TAG, "Language is not available.");
        } else {
            // Check the documentation for other possible result codes.
            // For example, the language may be available for the locale,
            // but not for the specified country and variant.

            // The TTS engine has been successfully initialized.
            // Allow the user to press the button for the app to speak again.
            // mAgainButton.setEnabled(true);
            // Greet the user.
            //sayHello();
        }
    } else {
        // Initialization failed.

    }

}

private TextToSpeech mTts;
}

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

еще одна вещь, которую вы можете попробовать, - это пройти через программу и посмотреть, изменяете ли вы свой объект text-to-speech каким-либо образом случайно. Установите точку останова в разговорной части кода и посмотрите на все переменные в своем дикторе объект.


другой причиной этой проблемы может быть ваш двигатель TTS, иногда в телефонах SAMSUNG по умолчанию двигатель TTS-это двигатель SAMSUNG, который не работает на некоторых языках, таких как персидский (я не имею в виду персидский текст, даже если вы пытаетесь прочитать английский текст, он все равно не работает, это странно, но это происходит). Для того, чтобы решить это все, что вам нужно сделать, это установить движок TTS на вашем коде (или выбрать Setting -> Language input -> Text to speech -> Google Text-to-speech вручную)