質問

私は私の活動の中でAndroidのスピーチテクノロジーにテキストを実装しようとしていますが、奇妙なエラーに直面しています。私のコードからの音が聞こえません。話す方法は、Oninitメソッドに配置した場合にのみ機能します。

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

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でSay Methodを配置するとうまく機能します!

LogCATを慎重に見た、そしてここに結果が得られました:

ttsservice.oncreate() TTSはロードされています AudioTrackが始まった TTSService.SetLanguage. ja-usを頭を閉めてロードしました スピーチレートを100

に設定します

それから何も起こらない。

上記のコードの何が問題なのかについての考え?

事前にありがとう!

役に立ちましたか?

解決

コードを探す何時間もの後、問題が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);
            }
        }
    });
.

他のヒント

主な活動からTextToSpeech.OnInitListenerを実装することをお勧めします。これを試してください。

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

この問題の他の原因はあなたのTTSエンジンである可能性があります。時にはSamsung電話では、デフォルトのTTSエンジンはサムスンエンジンです。英語のテキストを読みようとしている、それはまだうまくいきません、それは奇妙だがそれが起こる。 それを解決するためには、あなたのコードにTTSエンジンを設定することです(またはSetting -> Language input -> Text to speech -> Google Text-to-speechを手動で選択)

テキスト間で持っていた1つの問題は、SDカードにインストールされている場合は、USBが接続されているとうまくいきません。そのため、USBからテストデバイスを抜いて、問題を解決するかどうかを確認することができます。

もう一つのことがプログラムをスピンピングし、あなたが偶然の偶然の音声オブジェクトを変更しているかどうかを確認します。コードのトーク部分にブレークポイントを設定し、Talkerオブジェクトのすべての変数を見てください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top