2016-05-11 2 views
1

У меня проблема с моим TextToSpeech. Фактически, когда я вызываю свою функцию «Сын» (см. Ниже) (когда я нажимаю, например), я должен ждать 4 секунды, чтобы первый щелчок услышал голос, но после первого щелчка мгновенно услышать голос.Мне нужно подождать несколько секунд, прежде чем TextToSpeech говорит

Но иногда он отлично работает с первого щелчка. В Android Monitor, если он работает или нет, я могу видеть:

I/TextToSpeech: Sucessfully bound to com.google.android.tts 
    I/TextToSpeech: Connected to ComponentInfo{com.google.android.tts/com.google.android.tts.service.GoogleTTSService} 
    I/TextToSpeech: Set up connection to ComponentInfo{com.google.android.tts/com.google.android.tts.service.GoogleTTSService} 

поэтому я предполагаю, что это зависит от Android, но я надеюсь, что смогу сделать что-то исправить, что ... Есть ли у вас какие-либо идеи? Если вам нужна дополнительная информация, не стесняйтесь спрашивать!

Спасибо, ребята!

Мой код:

public void Son(final String texte_son){ 
    t1=new TextToSpeech(this, new TextToSpeech.OnInitListener() { 
     @Override 
     public void onInit(int status) { 
      if(status != TextToSpeech.ERROR) { 
       t1.setLanguage(Locale.FRENCH); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
        ttsGreater21(texte_son); 
       } else { 
        ttsUnder20(texte_son); 
       } 
      } 
     } 
    }); 
} 
@SuppressWarnings("deprecation") 
private void ttsUnder20(String text) { 
    HashMap<String, String> map = new HashMap<>(); 
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId"); 
    t1.speak(text, TextToSpeech.QUEUE_FLUSH, map); 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
private void ttsGreater21(String text) { 
    String utteranceId=this.hashCode() + ""; 
    t1.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId); 
} 

ответ

1

Init TTS при запуске приложения и хранить указатель на него, не создавайте TTS каждый раз, когда вам нужно синтезировать сценарий

public YourActivity implements Activity { 

    private Tts tts; 

    void onCreate() { 
     tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 
      @Override 
      public void onInit(int status) { 
       tts.setLanguage(Locale.FRENCH); 
      } 
     }); 
    } 

    void Son(String text) { 
     if (tts != null) { 
      HashMap<String, String> map = new HashMap<>(); 
      map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId"); 
     tts.speak(text, TextToSpeech.QUEUE_FLUSH, map); 
     } 
    } 
} 
+0

Inded, это было бесполезно для создания TextToSpeech каждый раз. Спасибо ! Тем не менее у меня все еще есть проблема с ожиданием первого выступления. У вас есть идея, как исправить это? – ValentinLoricourt

+0

Я вижу разницу с этим кодом. Если я подожду достаточно долго (около 6 секунд, так что это долго), прежде чем сделать первый клик, тогда голос сразу же выйдет. С моим предыдущим кодом ожидание бесполезно. Я не знаю, поможет ли это ... – ValentinLoricourt

+0

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

Смежные вопросы