首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioRecord: start()状态-38

AudioRecord: start()状态-38
EN

Stack Overflow用户
提问于 2013-12-09 08:02:42
回答 4查看 7.1K关注 0票数 15

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

代码语言:javascript
复制
public void onResults

方法来销毁SpeechRecognizer。

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

代码语言:javascript
复制
12-09 00:44:01.976: E/AudioRecord(21185): start() status -38

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

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

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

代码语言:javascript
复制
_audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED

也是假的。

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

非常感谢!

EN

回答 4

Stack Overflow用户

发布于 2015-03-10 04:35:24

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

票数 9
EN

Stack Overflow用户

发布于 2015-02-06 09:08:53

我遇到了一个与这个AudioRecord start() error status -38类似的问题,我最终做的是循环遍历录音机的可能配置,就像答题者在这个问题中说的那样,AudioRecord object not initializing,我喜欢这个方法,因为无论你在什么设备上运行它,它最终都会找到它喜欢的配置。

票数 1
EN

Stack Overflow用户

发布于 2018-06-14 16:05:44

我用audioRecord.getRecordingState()检查了录制状态,就像迈克尔评论的那样。通常在audioRecord.startRecording();之后,recordingState会变成RECORDSTATE_RECORDING。如果状态不是RECORDSTATE_RECORDING,我将关闭应用程序。

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20460892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档