0

これは、 Flac サンプルの計算に関する追加の質問です。

ファイルの先頭から、またはストリームが開始するメタデータの後にその数式によって生成されたオフセットを実装しますか ( here )?

私の目標は、プログラムでファイルを自分で分割することです-主に学習演習として。私の考えでは、イメージから学習した値に基づいて、flac ヘッダーとメタデータ ブロックを書き留めてから、キューシートを使用してマスター イメージから取得した実際のトラックを書き留めます。

現在、私のコードでは、各メタデータ ブロックを解析して、フレームの開始位置に到達できます。

4

1 に答える 1

1

で開始してデコードしようとしているとしますM:S.F = 3:45.30。1秒あたり75フレーム(CDDAセクター)があり、明らかに1分あたり60秒です。M:SFをキューシートからサンプルオフセット値に変換するには、最初にCDDAセクターの数を目的の開始点まで計算します(((60 * 3) + 45) * 75) + 30 = 16,905。1秒あたり75セクターあるため、オーディオが44,100 Hzでサンプリングされると仮定すると、セクターごとに44,100 / 75 = 588オーディオサンプルがあります。したがって、デコードを開始する目的のオーディオサンプルオフセットはです588 * 16,905 = 9,940,140

計算されたばかりのオフセットは、圧縮されたFLACストリーム(またはバイト単位)ではなく、解凍されたPCMサンプルへのオフセットです。したがって、FLACフレームごとに、含まれているサンプルの数を計算し、現在の位置を集計します。開始オーディオサンプルを含むフレームが見つかるまで、FLACフレームをスキップします。この時点で、オーディオのデコードを開始し、FLACフレーム内の不要なサンプルを破棄できます。

FLACはSEEKTABLEブロックもサポートしており、これを使用すると、今説明したプロセスが大幅に高速化(および変更)されます。まだ読んでいない場合は、リファレンスデコーダーの実装を確認できます。

于 2011-09-03T23:43:01.360 に答える