我有以下问题:我使用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是否正确释放了麦克风?
非常感谢!
发布于 2015-03-10 04:35:24
您需要确保在onPause()或类似方法中发出audioRecord.stop();和audioRecord.release();。如果不这样做,下次运行该应用程序时,您将无法访问该设备,并将获得start() status -38
发布于 2015-02-06 09:08:53
我遇到了一个与这个AudioRecord start() error status -38类似的问题,我最终做的是循环遍历录音机的可能配置,就像答题者在这个问题中说的那样,AudioRecord object not initializing,我喜欢这个方法,因为无论你在什么设备上运行它,它最终都会找到它喜欢的配置。
发布于 2018-06-14 16:05:44
我用audioRecord.getRecordingState()检查了录制状态,就像迈克尔评论的那样。通常在audioRecord.startRecording();之后,recordingState会变成RECORDSTATE_RECORDING。如果状态不是RECORDSTATE_RECORDING,我将关闭应用程序。
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);
}https://stackoverflow.com/questions/20460892
复制相似问题