2017-12-23 8 views
0

複数の言語を話す必要があります。 TextToSpeech用の配列を作成しました。今TextToSpeechの複数のインスタンス

private TextToSpeech[]    mTextSpeechs_; 
mTextSpeechs_   = new TextToSpeech[5]; 
    mTextSpeechs_[0] = new TextToSpeech(this, new TextToSpeech.OnInitListener() 
    { 
     @Override 
     public void onInit(int status) 
     { 
      mTextSpeechs_[0].setLanguage(Locale.CHINESE); 
      mTextSpeechs_[0].speak(getString(R.string.string_main_chineseready), TextToSpeech.QUEUE_FLUSH, null,"Display"); 
     }   
    }); 
    mTextSpeechs_[1] = new TextToSpeech(this, new TextToSpeech.OnInitListener() 
    { 
     @Override 
     public void onInit(int status) 
     { 
      mTextSpeechs_[1].setLanguage(Locale.forLanguageTag("yue-HK")); 
      mTextSpeechs_[1].speak(getString(R.string.string_main_hongkong), TextToSpeech.QUEUE_FLUSH, null,"Display"); 
     }   
    }); 
    mTextSpeechs_[2] = new TextToSpeech(this, new TextToSpeech.OnInitListener() 
    { 
     @Override 
     public void onInit(int status) 
     { 
      mTextSpeechs_[2].setLanguage(Locale.JAPAN); 
      mTextSpeechs_[2].speak(getString(R.string.string_main_japan), TextToSpeech.QUEUE_FLUSH, null,"Display"); 
     }   
    }); 
    mTextSpeechs_[3] = new TextToSpeech(this, new TextToSpeech.OnInitListener() 
    { 
     @Override 
     public void onInit(int status) 
     { 
      mTextSpeechs_[3].setLanguage(Locale.KOREA); 
      mTextSpeechs_[3].speak(getString(R.string.string_main_korea), TextToSpeech.QUEUE_FLUSH, null,"Display"); 
     }   
    }); 
    mTextSpeechs_[4] = new TextToSpeech(this, new TextToSpeech.OnInitListener() 
    { 
     @Override 
     public void onInit(int status) 
     { 
      mTextSpeechs_[4].setLanguage(Locale.ENGLISH); 
      mTextSpeechs_[4].speak(getString(R.string.string_main_english), TextToSpeech.QUEUE_FLUSH, null,"Display"); 
     }   
    }); 
.... 
//type 0 flush 
//type 1 add 
public void speakMultiLanguage(String text, int type,int langidx) 
{  
    if(type == 0) 
     mTextSpeechs_[langidx_].speak(text, TextToSpeech.QUEUE_FLUSH, null,"Display"); 
    else if(type == 1) 
     mTextSpeechs_[langidx_].speak(text, TextToSpeech.QUEUE_ADD, null,"Display"); 
} 

私が指定した言語を話すspeakMultiLanguage関数を呼び出すと、それが話すように、約5秒を遅らせます。最後の言語が同じであれば、それは遅れることはありません。誰か私に遅延を解決するための解決策を教えてくれますか?

答えて

0

TTSを複数使用しているケースをテストしていませんでした。しかし、私にとっては生産的ではないように見えます。特に、メモリとリソースを使用しています。 私の場合は、onCreate() My ActivityのメソッドでTTSオブジェクトを1つだけ初期化します。そして、私が別のものに変更する必要があるときは、tts.setLanguge(Locale)を使用します。 私の場合、私の仮想デバイスでこのソリューションはすぐに動作します。 初期化:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 
      @Override 
      public void onInit(int status) { 
       if (status == TextToSpeech.SUCCESS){ 
        tts.setLanguage(Locale.ENGLISH); 
       }else{ 
        Log.e(TAG, "TTS fault"); 
       } 
      } 
     }); 
     //.... 
    } 

変更:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
    private void prepareTTS(Locale newLocale){ 
     if (!tts.getVoice().getLocale().getISO3Language().equals(newLocale.getISO3Language())) { 
      tts.setLanguage(newLocale); 
      Log.d(TAG, "ChangeTo: " + newLocale.getISO3Language()); 
     }else{ 
      Log.d(TAG, "The same"); 
     } 
    } 

スピーチ:

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    private void ttsSpeak21(String text){ 

     String utteranceId = this.hashCode() + ""; 
     int result = tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId); 
     if (result == TextToSpeech.ERROR){ 
      Log.d(TAG, "Can't say"); 
     }else { 
      Log.d(TAG, lang + "speaking!"); 
     } 
    } 

リソースを解放:あなたの応答のための

@Override 
    protected void onDestroy() { 
     if (tts != null){ 
      tts.stop(); 
      tts.shutdown(); 
     } 
     super.onDestroy(); 
    } 
+0

感謝。 TextToSpeechの配列を使用する前にあなたの服従を使用しました。別の言語が必要なときにすぐに言語を変更した場合、setLanguageに約5秒遅れます。だから私はTextToSpeechの配列を使用しています。私は事前に複数のTextToSpeechを準備したい。 –

+0

私の場合、遅延はありません。私は私のプロジェクトで多言語講演をしています。私はexecatly mesureしなかったが、遅れは言語を変えてフレーズを話し始めるのに0.1-0.2秒以上過ぎていない。あなたのプロンプトは別の場所にあるかもしれません。 –

関連する問題