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