要約

  • RFC 9639 は FLAC ビットストリームから入力時の整数 PCM サンプルを正確に復元する仕様を定める。
  • ストリーム可能なサブセットへの適合は互換性を高めるが、特定のデコーダーで動作することや安全に処理できることの証明ではない。
  • 保存証跡には、由来、エンコード入力、ストリームとコンテナ、検査結果、復号 PCM、チャンネル、メタデータ、実装、資源上限、再生結果が必要になる。

ファイルは streamable subset に収まっていた。それでも、運用中のプレーヤーの一つは受け付けなかった。

矛盾ではない。サブセットは現実的な相互運用性を高めるための共通範囲であり、世界中のデコーダーに発行される認定証ではない。RFC 9639 は FLAC のビット構造、メタデータ、フレーム、予測、残差、検査を精密に定義する。実際の受理と出力は、なお動いているコードに属する。

「無損失」は入力との関係である

FLAC が保存する中心対象は整数 PCM である。デコード後のサンプル値がエンコード前と一致することは強い事実だが、その入力が正しいテイク、未加工の収録、正しいチャンネル順だったとは限らない。誤った入力も完全に保存できる。

従って証跡には比較対象が必要だ。サンプルレート、ビット深度、チャンネル数と順序、総サンプル数、入力側の外部指紋、エンコーダーの版と設定、デコーダーの版、比較手順を記録する。「lossless OK」だけでは、何に対する一致なのかが消える。

CRC、MD5、署名を混ぜない

FLAC の各フレームにはヘッダーの CRC-8 と末尾の CRC-16 がある。STREAMINFO には非符号化音声に対する 128 ビット MD5 を格納できる。さらにファイル全体には外部ダイジェストを付けられる。

フレーム CRC は完全な並びを保証しない。音声 MD5 はコンテナの索引や画像を認証しない。外部ファイル指紋はタグの内容が真実だとは言わない。しかも STREAMINFO ではフレームサイズ、総サンプル数、MD5 に未知を示すゼロ値が許される。未知は成功として数えてはならない。

RFC 6151 によれば、衝突耐性が必要な認証目的で MD5 に依存すべきではない。一方、誤り検出だけの組み込みチェックは別の脅威モデルである。FLAC の MD5 は署名ではなく、提出者や保管履歴を認証しない。

音の意味はサンプル値の外にもある

Vorbis comment は題名、演奏者、日付、画像やチャンネルマスクを運べるが、その主張を検証しない。WAVEFORMATEXTENSIBLE のマスクもサンプルを自動で並べ替えない。書き手と読み手が同じ対応を実装して初めて意味が保たれる。しかも非標準配置をその comment に頼るファイルは streamable subset から外れる。

同じサンプル列が別のスピーカーへ送られれば、コーデック上の一致を保ったまま聴取結果が変わる。多チャンネル資料では、制作記録やテスト信号によりインデックスと出力を結び、実際のルーティングまで観測する必要がある。

コンテナが別の時刻を主張するとき

FLAC はネイティブ形式だけでなく Ogg に格納でき、Matroska や MP4 の周辺構造とも組み合わされる。コンテナ側が時間、長さ、サンプルレートやチャンネル情報を重複して持つと、値が食い違う場合がある。

証跡は片方を黙って上書きせず、両方の読み、使用したパーサー、優先規則、具体的な実装の挙動を残すべきだ。正しい音声 MD5 はコンテナのタイムラインを裁定せず、正しい索引は PCM 一致の代わりにならない。

適合と安全な運用は別の試験

RFC 9639 は、49 バイトのフレームが 2 MiB を超える PCM に展開し得ること、メタデータが膨大なフィールドや文字を持ち得ることを警告する。正しくデコードできることと、信頼できない入力を無制限に処理してよいことは違う。

実装試験では、製品名と版、機能組合せ、出力 PCM の指紋、失敗経路、処理時間、ピークメモリ、展開率、上限を記録する。適合ファイルの拒否はローカルな対応範囲を示す場合があり、受理は無制限な安全性を意味しない。

完全な証跡は保管から始まる。受領した正確なオブジェクト、提供者、日時、経路、外部指紋を確保し、エンコード前 PCM と変換履歴、エンコーダーを記録する。ストリームとコンテナを別々に同定し、STREAMINFO の未知値を露出させ、フレーム CRC、音声 MD5、PCM 比較を別項目として報告する。

その上でチャンネル、時間、深度、タグの出典を調停し、資源制限下で複数実装を実行する。再生成功まで主張するなら、その段階の観測を加える。保管は同一性を、チェックは限定された変化を、デコーダーは復元を、タグは記述を、コンテナは時系列を、再生系は結果を担当する。

出典