AudioRecord:start()状态-38

我有以下问题:我使用SpeechRecognizer来识别几个单词。 我用

public void onResults 

销毁SpeechRecognizer的方法。

在破坏之后我初始化AudioRecord并从麦克风开始录音。 这会导致我的logcat出现以下错误:

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

我的代码中没有抛出exception。 AudioRecord无法正常启动。 我假设SpeechRecognizer没有足够快地释放麦克风,因为如果我在AudioRecord的初始化之前添加Thread.sleep(200),我不会遇到这个问题。

由于显而易见的原因,这种解决方案很糟 因此,我有以下问题:

如何检查AudioRecord是否已正确初始化? (我的代码中没有exception。)

 _audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 

也是假的。

或者我如何检查SpeechRecognizer是否正确释放麦克风?

非常感谢!

您需要确保发出audioRecord.stop();audioRecord.release(); 在你的onPause()或类似的方法。 如果不这样做,下次运行应用程序时,您将无法访问该设备,并且您将获得start() status -38

我有一个类似的问题,这个AudioRecord start()错误状态-38我最终做的是循环在录音机的可能配置,如回答者在这个问题中说, AudioRecord对象没有初始化我喜欢这个方法,因为它没有无论你在它上面运行什么设备,最终都会find它喜欢的配置。

我用Michael评论的audioRecord.getRecordingState()检查了录制状态。 通常在audioRecord.startRecording(); ,recordingState成为RECORDSTATE_RECORDING。 如果state不是RECORDSTATE_RECORDING,我将关闭app。

 audioRecord.startRecording(); int recordingState = audioRecord.getRecordingState(); Log.i(VoiceRecorder.class.getSimpleName(), "RecordingState() after startRecording() = " + String.valueOf(recordingState)); if (recordingState != AudioRecord.RECORDSTATE_RECORDING) { Log.i(VoiceRecorder.class.getSimpleName(), "AudioRecord error has occured. Reopen app."); System.exit(0); }