Вопрос

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

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

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

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

Это было полезно?

Решение

Через еще несколько часов посмотреть код, я заметил, что проблема заключается в том, что инициализация двигателя TTS занимает некоторое время.Если инициализация не закончилась, вызов метода говорят не удастся.

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

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

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;
}

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top