2013-12-09 10 views
10

私は以下の問題があります。 私はSpeechRecognizerを使用していくつかの単語を識別します。 私はSpeechRecognizerを破壊するAudioRecord:start()status -38

public void onResults 

メソッドを使用します。

私はAudioRecordを初期化し、マイクから録音を開始します。 これは私のlogcatに次のエラーにつながる:

12-09 00:44:01.976: E/AudioRecord(21185): start() status -38 

例外は私のコードでスローされません。 AudioRecordは正しく起動しません。 AudioRecordの初期化の前にThread.sleep(200)を追加すると、SpeechRecognizerが十分に速くマイクを解放しないとします。 この問題は発生しません。

この解決策は明らかな理由から非常に悪いものです。したがって、次の質問があります。

AudioRecordが正しく初期化されているかどうかを確認するにはどうすればよいですか? (私のコードでは例外がありません)

_audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 

も偽です。

または、SpeechRecognizerがマイクを適切にリリースしたかどうかを確認するにはどうすればよいですか?

ありがとうございます!

+1

'getRecordingState()'が 'RECORDSTATE_RECORDING'と等しいかどうかをチェックするのはどうですか? – Michael

+0

ありがとう、完全に1つを見落とした。 – user3081081

答えて

1

私は私が最終的に何をしたか、このAudioRecord start() error status -38 に同様の問題を抱えていたが、それはどのようなデバイスを重要ではありませんので、回答のようなオーディオレコーダーの可能な構成を超えるループは、私はこの方法が好きで、この質問 AudioRecord object not initializing で述べていましたあなたは最終的にそれが好きな設定を見つけることにそれを実行します。

+0

こんにちは、私のforループは、常にsamplerateとして16000を選択しますが、AudioRecordは初回だけ正しく初期化します。それは何でしょうか? – Josh

3

onPause()またはそれに類する方法で、audioRecord.stop();audioRecord.release();を必ず発行する必要があります。あなたが次回アプリケーションを起動すると、デバイスにアクセスすることができなくなります。start() status -38