Конфигурация Android AudioRecord не соответствует записанному аудио

Я собираюсь записать стереозвук на устройство Android 4.4.2. Однако звук, записываемый с помощью простого приложения для записи (с использованием AudioRecord), не соответствует поставленной конфигурации. Я надеюсь увидеть сообщения об ошибках в logcat, если устройство использует значения конфигурации по умолчанию, но я вижу, что представленные значения, по-видимому, принимаются AudioHardware и AudioPolicyManagerBase.

Текущая конфигурация для:

recorder = new AudioRecord(Media.Recorder.MIC,
                           sampleRate,
                           AudioFormat.CHANNEL_IN_STEREO,
                           AudioFormat.ENCODING_PCM_16BIT,
                           audioBufferSizeInBytes);

Изменение Media.Recorder.AudioSource было предложено для решения этой проблемы; Но это не изменило поведение стека Android - за исключением (по понятным причинам) не удается загрузить рекордер, когда конфигурация недействительна.

Изменение SampleRate также показало, что никакого видимого изменения в выходном сигнале также не было - и 44,1 кГц, и 16 кГц являются допустимыми вариантами, однако оба при воспроизведении воспроизводят звук 16 кГц. Выходной звук также выглядит как один канал аудио, микшированный в стерео.

TinyALSA / Tinycap доступен для захвата аудио, и это, кажется, ведет себя как ожидалось.

Может ли это быть проблемой в стеке Android? Или это, скорее всего, проблема с кодом, предоставленным OEM?

1 ответ

Решение

Причиной понижающего микширования звука в этом случае было то, что кодек Speex использовался в HAL для понижающего микширования и подавления шумов на стереофоническом входе.

Это было настроено в:

<android source tree>/hardware/<OEM>/audio/audiohardware.h

Альтернативой этой проблеме может быть маршрутизация аудио из ALSA и вокруг стека Android через сокет потока домена unix. Это будет доступно на уровне приложений с androids localSockets.

Другие вопросы по тегам