1

私はかなり奇妙な問題を抱えています。SpeechRecognizerクラスを使用して音声認識を追加する Android アプリがあります。各イベントのログ メッセージを出力するだけの RecognitionListener を実装するクラスを作成しました。そして、すべてがうまくいくようです。onReadyForSpeech が起動され、onBeginningOfSpeech が起動され、onEndOfSpeech が起動されます。

ただし、1 つの重要なイベント onResults :p が発生しません。

そのため、Summery では、すべてが問題ないように見え、例外はスローされず、リッスンが正常に開始および停止されたことを示すイベントが表示されます。結果を onResults などに送信する必要があることを SpeechRecognizer に通知するインテントに余分なものがありませんか?

私は次のようにインテントを設定しました

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);

SpeechRecognizer は次のように行われます。

    SpeechRecognizer speech = SpeechRecognizer.createSpeechRecognizer(this);
    speech.setRecognitionListener(this);

そして、私は聞き始めます

speech.startListening(intent);
4

2 に答える 2

0

問題文に記載されているとおり、私はまさに問題を抱えていました。2 つの音声認識サービスを利用できます (Google ともう 1 つ)。私は内部クラスの中で間違っていました:

private final Handler handler = new Handler();
private final Runnable stopListeningRunnable = new Runnable() {
                @Override
                public void run() {
                    speechRecognizer.stopListening(); 
                }
            };

これを使用しているメソッドに記述する代わりに、内部クラスの先頭に配置しました。

これにより、 への呼び出しが停止していましたonResults。これを実際に使用したメソッドでインライン化するとすぐに、onResultsうまくいきました。

これがお役に立てば幸いです.. :)

于 2014-08-04T19:50:00.457 に答える
-1

が呼び出されるかどうかonResultsは、音声認識サービスを提供するアプリによって異なります。音声認識に使用しているアプリについて言及していないため、問題の説明は不完全です。Google音声検索ですか?いずれにせよ、あなたの質問はむしろバグ レポートであり、Stackoverflow ではなく、アプリのバージョン、Android のバージョン、ハードウェアなどの詳細とともに、アプリのプロデューサーに送信する必要があります。

createSpeechRecognizer必要な音声認識エンジンを確実に取得するために使用できる2 つの引数のバージョンもあることに注意してください。

また、同じインターフェイスを使用し、SpeechRecognizerソース コードが付属しているアプリ Babble もご覧ください。

(自分のアプリを宣伝して申し訳ありませんが、この場合に役立つかもしれません。つまり、期待どおりに動作するかどうか、または同じ問題があるかどうかを確認できます。)

于 2012-11-16T17:50:30.137 に答える