Android の MediaCodec スイートを使用してオーディオ リサンプラーを作成しようとしています。
私は現在、MP3 ステレオ オーディオ ファイルを MediaExtractor に送り、MediaCodec でデコードしています。ソース オーディオのサンプル レートは 48000 です。
理解できないのは、デコーダーから受け取る最初の 4 つの出力バッファーです。
- サイズ 0、時間 0
- サイズ 0、時間 24000
- サイズ4312、タイム48000
- サイズ4608、タイム72000
- サイズ4608、タイム96000
- 等
この回答、この回答、およびこの記事から、最初の2つのバッファは単に「エンコーダの遅延」が伝播され、単に破棄される可能性があると考えています。ただし、リストした 3 番目のバッファーでループが発生します。
バッファ #4 (およびそれ以降) の場合、計算は次のようになります。
((4608 bytes) / (2 bytes/sample) / (2 channels))
/ ((48,000 samples/sec) / (1,000,000 us/sec))
= 24,000 us (i.e. the change in time between buffers)
しかし、バッファ #3 で何が起こっているのでしょうか? データを単純に解釈すると、オーディオは 48000 us の時点で再生を開始し、72000 us マークの前で一時停止し、その時点で途切れることなく継続的に再生を開始することが示唆されます。
バッファ #3 のデータの前に 296 個の非表示の 0 がある可能性が高いようですが、このオフセットはコード内の変数によって示されていないようです。誰かが私のためにこれに光を当てることができますか?