Конфигурация 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.