AudioRecord:start()状态-38

时间:2013-12-09 00:02:42

标签: android audiorecord

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

public void onResults

销毁SpeechRecognizer的方法。

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

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

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

由于显而易见的原因,此解决方案非常糟糕。因此,我有以下问题:

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

_audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED

也是假的。

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

非常感谢!

4 个答案:

答案 0 :(得分:7)

您需要确保在audioRecord.stop();或类似方法中发布audioRecord.release();onPause()。如果您没有,则下次运行该应用时,您将无法访问该设备,并且您将获得start() status -38

答案 1 :(得分:1)

我遇到类似的问题AudioRecord start() error status -38 我最终做的是循环播放录音机的可能配置,就像回答者在这个问题中说的那样 AudioRecord object not initializing 我喜欢这种方法,因为在它上面运行它的设备并不重要,最终会找到它喜欢的配置。

答案 2 :(得分:0)

我使用audioRecord.getRecordingState()作为Michael评论来检查录制状态。 通常在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);
}

答案 3 :(得分:0)

我有一个不同的应用,该应用可能正在后台运行,并且没有释放记录设备。您还需要确保所有其他应用程序都已关闭(使用应用程序之间的切换>全部清除)。