2013-12-09 76 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