Android TTS не говорит - PullRequest
       22

Android TTS не говорит

7 голосов
/ 12 марта 2012

Я пытаюсь внедрить технологию преобразования текста в речь в Android, но столкнулся со странной ошибкой.Я не слышу ни звука из моего кода.Метод Speal работает, только если я помещаю его в метод 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 () TTs загружается AudioTrack запущен TTSService.setLanguage загружен en-US успешно установив скорость речи на 100

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

Есть идеи о том, что не так с приведенным выше кодом?

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

Ответы [ 4 ]

13 голосов
/ 15 марта 2012

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

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

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

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);
            }
        }
    });
3 голосов
/ 19 мая 2016

Рекомендуется реализовать 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;
}
1 голос
/ 18 января 2017

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

0 голосов
/ 12 марта 2012

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

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

...