2012-03-12 9 views
4

私は自分のアクティビティでアンドロイドの音声技術にテキストを実装しようとしていますが、私は奇妙なエラーに直面しています。私のコードからは何の音も聞こえません。 speakメソッドはonInitメソッドに配置した場合にのみ機能し、それ以外の場合は発言しません。次のようにAndroid TTSは話しません

私のコードは次のとおりです。

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

奇妙なことは、私はのOnInitで言う方法を配置する場合、それが正常に動作していることです!

私は慎重に、ここでの結果ですlogcatを見て:

TtsService.OnCreate() のTTは AudioTrackが100

に発話速度を設定succusfully EN-USロードTTSService.setLanguage を を開始ロードされます何も起こらない。

上記のコードに何が間違っているかについての考え方はありますか?

ありがとうございます!

+0

開始時に何がflushの値ですか? – Brian

+0

それを真実か偽にするかは、何の違いもありません。 – Nick

答えて

10

TTSエンジンの初期化に時間がかかるという問題がありました。初期化が終了していない場合、speakメソッド呼び出しは失敗します。

ボタンをクリックする前に何かを言うと、ボタンを押す前に思考するのに時間がかかり、初期化が終了するため、これは必要ありません。

あなたはこのコードを使用して、何かができるだけ早く仕上げを初期化「と言う」したい場合:

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

私がtext-to-speechで持っていた1つの問題は、SDカードにインストールされている場合、USBが接続されていると動作しないことです。 USBからテストデバイスのプラグを抜いて、問題が解決するかどうかを確認してください。

もう1つのことは、プログラムをステップ実行して、偶然にもあなたのテキスト読み上げオブジェクトを変更しているかどうかを確認することです。コードのトーク部分にブレークポイントを設定し、トーカーオブジェクトのすべての変数を見てください。

3

あなたがあなたの主な活動からTextToSpeech.OnInitListenerを実装することをお勧めします。 (私はペルシャのために意味するものではありません。この問題の別の原因は時々、SAMSUNG携帯電話でデフォルトTTSエンジンは、ペルシャ語などの一部の言語では動作しないSAMSUNGエンジンで、あなたのTTSエンジンかもしれないさて、この

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

を試してみてくださいあなたが英語のテキストを読むことを試みても、それはまだ動作しません、それは奇妙ですが、それは起こります)。 これを解決するには、コードにTTSエンジンを設定するか、手動でSetting -> Language input -> Text to speech -> Google Text-to-speechを選択するだけです。

関連する問題