User2014
User2014

Reputation: 87

Text-To-Speech Initialization Delay

I am trying to add text-to-speech feature to my app, and it is working fine until I updated TTS from Google Play store.

There wasn't any delay to initialize the TTS in onCreate Method. After the update, it would take 3-5 seconds for this TTS to finish initializing. Basically, the text-to-speech is not ready until 3-5 seconds later.

Can someone please tell me what I've done wrong?

private HashMap<String, String> TTS_ID = new HashMap<String, String>(); 

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .....

    .....

    TextToSpeech_Initialize();
}

public void TextToSpeech_Initialize() {
    TTS_ID.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "UniqueID");     
    speech = new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() {
         @Override
         public void onInit(int status) {
            if(status == TextToSpeech.SUCCESS) {
               speech.setSpeechRate(SpeechRateValue);
               speech.speak(IntroSpeech, TextToSpeech.QUEUE_FLUSH, TTS_ID);
           }
         }
    });

}

Thank you very much

Upvotes: 1

Views: 5040

Answers (2)

Ziad H.
Ziad H.

Reputation: 689

I have stumbled across this problem before but now I have found a proper solution..

You can initialize TextToSpeach in onCreate() like this:

TextToSpeach textToSpeech = new TextToSpeech(this, this);

but first you need to implement TextToSpeech.OnInitListener, and then you need to override the onInit() method:

@Override
public void onInit(int status) {

    if (status == TextToSpeech.SUCCESS) {
        int result = tts.setLanguage(Locale.US);

        if (result == TextToSpeech.LANG_MISSING_DATA
                || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Toast.makeText(getApplicationContext(), "Language not supported", Toast.LENGTH_SHORT).show();
        } else {
            button.setEnabled(true);
        }

    } else {
        Toast.makeText(getApplicationContext(), "Init failed", Toast.LENGTH_SHORT).show();
    }
}

I also noticed that if you didn't set the language in onInit() there is gonna be a delay!!

And now you can write the method that says the text:

private void speakOut(final String detectedText){
        if(textToSpeech !=null){
            textToSpeech.stop(); //stop and say the new word
            textToSpeech.speak(detectedText ,TextToSpeech.QUEUE_FLUSH, null, null);
        }
    }

Upvotes: -1

user5291072
user5291072

Reputation: 149

Confirmed! This is an issue with Google text to speech engine, if you try any other tts the delay disappears, eg Pico tts.

Upvotes: 3

Related Questions