2013-12-09 6 views
10

У меня проблема: Я использую SpeechRecognizer для определения нескольких слов. Я использую методAudioRecord: start() status -38

public void onResults 

уничтожить SpeechRecognizer.

Сразу после разрушения я инициализирую AudioRecord и начинаю запись с микрофона. Это приводит к следующей ошибке в моем LogCat:

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

Исключение не брошено в моем коде. AudioRecord просто не запускается должным образом. Я предполагаю, что SpeechRecognizer не освобождает микрофон достаточно быстро, , потому что, если я добавлю Thread.sleep (200) перед инициализацией AudioRecord, у I эта проблема не возникает.

Это решение очень плохо по понятным причинам. Таким образом, у меня есть следующий вопрос:

Как проверить правильность инициализации 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

Привет, мой цикл for всегда выбирает 16000 в качестве примера, но AudioRecord инициализируется правильно только в первый раз. Что это может быть? – Josh

3

Вам необходимо убедиться, что вы внесете audioRecord.stop(); и audioRecord.release(); в ваш onPause() или аналогичные методы. Если вы этого не сделаете, в следующий раз, когда вы запустите приложение, вы не получите доступ к устройству, и вы получите start() status -38

Смежные вопросы