This document is also available in English.
Falcon は Rust で書かれた次世代のロイヤリティフリー・特許フリー音声コーデックです。設計方針は少し変わっています。すなわち、デコーダを物理的に可能な限り軽量化し、品質はエンコーダ側の徹底的な最適化で取り戻す というものです。同一ファイルサイズ(iso-size)での比較で、Falcon はニューラルコーデック研究の標準的な客観指標である MR-STFT において、コーパス 18 ファイル全てで Opus を上回り(うち 11 ファイルは log-mel 距離でも勝利)ました。デコード速度は実時間の 600〜825 倍で、全ファイルで Opus より 1.5〜2.8 倍軽量、実世界の全 11 ファイルおよび全 18 中 17 ファイルで Vorbis より軽量です(例外は 1 本の合成ストレス信号のみ。詳細はベンチマークを参照)。
Falcon は Rust のワークスペース構成で、MIT ライセンスで公開されており、特許期限切れ・設計上特許フリー・パブリックドメイン のアルゴリズムのみで構成されています。商用製品、ゲーム、ストリーミングサービス、組み込み機器に、ロイヤリティやライセンス料を一切支払うことなく 組み込めます。
ドキュメント: API リファレンス · 変更履歴 · コントリビュート · 特許に関する声明 · サードパーティライセンス
- 特長
- 設計思想
- リポジトリの内容
- 構成
- エンコードの信号処理チェーン
- 主要技術
- 依存ライブラリ
- クイックスタート
- コマンドラインインターフェース
- レート制御
- ベンチマーク
- 品質検証の方法論
- 評価の実行
- ビットストリーム形式
- デコーダ設計制約
- ライセンス
- 特許・ロイヤリティについて
- 参考文献
- 貢献
| 項目 | Falcon |
|---|---|
| iso-size での対 Opus 品質 | MR-STFT で 18 ファイル中 18 ファイル全てが Opus を上回る(うち 11 ファイルは log-mel L1 でも勝利)— 指標は第三者の文献標準であり、プロジェクト独自指標ではない |
| デコード速度(公平な CPU 時間) | 実時間の 600〜825 倍 — 全ファイルで Opus より 1.5〜2.8 倍軽量、実世界の全 11 ファイル / 全 18 中 17 で Vorbis より軽量(ベンチマーク参照) |
| 変換 | MDCT、20 ms フレームあたり 960 係数(@48 kHz)、Vorbis パワー相補窓、トランジェントフレームでは AAC 方式の分割 MDCT ショートブロック(4×480) |
| 周波数モデル | 27 Bark スケールバンド(高域エンベロープ解像度のため最上位オクターブを分割)、副情報ゼロのエネルギー導出ビット配分 |
| 係数符号化 | スプリットバンド PVQ gain-shape 符号化: バンドを再帰的に 2 分割しノードごとに量子化角度(theta)を伝送、パルスベクトルを V(N,K) で全単射列挙、パルス数 K は伝送済みエネルギーから導出 — 副情報ゼロビット、バンドエネルギーは構成上厳密 |
| エントロピー符号化 | バンドエネルギー残差に対する rANS、48 個の事前構築ラプラシアンテーブルからのフレーム毎選択 |
| 組み込み | falcon_capi: C ABI + ヘッダオンリー C++17 ラッパー。ゴミ入力・切り詰め入力に対するファズテスト済み。MSVC・MinGW で検証済み |
| ライセンス | MIT |
| 特許ロイヤリティ | 不要 — 全アルゴリズムが特許フリーまたは期限切れ |
ベンチマークは iso-size(同一サイズ)で計測しています。各 Falcon ファイルは、対応する Opus ファイル以下のサイズになるようにレート制御しているため、比較は「同等かそれ以下のバイト数における品質」です。Opus がまだ勝っているファイルも含む全ファイルの詳細表は ベンチマーク を参照してください。
「デコーダを極限まで軽量化し、品質はエンコーダの最適化で達成する」
これが Falcon のあらゆる設計判断を貫く唯一の原則です。
- デコーダは意図的にシンプルです。 1 フレームあたり長い IMDCT を 1 回(トランジェントフレームでは同じ区間を覆う短い IMDCT を 4 回)行い、スペクトルエンベロープをテーブル駆動の rANS デコーダで復号し、係数は生のパルスベクトルインデックスから復元します — 整数デコードとバンドあたり 1 回の融合スケーリングパスだけで、逐次的でキャッシュに優しいメモリアクセスです。再生側には反復探索も、浮動小数点の心理音響モデルも、マルチパス処理もありません。これが組み込み・モバイル・ゲーム向けに適する理由であり、実時間の数百倍というデコード速度を生む理由です。
- エンコーダには存分に働かせます。 知性はすべてこちら側にあります。エンコーダはトランジェント解析と窓切り替え、バンドエネルギー解析、貪欲法によるパルス探索量子化、適応エントロピーテーブル選択、決定的なエネルギー駆動ビット配分、グローバルなレート制御探索に CPU を惜しみなく使えます。使うビットはすべてデコード品質を最大化するように選ばれます。デコーダは、エンコーダが決めたことを忠実かつ安価に再現するだけだからです。
この非対称性は意図的なものです。品質はエンコード時の投資であり、再生は永遠に安価なままです。
| パス | 内容 |
|---|---|
falcon_core/ |
共有コーデックカーネル — ビットストリーム、rANS、PVQ shape 符号化、ビット配分、窓切り替え、Bark テーブル、LSB-floor 無音ペイロードの単一の真実の源 |
falcon_encoder/ |
マルチパス最適化エンコーダ |
falcon_decoder/ |
軽量デコーダ |
falcon_cli/ |
falcon コマンドラインツール(encode / decode / info / bench-decode) |
falcon_capi/ |
C ABI + ヘッダオンリー C++17 ラッパー(ゲームエンジンなどネイティブホスト向け)。ゴミ入力・切り詰め入力はエラーを返すだけでホストを panic させないことをファズテストで確認済み。MSVC・MinGW でリンク検証済み(falcon_capi/README.md) |
docs/ |
API_REFERENCE.md — CLI・Rust・C/C++ の完全な API リファレンス |
tools/quality/ |
品質検証ハーネス: 第三者標準の指標、不正防止ゲート、再現可能な合成拷問コーパス生成器(品質検証の方法論 を参照) |
tools/eval/ |
旧来の Rust 製 A/B 評価ハーネス |
Falcon は Cargo ワークスペースです。
Falcon/
├── falcon_core/ # 共有コーデックカーネル: ビットストリーム, rANS, PVQ shape 符号化,
│ # バンドエネルギー予測, ビット配分, 窓切り替え,
│ # LSB-floor 無音ペイロード, Bark テーブル, 型定義
├── falcon_encoder/ # マルチパス最適化エンコーダ: MDCT, トランジェント検出,
│ # モード判定, パルス探索, レート制御
├── falcon_decoder/ # 軽量デコーダ: rANS エンベロープ + パルスベクトルデコード
│ # + IMDCT + ノイズフィル
├── falcon_cli/ # コマンドラインツール (encode / decode / info / bench-decode)
├── falcon_capi/ # ネイティブホスト向け C ABI + C++17 ヘッダ(ゲーム・エンジン)
└── tools/
├── quality/ # 指標ハーネス + ゲート + 拷問コーパス生成器 (Python)
└── eval/ # 旧来の Rust 製 A/B 評価ハーネス
falcon_core はエンコーダとデコーダが共有する 単一の真実の源(single source of truth) です。ビット配分・バンド毎パルス数・shape 分割ツリーと theta フィールド幅・トランジェントブースト・rANS テーブルはすべて、ビットストリームに既に存在するデータから導出されるため、エンコーダとデコーダは必ず同一の判断を下します。エンコーダは自分の配分の選択を伝送する必要が一切ありません。
1 フレームのオーディオがどう処理されるかを段階的に示します。
各チャンネルは Vorbis パワー相補窓で窓掛けされ、MDCT により 20 ms フレームあたり 960 個の周波数係数 に変換されます(48 kHz 時)。しかし単一の長い変換は、量子化ノイズを 40 ms の TDAC 区間全体に拡散させ、鋭いアタックの符号化ノイズを可聴なプリエコーに変えてしまいます。そこでトランジェントフレームでは AAC 方式の分割 MDCT ショートブロック に切り替えます。480 サンプルの MDCT を 4 回(各 240 ビン、通常の 960 ビンスペクトルにインターリーブ)実行し、符号化ノイズをアタック周辺の約 5〜10 ms に閉じ込めます。Start/Shorts/Stop の遷移窓は Edler の窓切り替えに従い、TDAC 完全です(完全再構成テストで往復 SNR 約 136 dB を計測)。シグナリングは無料です。一度も出力されなかった予備のフレームヘッダモード値をトランジェントフラグに転用したため、窓切り替えの追加ビットはゼロです。この 1 つの変更で、castanets 拷問テストは Opus の 2 倍悪い状態から明確に勝る状態 になりました。
ステレオでは、オプションの M/S(Mid/Side) 変換でチャンネル間の相関を除去します。これは フレーム毎に、MDCT 係数ドメインで 適用されます。MDCT は線形であり、TDAC のオーバーラップ加算は常に L/R のまま行われるため、フレーム毎の M/S 切り替えは厳密に再構成可能で常に安全です。
960 係数は 27 個の Bark スケール知覚バンド にまとめられます。古典的な 24 バンドスケールでは 1 つの巨大バンドだった最上位オクターブを 12–15 / 15–18.5 / 18.5–20 / 20–24 kHz のサブバンドに分割し、480 ビンを 1 つのエネルギーに平坦化する代わりに、伝送されるエンベロープが高域の実際のスペクトル傾斜を追えるようにしています。バンドエネルギーは、ほぼユニティのリークを持つ CELT 風の予測器(時間係数 0.85 + 周波数係数 0.15、和が 1)で予測します。定常なバンドは自分自身のレベルに予測が収束するため、定常コンテンツの残差は毎フレーム絶対エネルギーの一定割合を再送する代わりに ~0 になります。残差は 1 dB ステップ に量子化され、−63…+95 dB の非対称クランプを受けます。無音からの鋭いオンセットは、無音→アタックの全振幅を単一フレームで上方向に飛ぶ必要がある一方、実際の減衰は指数的で −90 dB のステップは決して必要なく(下方向をフロアまで許すとルームトーンがデジタル無音にゲートされてしまいます)。残差はその後 rANS でエントロピー符号化されます(ステップ 6)。
各バンドのビット予算は、既に伝送済みのバンドエネルギーから決定的に導出されます。まず正規化ステップを求めます。
d(band) = K · shape(band) / 10^((0.5·e_max + 0.32·(e_band − e_max)) / 20)
ここで e_max はフレームのピークバンドエネルギー(dB)、shape は固定の知覚重み、K はグローバル品質スカラーです。sub-linear な指数(フレーム間 0.5、フレーム内 0.32)は、絶対精度ではなく 相対(対数スペクトル)精度 を買います。エネルギーに完全比例する配分則は、大音量の低域バンドを過剰に精細化する一方で、知覚誤差が実際に存在する 3〜20 kHz を飢えさせるからです。フレームピークより 96 dB 以上低いバンドはノイズフィルにゲートされます。このステップは固定の法則(k_for_delta、旧 dead-zone 量子化器の期待 L1 ノルムに較正済みなのでレート曲線が引き継がれます)でバンド毎のパルス数 K_band に写像されます。エンコーダとデコーダはこの同一の関数を実行するため、この配分には追加ビットが一切かかりません。
生き残った各バンドの係数は shape(形状) として符号化されます。すなわち、次元 N(バンド幅)で L1 ノルムが厳密に K_band の整数パルスベクトルです。直接列挙するには広すぎる(あるいはパルスが多すぎる)バンドは再帰的に半分ずつ分割され、各ノードで小さな量子化角度 theta(2〜8 ビット、幅は K から導出)を伝送します。theta は両半分のエネルギーバランスを担うと同時に、パルスの振り分けを決定的にルーティングします。リーフのベクトルは全単射に列挙されます — V(N,K) は次元 N・L1 ノルム K の符号付き整数ベクトルをすべて数え上げ、生の ceil(log2 V(N,K)) ビットのインデックスとして書き込まれます(リーフあたり 62 ビット以下、u64 演算で飽和した場合はさらに分割)。すべてが副情報フリーです。K_band も、分割ツリーも、theta のフィールド幅も、両側が既に共有しているデータから導出されます。
デコーダは復号した単位 shape を伝送済みバンドエネルギーにスケーリングするため、バンドエネルギーは構成上厳密です — CELT の gain-shape 特性であり、デコーダに再正規化パスはもう残っていません。実用上重要な工夫が 2 つあります。
- スプレッディング回転。 K パルスの shape は最大 K 個の非ゼロビンにしかデコードされないため、ノイズ的なバンドでは gain-shape のスケーリングがバンド全体のエネルギーを少数のスパイクに積み上げ、その間に対数スペクトルの穴を開けてしまいます。定常なロング窓バンド(両側でミラーされるバンド毎の定常性トラッカーで判定)では、CELT 方式のスプレッディング回転 — ストライド 1 と約 √N の Givens 回転 — が各パルスを近傍に塗り広げます。エンコーダは逆回転したドメインでパルスを探索し、デコーダが順方向の回転を適用するので、トーン性のピークは往復を生き延び、副情報は一切かかりません。
- ショートブロックの位相グルーピング。 トランジェントフレームでは 4 つのショートブロックスペクトルがインターリーブされています。shape コーダはまず各バンドスライスを時間ブロック単位に並べ替えるため、最上位の theta 分割が時間を分離します — ほぼ無音のブロックは厳密なゼロにデコードされ、アタックブロックが予算全体を使います。さらにエンコーダは、パルス shape ではプリエコーとして後方に塗り広げることしかできない弱いプリオンセット残留を削除します。
これはバージョン 0x04 で、従来の文脈適応 rANS 係数符号化(escape シンボルとデコーダ側再正規化を含む)を置き換えたものです。
全チャンネルのバンドエネルギー残差は rANS でエントロピー符号化されます。Falcon は広がり(spread)の範囲をカバーする 48 個のラプラシアン rANS テーブルを事前構築 しており、各フレームでエンコーダは実際の残差分布を測定し、選んだテーブルのインデックスを伝送します。デコーダは同一の固定テーブル集合を参照するだけなので、エントロピーモデルはフレーム毎にデータ適応的になりつつ、デコード側でのテーブル構築は不要です。フレームペイロードは [テーブルインデックス][rANS 長][rANS エネルギー][生 shape テール] です。
アタックフレーム(ピークバンドエネルギーが前フレームの伝送済みエネルギーより 9 dB 以上跳ね上がったフレーム)は実効ステップが細かくなり(k × 0.15)、TDAC の半分がまだオンセットに重なる次のフレームには中間のブースト(k × 0.45)が入ります。両側とも伝送済みエネルギーから同一に導出するため、副情報はゼロです。
ゲートされたバンドは、伝送されたバンドエネルギーに合わせたスペクトル傾斜付きノイズで埋められます。符号化されたバンドには補正は不要です — そのエネルギーは構成上厳密だからです(ステップ 5)。無音の扱いも正直です。エンコーダは AC(DC 除去後)エネルギー −100 dB で無音を検出するため、1 LSB の DC ペデスタルに乗った SFX 素材を有音と誤認せず、デジタル無音はデジタル無音のまま保たれます。
「無音」の中にはデジタルゼロではないものがあります。16 ビット由来の素材はしばしば量子化ノイズフロア — 1 LSB 単位のちらつきを伴う −1 LSB の DC ペデスタル(フェードアウトの尾、ディザ床)— を持ちます。MDCT は iso-size ではこの内容を解像できず、統計的ノイズ置換も大きく及びません。LSB 切り捨てのちらつきは iid ノイズではなく構造化されているからです。Falcon は代わりにこれらのフレームを時間ドメインで厳密に符号化します。チャンネル毎の DC レベルと、専用のシャープなテーブル族で rANS 符号化されるほぼ 3 値の残差を、Silent フレームのペイロード(先頭ペイロードバイト 1。従来のプレーンな無音ペイロードは [0] のまま)で運びます。この機構は 16 ビット LSB グリッドにビット単位で乗っている内容に限定してゲートされ(24 ビット/float のノイズフロアは別の内容クラスであり、決して偽装しません)、復元はビット単位で厳密です。フレーム自体はゼロ係数を IMDCT に通すため、TDAC は変わりません。
単一の 品質スカラー K(品質インデックス 0〜255)が全体の忠実度/サイズのトレードオフを支配し、ファイルサイズはそれに対して単調です。サイズやビットレートの目標が指定されると、エンコーダは 品質インデックスを二分探索 します。iso-size ベンチマークの --target-bytes はこの仕組みでバイト予算を正確に満たしています。バージョン 0x04 では 4 ビットの小数品質インデックス(1 ステップの 16 分の 1 単位、ヘッダフラグで伝送)が加わりました。整数 1 ステップはファイルサイズを約 4% 動かすため、整数のみのレート制御ではバイト予算の最大それだけが未使用になり得ました。小数化により探索は 16 倍細かくなり、バイト予算の利用率は約 100% になります。
エントロピー符号化したフレームが 12 ビットのフレームサイズフィールドをオーバーフローする場合、エンコーダは Mode::Hybrid とタグ付けした raw 符号化レイアウトにフォールバックし、デコーダは raw パスを選びます。すべてのフレームが必ず表現可能です。
正味の効果: デコーダはエンベロープ用のテーブル駆動 rANS リーダー、バンドあたり 1 回の融合スケーリングパスを伴う整数パルスベクトルアンパッカー、ノイズフィルパス、そして IMDCT 1 回(長 1 回または短 4 回)だけ になり、品質のための作業はすべてエンコード時に支払い済みです。
| 技術 | 役割 | 特許状況 |
|---|---|---|
| MDCT / IMDCT | 時間-周波数変換(20 ms フレームあたり 960 係数 @48 kHz、Vorbis 窓) | 期限切れ |
| 分割 MDCT ショートブロック(窓切り替え) | トランジェントフレームでの 4×480 変換、TDAC 完全な Edler 遷移、ゼロビットシグナリング | AAC 世代の技術・特許期限切れ |
| スプリットバンド PVQ gain-shape 符号化 | バンド毎の K パルス整数 shape: ノード毎量子化 theta を伴う再帰 2 分割、V(N,K) 全単射列挙、K は伝送済みエネルギーから導出(副情報ゼロビット)、バンドエネルギーは構成上厳密 | PVQ: Fischer 1986・特許期限切れ / 分割・theta: CELT 世代の技術・特許フリー |
| スプレッディング回転 | 定常ロング窓バンドでの Givens 回転によるパルス拡散 — スパースなパルスによるノイズ的スペクトルの崩壊を防止 | CELT 世代の技術・特許フリー |
| rANS | バンドエネルギー残差のエントロピー符号化 — テーブル駆動・フレーム毎適応。range coding より遥かに高速にデコード | 特許フリー(Jarek Duda, 2013) |
| Bark スケールバンド | 27 個の知覚周波数バンド(最上位オクターブを分割) | パブリックドメイン |
| CELT 風エネルギー予測 | ほぼユニティのリークを持つバンドエネルギー予測(時間 0.85 + 周波数 0.15)、無音からの単一フレームオンセットに対応する −63…+95 dB 非対称残差クランプ | 手法・特許なし |
| エネルギー導出 sub-linear ビット配分 | 決定的・副情報ゼロのパルス数割り当て | 独自手法・自由 |
| フレーム毎 M/S ステレオ(係数ドメイン) | 厳密な再構成を保ったままフレーム毎に切り替え可能な Mid/Side 符号化 | 古典的・自由 |
| デコーダ側傾斜ノイズフィル | ゲートされたバンドのスペクトルエンベロープ保存(符号化バンドは構成上厳密) | 手法・自由 |
| LSB-floor 無音フレームペイロード | 量子化ノイズフロアフレーム(DC ペデスタル + 1 LSB ちらつき)のビット厳密な時間ドメイン符号化 | 独自手法・自由 |
Falcon のすべてのアルゴリズムは 特許期限切れ・設計上特許フリー・パブリックドメイン のいずれかです。
サードパーティのクレートはすべて寛容なライセンス(MIT または Apache-2.0)で、特許上の負担もありません。
| クレート | 用途 | ライセンス |
|---|---|---|
rustfft / rustdct |
FFT ベースの MDCT / IMDCT | MIT / Apache-2.0 |
hound |
WAV ファイル入出力 | Apache-2.0 |
clap |
CLI 引数解析 | MIT / Apache-2.0 |
crc |
CRC 誤り検出 | MIT / Apache-2.0 |
byteorder |
エンディアン安全なビットストリーム入出力 | MIT / Unlicense |
once_cell / thiserror |
遅延静的初期化・エラー型 | MIT / Apache-2.0 |
- Rust 1.70 以上 と Cargo
- Windows・macOS・Linux に対応
ffmpegと Python(numpy/soundfile)は品質検証ハーネスを実行する場合のみ必要
git clone https://github.com/pbtechlab/Falcon.git
cd Falcon
cargo build --releaseCLI バイナリは ./target/release/falcon に生成されます。C/C++ ライブラリのビルドは cargo build --release -p falcon_capi(falcon_capi/README.md を参照)。
Falcon は 4 つのサブコマンドを持つ単一の falcon バイナリを提供します。
falcon encode <input.wav> <output.falcon> [OPTIONS]| オプション | 説明 |
|---|---|
-b, --bitrate <KBPS> |
目標ビットレート(kbps、デフォルト 128)。これがデフォルトのレート制御モードです。 |
--target-bytes <N> |
レート制御: 出力合計が N バイト以下 に収まる最も細かい品質を狙う。--target-kbps と --bitrate を上書きします。 |
--target-kbps <R> |
レート制御: R kbps のビットレートを狙う(--target-bytes で上書きされる)。 |
--quality-index <0-255> |
品質インデックスを直接指定(0 = 最も細かい、255 = 最も粗い)。レート制御を完全にバイパスします。 |
-q, --quality <PRESET> |
エンコード労力プリセット: fast, normal, high, maximum(デフォルト normal)。 |
デフォルト(--target-* も --quality-index も指定しない場合)では、定品質 VBR 探索で --bitrate に向けてレート制御します。例:
# デフォルト: 128 kbps に向けた定品質 VBR
falcon encode input.wav output.falcon
# 明示的なビットレート指定
falcon encode input.wav output.falcon --bitrate 96
# 厳密なサイズ指定(500,000 バイトに収まる最も細かい品質)
falcon encode input.wav output.falcon --target-bytes 500000
# 品質インデックス固定・レート制御なし
falcon encode input.wav output.falcon --quality-index 20falcon decode <input.falcon> <output.wav>16 ビット PCM の WAV ファイルを復元し、実時間比のデコード倍率を表示します。
falcon info <input.falcon>ファイルヘッダを表示します: サンプルレート、チャンネル数とレイアウト、総フレーム数、ビットレート、再生時間、ファイルサイズ、(存在すれば)LFE チャンネルマスク。
falcon bench-decode <input.falcon> [-i <iterations>]ファイルをメモリに読み込み、繰り返しデコードして(デフォルト 10 回)、平均デコード時間・実時間比・スループット(MB/s)を表示します。
Falcon はサイズと品質を制御する 3 つの方法を、優先順位順にサポートします。
--quality-index 0-255— 直接指定の固定品質。レート制御は無効。数値が小さいほど細かい。--target-bytes N— エンコーダが品質インデックスを二分探索し、出力合計が N バイト以下に収まる最も細かい品質を求めます。後述の iso-size ベンチマークはこの方法で作成されています。--target-kbps R/--bitrate KBPS— 目標ビットレート。クリップの再生時間からバイト予算に換算し、同じ二分探索で到達します。何も指定しない場合は--bitrateがデフォルトです。
内部的には、すべてのレート制御は単一の品質スカラー K に解決されます。ファイルサイズは品質インデックスに対して単調であり、それが二分探索を成立させています。探索はさらに 4 ビットの小数品質インデックス(隣接する整数インデックス間の 16 サブステップ、ヘッダフラグで伝送)を精緻化します。整数 1 ステップはファイルサイズを約 4% 動かすため、小数化によりバイト予算の利用率は約 100% に上がります。
すべてのベンチマークは iso-size(同一サイズ)です。各 Falcon ファイルは、対応する Opus ファイル以下のサイズになるよう(--target-bytes で)レート制御されているため、各行は 同等かそれ以下のバイト数における品質 を比較しています。
コーパス — 18 ファイル: 実録音 11 ファイル(音声、各種音楽、SFX/環境音)に加え、tools/quality/make_torture.py が決定的に生成する 合成拷問信号 7 ファイル(カスタネット風クリック列、グロッケンシュピールの部分音、ハープシコードのアルペジオ、密集した多和音、20 Hz〜20 kHz スイープ、ゲートされたピンクノイズバースト、定常高域トーン)。コーパスは公開素材・合成素材のみで、隠しデータへのチューニングはありません。
指標 — プロジェクト独自ではなく、意図的に第三者の文献標準を採用しています(いずれも低いほど良い):
- MR-STFT — マルチレゾリューション STFT の対数振幅距離(FFT 512/1024/2048、75% オーバーラップ)。ニューラルコーデック研究(SoundStream、EnCodec、DAC)の標準的な客観指標。
- log-mel L1 — 対数メルスペクトログラム間の L1 距離(64 メル、fmax 20 kHz)。
不正防止ゲート(全ファイルに適用): 原音とデコード出力の相互相関ラグは 0 サンプルであること、全体の RMS オフセットは 0.06 dB 以下 — 隠れた時間シフトや音量操作でスコアを盛ることはできません。
| ファイル | 種別 | MR-STFT Falcon | MR-STFT Opus | log-mel Falcon | log-mel Opus | 結果(MR-STFT) |
|---|---|---|---|---|---|---|
| bgm1 | 音楽 | 0.4846 | 0.6384 | 0.185 | 0.148 | WIN |
| castanets | 合成 | 0.3558 | 1.0081 | 0.065 | 0.291 | WIN(両指標) |
| glockenspiel | 合成 | 0.6253 | 0.9193 | 0.560 | 1.444 | WIN(両指標) |
| harpsichord | 合成 | 0.5817 | 0.6783 | 0.213 | 0.128 | WIN |
| hftonal | 合成 | 0.4540 | 1.4214 | 0.175 | 0.190 | WIN(両指標) |
| musicclassical | 音楽 | 0.5204 | 0.6026 | 0.129 | 0.176 | WIN(両指標) |
| musicelectronic | 音楽 | 0.2330 | 0.2511 | 0.057 | 0.077 | WIN(両指標) |
| musicpop | 音楽 | 0.7739 | 0.8826 | 0.255 | 0.198 | WIN |
| pinkbursts | 合成 | 0.8022 | 4.0627 | 0.621 | 1.751 | WIN(両指標) |
| polychord | 合成 | 0.4456 | 0.8835 | 0.138 | 0.117 | WIN |
| sfx1 | 効果音 | 0.5177 | 0.6260 | 0.223 | 0.127 | WIN |
| sfx2 | 効果音 | 0.5361 | 0.5467 | 0.209 | 0.189 | WIN |
| sfxnoise | 効果音 | 0.5212 | 0.7061 | 0.143 | 0.118 | WIN |
| sfxtransient | 効果音(拍手) | 0.7700 | 0.8760 | 0.156 | 0.099 | WIN |
| sweep | 合成 | 0.6868 | 0.6944 | 0.864 | 1.072 | WIN |
| voicefemale | 音声 | 0.4877 | 0.5995 | 0.140 | 0.197 | WIN(両指標) |
| voicemale | 音声 | 0.4650 | 0.5532 | 0.146 | 0.181 | WIN(両指標) |
| voicesing | 音声 | 0.4820 | 0.4831 | 0.098 | 0.106 | WIN(両指標) |
- Falcon は iso-size の MR-STFT で 18 ファイル全てで Opus に勝利。うち 11 ファイルは log-mel でも勝利。
- 拷問信号はアーキテクチャの効果が最も出る場所です: castanets は 2.8 倍良く、pinkbursts は 5.1 倍良く、hftonal は 3.1 倍良く、glockenspiel/polychord も明確に勝っています。プリエコー制御・高域エンベロープ解像度・パルス shape 符号化は、まさにショートブロック・27 バンド分割・PVQ が買ったものです。
- 前リリースの負け(musicclassical・sfx1・sfx2・sfxtransient・voicesing)は
0x04の係数コーダですべて勝ちに転じました。スプリットバンド PVQ が密集したトーン性/混合コンテンツの符号化効率ギャップを解消し、LSB-floor ペイロードが sfx2 の −1 LSB ペデスタルをビット単位で厳密に復元し、ほぼユニティのエネルギー予測器が定常エンベロープの再送を止めたためです。 - 客観スペクトル指標はあくまで代理であり、判決ではありません。最終的な審判は聴取テスト です。自分の素材をデコードし、自分の耳で判断してください。
- sweep(20 Hz〜20 kHz サインスイープ)は最後まで残った負け(+2.0%)でした。二分探索の結果、原因はコーデックではなく WAVライタの許容誤差バグ(出力サンプルの4%にランダムな±1 LSBの床を散布)と判明。ライタ修正後、sweep は Opus の 67% のバイト予算で勝利しています。
デコーダの CPU 時間として公平に測定(Falcon は falcon bench-decode のインプロセス実測、Opus/Vorbis は ffmpeg -benchmark。後者は Vorbis に Ogg デマックス分を余計に課すため、むしろ Vorbis 有利に働く測定)。現行 0x04 デコードパス(高速 N/4-FFT IMDCT + AVX2 ビルド)、熱負荷下でファイル別 best-of-N:
| Falcon | Opus | Vorbis | 対 Vorbis | |
|---|---|---|---|---|
| bgm1 | 686× | 384× | 448× | 軽量 |
| musicclassical | 630× | 432× | 589× | 軽量 |
| musicelectronic | 719× | 390× | 569× | 軽量 |
| voicefemale | 813× | 413× | 614× | 軽量 |
| voicemale | 825× | 329× | 551× | 軽量 |
| musicpop | 639× | 267× | 389× | 軽量 |
| sfxnoise | 761× | 400× | 490× | 軽量 |
| sfx1 | 811× | 317× | 420× | 軽量 |
| sfx2 | 692× | 375× | 550× | 軽量 |
| voicesing | 670× | 419× | 589× | 軽量 |
Falcon は全ファイルで Opus より 1.5〜2.8 倍軽量で、実世界の全 11 ファイル(声・音楽・環境音・SFX)で Vorbis より 5〜90% 軽量です。合成拷問信号 7 本を加えた全 18 ファイルでも 17 ファイルで Vorbis に勝ち、唯一の例外は glockenspiel(合成の 900 万パルス非調和クラスタというストレス信号)で約 0.96× です。この 1 ファイルは純粋にコンビナトリアル PVQ デコード律速で、係数密度が実ファイルの約 9 倍あり、SIMD・マルチコア・GPU いずれでもビットストリームを変えずには短縮できない逐次整数依存チェーンです。
Falcon は測定ハーネス自体を製品の一部として扱っています。すべて tools/quality/ にあります。
metrics.py— 第三者標準の指標: MR-STFT 対数振幅距離、log-mel L1、Bark バンド毎エネルギープロファイル RMSE、高域保持率(6–12 / 12–20 kHz)、音声向けの PESQ(ITU-T P.862.2)と STOI、およびアライメント・レベル診断。gates.py— 実行を即座に失格させる不正防止ゲート: 相互相関の時間オフセットは厳密に 0 サンプル、RMS レベルオフセットの上限、NaN/Inf なし、クリップサンプル率の上限。隠れた時間・ゲインシフトでスコアを盛ることはできません。make_torture.py— 7 信号の合成拷問コーパスの決定的な生成器(固定シード、numpy のみ、ダウンロードなし)。誰でもコーパスの困難な部分をビット単位で再現できます。compare.py— この README のすべての数値を生成した iso-size 比較ドライバ。各リファレンスを Opus ファイルのバイトサイズで再エンコードし、全コーデックをデコードし、全指標を計算して、markdown + CSV レポートをtools/quality/reports/に書き出します。
# PATH に ffmpeg、numpy + soundfile 入りの Python が必要(pesq/pystoi は任意)
python tools/quality/make_torture.py # 合成コーパスを再生成
python tools/quality/compare.py sample/ # 任意のコーパスディレクトリコーパスディレクトリのレイアウト:
<corpus>/
├── wav_original/ # 48 kHz リファレンス WAV
├── opus/ # 事前エンコード済み Opus(iso-size のバイト予算を定義)
└── vorbis/ # 任意の事前エンコード済み Vorbis
公開している結果は実録音と合成拷問コーパスで測定しています。本リポジトリを第三者メディアから自由に保つため、実録音は同梱していません — 手元の 48 kHz WAV を格納したディレクトリをハーネスに指定してください。合成コーパスは python tools/quality/make_torture.py で完全に再現できます。旧来の Rust ハーネスも cargo run --release --bin falcon-eval -- <wavディレクトリ>/ で利用できます。
| フィールド | サイズ | 説明 |
|---|---|---|
| Magic | 4 B | "FALC" |
| Version | 1 B | 0x04 |
| Flags | 2 B | 機能フラグ — 下位バイトがグローバル品質インデックス、ビット 8〜11 がその 4 ビット小数精緻化(1 ステップの 16 分の 1 単位) |
| Sample Rate | 3 B | Hz(24 ビットリトルエンディアン) |
| Channels | 1 B | 1〜64 |
| Total Frames | 4 B | フレーム数 |
| Bitrate | 2 B | kbps(0 = VBR) |
| LFE Mask | 8 B | チャンネルごとに 1 ビット |
| フィールド | ビット | 値 |
|---|---|---|
| Frame Size | 12 | ペイロードバイト数 |
| Mode | 2 | ロング MDCT = 0, ショートブロック MDCT(トランジェント)= 1, Hybrid(raw フォールバック)= 2, Silent = 3 |
| Flags | 2 | ランダムアクセスポイント、チャンネルカップリング |
モード値 1 は元々一度も出力されなかった LPC モードの予約値でしたが、バージョン 0x03 以降は ショートブロック・トランジェントフラグ に転用されています。窓切り替えがゼロビットでシグナリングされるのはこのためです。Mode::Hybrid(2)は raw 符号化のオーバーフローフォールバックです。Mode::Silent(3)は無音フレームを表し、0x04 以降、先頭ペイロードバイトが 1 の Silent フレームは LSB-floor ペイロード(前フレームのビット厳密な DC + 残差符号化 — 信号処理チェーン参照)を運びます。従来のプレーンな無音ペイロードは [0] のままです。
| フィールド | サイズ | 説明 |
|---|---|---|
eidx |
1 B | エネルギーセクション用 rANS テーブルインデックス(48 個の事前構築ラプラシアンテーブルの 1 つ) |
rans_len |
2 B | rANS ブロブの長さ(リトルエンディアン) |
| rANS ブロブ | 可変 | 全チャンネルのバンドエネルギー残差 |
| shape テール | 可変 | 生ビット: 符号化された各バンドについて、分割ノードの theta フィールドとリーフのパルスベクトルインデックス(行きがけ順) |
パルス数・分割ツリー・theta フィールド幅はすべて伝送済みエネルギーから導出されます — shape テールは副情報を一切運びません。
これらの自己課した制限が、デコーダを組み込み再生に十分安価な水準に保っています。
| 制約 | 上限 |
|---|---|
| フレームあたりの IMDCT | 長 1 回(または同じ区間を覆う短 4 回) |
| rANS テーブルサイズ | 4 KB 以下 |
| コードブックエントリ数 | 256 以下 |
| サンプルあたりの乗算回数(IMDCT を除く) | 10 以下 |
| メモリアクセスパターン | 逐次アクセス優先 |
MIT ライセンス — 商用製品を含むあらゆる用途で自由に利用できます。全文は LICENSE を参照してください。
MIT License
Copyright (c) 2026 Falcon Audio Codec contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Opus および Vorbis は各権利者(Xiph.Org Foundation / IETF)の商標です。Falcon は独立したプロジェクトであり、これらと提携・推奨関係にはありません。名称はオープンな参照コーデックとの事実に基づく比較(nominative use)のためにのみ使用しています。
Falcon は 特許ロイヤリティが一切不要 なように設計されています。
- 使用しているすべてのアルゴリズム — MDCT/IMDCT、分割 MDCT 窓切り替え、rANS、スプリットバンド gain-shape 符号化を含むピラミッドベクトル量子化(PVQ)、スプレッディング回転、Bark スケール解析、CELT 風エネルギー予測、エネルギー導出ビット配分、ノイズフィル、LSB-floor ペイロード、M/S ステレオ — は、特許期限切れ・設計上特許フリー・パブリックドメイン のいずれかです。
- サードパーティの Rust クレートはすべて MIT または Apache-2.0 ライセンスです。
- 商用製品、ゲーム、ストリーミングサービス、組み込み機器、その他あらゆる用途で、ロイヤリティやライセンス料を支払うことなく 自由にご利用いただけます。
- J. Duda, "Asymmetric numeral systems: entropy coding combining speed of Huffman coding with compression rate of arithmetic coding," 2013.
- T. R. Fischer, "A Pyramid Vector Quantizer," IEEE Transactions on Information Theory, 1986(gain-shape パルス符号化。特許はとうに期限切れ).
- J.-M. Valin, G. Maxwell, T. B. Terriberry, K. Vos, "Definition of the Opus Audio Codec (RFC 6716)," IETF, 2012.
- J.-M. Valin, T. B. Terriberry, C. Montgomery, G. Maxwell, "A High-Quality Speech and Audio Codec With Less Than 10-ms Delay"(CELT), IEEE TASLP, 2010(エネルギー予測・バンド分割・スプレッディング回転).
- B. Edler, "Codierung von Audiosignalen mit überlappender Transformation und adaptiven Fensterfunktionen," Frequenz 43, 1989(MDCT 窓切り替え).
- E. Zwicker, "Subdivision of the audible frequency range into critical bands (Frequenzgruppen)," JASA, 1961(Bark スケール).
- N. Zeghidour ほか, "SoundStream: An End-to-End Neural Audio Codec," 2021; A. Défossez ほか, "High Fidelity Neural Audio Compression"(EnCodec), 2022(MR-STFT 評価方法論の出典).
- ISO/IEC 13818-7, MPEG-2 Advanced Audio Coding(心理音響モデルとブロック切り替えの原理).
バグ報告やプルリクエストを歓迎します。コードを書く前に方向性を合意できるよう、変更提案の前にまず Issue を作成して議論してください。


