2013-12-09 27 views
10

Ich habe das folgende Problem: Ich benutze SpeechRecognizer, um ein paar Worte zu identifizieren. Ich benutze dieAudioRecord: start() status -38

public void onResults 

Methode, um die SpeechRecognizer zu zerstören.

Gleich nach der Zerstörung initialisiere ich einen AudioRecord und starte die Aufnahme vom Mikrofon. Dies führt zu dem folgenden Fehler in meinem logcat:

12-09 00:44:01.976: E/AudioRecord(21185): start() status -38 

Keine Ausnahme in meinem Code geworfen wird. Der AudioRecord startet einfach nicht richtig. Ich nehme an, dass der SpeechRecognizer das Mikrofon nicht schnell genug freigibt, weil, wenn ich ein Thread.sleep (200) vor der Initialisierung von AudioRecord hinzufüge, I dieses Problem nicht auftreten.

Diese Lösung ist aus offensichtlichen Gründen sehr schlecht. Somit habe ich folgende Frage:

Wie überprüfe ich ob der AudioRecord richtig initialisiert ist? (Ich bekomme keine Ausnahme in meinem Code.)

_audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 

ist auch falsch.

Oder wie überprüfe ich, ob SpeechRecognizer das Mikrofon korrekt freigegeben hat?

Vielen Dank!

+1

Wie überprüft man, ob 'getRecordingState()' gleich 'RECORDSTATE_RECORDING' ist? – Michael

+0

Danke, völlig übersehen, dass man. – user3081081

Antwort

1

Ich war zu diesem AudioRecord start() error status -38 ein ähnliches Problem mit , was ich tat schließlich Schleife über die möglichen Konfigurationen des Audio-Recorder wie der Antworter war, sagte in dieser Frage AudioRecord object not initializing ich diese Methode mag, da es keine Rolle, welches Gerät Wenn Sie es ausführen, wird es schließlich eine Konfiguration finden, die es mag.

+0

Hallo, meine for-Schleife wählt immer 16000 als Samplerate, aber AudioRecord initialisiert nur beim ersten Mal richtig. Was kann es sein? – Josh

3

Sie müssen sicherstellen, dass Sie audioRecord.stop(); und audioRecord.release(); in Ihrer onPause() oder ähnlichen Methoden ausgeben. Wenn Sie dies nicht tun, erhalten Sie beim nächsten Start der App keinen Zugriff auf das Gerät und Sie erhalten start() status -38