チャンネル形式
libsonare はシステム全体で mono・stereo・5.1・7.1 の 4 つのチャンネルレイアウトを認識しますが、各モジュールは異なる用途で作られているため、2ch を超えるチャンネル数の扱いはどこでも同じではありません。このページではその違いを整理します — どのモジュールが何チャンネルまで受け付けるか、標準のチャンネル順と LFE の扱いが何を意味するか、そしてどのモジュールのアップミックスとダウンミックスも従っている 1 つの規則です。
レイアウトとスピーカーの役割
| レイアウト | チャンネル数 | 役割(標準順) |
|---|---|---|
| Mono | 1 | (役割なし。単一チャンネル) |
| Stereo | 2 | L, R |
| 5.1 | 6 | L, R, C, LFE, Ls, Rs |
| 7.1 | 8 | L, R, C, LFE, Ls, Rs, Lss, Rss |
標準順は WAVE_FORMAT_EXTENSIBLE と一致します。7.1 では Ls/Rs(index 4/5)と Lss/Rss(index 6/7)は別名の同じペアではなく、別個の 2 組の役割です — それぞれがどこに位置するかは 広げる方向 を参照してください。
LFE(低域効果音)は、デコーダーがサブウーファーへ渡す途中で約 10 dB 持ち上げる前提で、レベルを落として混ぜられた低域成分だけを運びます。自前の再生手段を持たない出力先で LFE をどう扱うかは、次の 2 つの規則で決まります。
- 折り込み(出力先に LFE チャンネルが無い、または低音管理にサブウーファーが無い場合): LFE 信号を 120 Hz でローパスし、レベルを落として L/R ペアに加算します。
- サブウーファー供給(低音管理が有効でサブウーファーがある場合): LFE 信号を持ち上げ、
"small"に指定したスピーカーからクロスオーバーした低域成分と合わせて LFE チャンネルへ送ります。 - 低音管理が無効で、出力先が LFE チャンネルを持つ場合、LFE の平面はそのまま素通しします — 後段のアンプが自前で +10 dB を掛ける前提です。
モジュール別のチャンネル対応
ライブラリの大半は mono か stereo だけを処理し、それより広い入力は拒否します。サラウンドのチャンネル数を受け付けるのは以下のモジュールだけで、それぞれ自分が出力する幅より広い素材をどう扱うかが異なります。
| モジュール | 受け付ける幅 | stereo より広い場合の扱い |
|---|---|---|
| 音声ファイルの読み込み | mono に畳むか、interleaved のバッファをそのまま通す | 1/2/6/8 チャンネルのファイルは下記の BS.775 ダウンミックスで mono に畳み、それ以外の数は平均します |
| 解析・ストリーミング解析 | mono のみ | 呼び出し側が先に畳みます |
ラウドネスメーター(lufsInterleaved) | 任意のチャンネル数 | チャンネル数に応じて BS.1770 のチャンネル重みを選びます |
| True Peak・相関・フェーズスコープ | mono / stereo | 拒否 |
| ワンショットエフェクトとマスタリングプロセッサ | 1–2 | 拒否 |
| リアルタイムプロセッサ(ダイナミクス、EQ など) | 最大 64 平面 | 平面ごとに動作。stereo ペア専用のエフェクトは、幅広のバスでも前方ペアにしか作用しません |
| ミキシングのバス・ストリップ・メーター | 1 / 2 / 6 / 8 | バスが宣言したレイアウトに従います |
| ミキサーグラフ | 宣言どおりのバス幅 | より狭い宛先(小さいバス、stereo のサイドチェーンキー)には BS.775 ダウンミックスが掛かり、より広い宛先には入力側の平面がそのまま渡ります |
| リアルタイムエンジン / プロジェクトのバウンス | バスのレイアウト。出力は 1 / 2 / 6 / 8 | ミキサーグラフと同じ規則。マスターバスより広い要求は拒否されます |
| リアルタイムボイスチェンジャー | 1–2 | 拒否 |
| 再生レンダラー | 1 / 2 / 6 / 8、および channel map | 下記の変換表に双方向で従います |
channel map による入力レイアウトの宣言
デコーダーごとにチャンネル順は異なります — AAC は C L R Ls Rs LFE の順で、フレームワークによっては "5.1" と "5.1(side)" を区別し、プラットフォーム API もそれぞれ独自の並びを持ちます。再生レンダラーの input.channel_map は各入力チャンネルの役割を明示的に指定します(このとき input.layout は "auto" ではなく固定レイアウトである必要があります)。呼び出し側がそれぞれ自前でバッファを並べ替える必要はなく、誤った map はチャンネルが黙って入れ替わったり欠けたりするのではなく、検証エラーとしてはっきり失敗します。5.1(side) の SL/SR チャンネルは Ls/Rs の役割に対応付けられます — 役割名は「左右のサラウンド」を意味し、それが実際にどの角度に置かれるかは入力側のラベルではなく出力側が決めます。
狭める方向(ダウンミックス)
上記のうちサラウンドバスをより狭いレイアウトへ出力するすべてのモジュール — ファイル読み込み、ミキサーグラフ、プロジェクトのバウンス、再生レンダラー — は、同じ ITU-R BS.775 係数(ミキシングモジュールの downmix)を使います。5.1 から stereo へ、7.1 から 5.1/stereo へは、サラウンドペアをレベルを落として折り込み、LFE チャンネルは計算から外して上記の LFE 規則に任せます。ミキサーグラフ自身の狭める規則は サラウンドグループバスとワイドメーター を参照してください。
再生レンダラー自身の変換表を、入力と出力先ごとに示します。
| 入力 \ 出力先 | stereo スピーカー | 5.1 スピーカー | 7.1 スピーカー | ヘッドホン |
|---|---|---|---|---|
| Mono | L/R、-3 dB | センターのみ | センターのみ | 仮想化したセンター |
| Stereo | 素通し | アップミックス(upmix.enabled: false なら L/R のみ) | アップミックス(または L/R のみ) | アップミックス後に仮想化(または ±30° の仮想 L/R) |
| 5.1 | BS.775 ダウンミックス + LFE 折り込み | 素通し | L/R/C/LFE はそのまま。Ls/Rs は Lss/Rss へ移動し、7.1 自身の Ls/Rs は無音 | 仮想化した 5.1 |
| 7.1 | BS.775 ダウンミックス + LFE 折り込み | BS.775 ダウンミックス(LFE はそのまま) | 素通し | 仮想化した 7.1 |
広げる方向(アップミックス)
チャンネル構成を広げるすべてのモジュール — より狭いバスの平面をより広いバスに置くミキサーグラフと、再生レンダラーの stereo アップミックス — は、共通の 1 つの原則に従います。入力側の各平面を、そのモジュール自身の角度表の上で入力側の平面の角度に最も近い出力先の役割に置く、というものです。角度表はモジュールごとに用途が違うため異なり、同じ役割名でもどのモジュールの表を見るかで異なる角度になり得ます。
| モジュール | L / R | 5.1 の Ls/Rs | 7.1 の Ls/Rs | 7.1 の Lss/Rss |
|---|---|---|---|---|
| ミキサーグラフのパンナー | ±30° | ±110° | ±110°(同じ表を使い、7.1 専用の行は無い) | ±90° |
| 再生レンダラー | ±30° | ±110° | ±135°(後方) | ±90°(側方) |
ミキサーグラフは出力する幅によらず役割ごとに 1 つの角度を保つため、バスが 7.1 に広がっても 5.1 のサラウンドペアは同じチャンネルインデックスに収まります。一方、再生レンダラーは ITU-R BS.2051 の名目スピーカー角度に従っており、5.1 の Ls/Rs(±110°)は、7.1 自身の Ls/Rs(±135°、より後方)よりも 7.1 の側方ペア Lss/Rss(±90°)に近い位置になります。同じ「最も近い角度へ」という規則を異なる表に適用した結果、stereo アップミックスの無相関化したアンビエンス成分は Ls/Rs ではなく Lss/Rss へ送られます — 2 つの表は同じ役割名に異なる角度を与えており、規則が従うのは角度であって名前ではありません。
再生レンダラーは 5.1 の入力から後方ペアを合成することはせず(後方チャンネルの人工的な生成は行いません)、高さを加えた広いフォーマットへのアップミックスも行いません — 詳しくは 再生レンダラー § 非対象 を参照してください。