我有以下问题: 我使用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是否正确释放麦克风?
非常感谢!
答案 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)
我有一个不同的应用,该应用可能正在后台运行,并且没有释放记录设备。您还需要确保所有其他应用程序都已关闭(使用应用程序之间的切换>全部清除)。