2013-12-09 39 views
10

我有以下问题: 我使用SpeechRecognizer识别几个单词。 我使用AudioRecord:开始()状态-38

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是否正确发布了麦克风?

非常感谢!

+1

如何检查getRecordingState()是否等于RECORDSTATE_RECORDING? – Michael

+0

谢谢,完全忽略了那一个。 – user3081081

回答

1

我有一个类似的问题这AudioRecord start() error status -38 我最终做的是循环遍历像回答者音频记录的可能的配置在这个问题上说 AudioRecord object not initializing 我喜欢这种方法,因为它不管什么设备你运行它会最终找到它喜欢的配置。

+0

嗨,我的循环始终选择16000作为采样率,但AudioRecord只在第一次正确初始化。它会是什么? – Josh

3

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