0

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.1kHz と 16kHz の両方が有効なオプションですが、調べるとどちらも 16kHz のオーディオを生成します。出力オーディオも、ステレオにアップミックスされたオーディオの 1 つのチャネルのように見えます。

TinyALSA/Tinycap を使用してオーディオをキャプチャでき、これは期待どおりに動作するようです。

これは Android スタック内の問題でしょうか? それとも、OEM から提供されたコードに問題がある可能性が高いですか?

4

1 に答える 1

0

この場合、オーディオがダウンミックスされた理由は、HAL で Speex コーデックが使用され、ステレオ入力のダウンミックスとノイズ除去が行われたためです。

これは以下で構成されました。

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

この問題の代替手段は、オーディオを ALSA からルーティングし、UNIX ドメイン ストリーム ソケットを介して Android スタックを迂回することです。これは、androids localSockets を使用してアプリケーション層でアクセスできます。

于 2015-09-11T08:51:16.503 に答える