2016-05-11 4 views
1

TextToSpeechに問題があります。実際に私が「息子」という機能を呼び出すと(私が例えばクリックすると)、最初のクリックが音声で聞こえるように4秒間待たなければならないが、最初のクリック後は即座に声が聞こえる。TextToSpeechが話す前に数秒待たなければならない

しかし、時には最初のクリックから完全に機能します。それが動作するかどうAndroidのモニターでは、私が見ることができます:

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

初期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が初期化されていない間はボタンを非アクティブにして、ユーザに進捗状況を表示します。 –

関連する問題