Skip to content

チャンネル形式 ​

libsonare はシステム全体で モノラル・ステレオ・5.1・7.1 の 4 つのチャンネルレイアウトを認識しますが、各モジュールは異なる用途で作られているため、2 チャンネルを超えるチャンネル数の扱いはどこでも同じではありません。このページでは、どのモジュールが何チャンネルまで受け付けるか、標準のチャンネル順と LFE の扱いが何を意味するか、そして狭める方向と広げる方向の扱いを整理します。ダウンミックスの規則は 1 つ、アップミックスの動作は 2 通りです。

レイアウトとスピーカーの役割 ​

レイアウトチャンネル数役割(標準順)
モノラル1(役割なし。単一チャンネル)
ステレオ2L, R
5.16L, R, C, LFE, Ls, Rs
7.18L, R, C, LFE, Ls, Rs, Lss, Rss

標準順は WAVE_FORMAT_EXTENSIBLE と一致します。7.1 では Ls/Rs(index 4/5)と Lss/Rss(index 6/7)は別名の同じペアではなく、別個の 2 組の役割です。それぞれがどこに位置するかは 広げる方向 を参照してください。

下の図は、各役割をリスナーの周りに並べ、プレーン番号を添えたものです。ラウドネス計測では、スピーカーが左右どちらかの 60° から 120° の間にあるチャンネルを +1.5 dB で重み付けします。そのため 5.1 のサラウンドペアと 7.1 の側方ペアは重み付けされ、7.1 の後方ペアはされません。

5.1 と 7.1 のスピーカー配置
5.1L·0 −30°R·1 +30°C·2 0°Ls·4 −110°Rs·5 +110°リスナー7.1L·0 −30°R·1 +30°C·2 0°Ls·4 −135°Rs·5 +135°Lss·6 −90°Rss·7 +90°リスナー
  • L / R フロントペア
  • C センター
  • Ls / Rs サラウンド(7.1 では後方)
  • Lss / Rss 側方
  • ラウドネスの重み +1.5 dB(60°〜120°)
  • LFE:方向なし、ラウドネス合計に含めない
真上から見た図で、上が正面です。各スピーカーに役割、プレーン番号、角度を添えています。網掛けの扇形は、BS.1770 のラウドネス合計でチャンネルを 1.41 倍(+1.5 dB)に重み付けする範囲です。LFE は方向を持たず、ラウドネス合計からも除かれるため、リスナーを囲む輪として描いています。

LFE(低域効果音)は、デコーダーがサブウーファーへ渡す途中で約 10 dB 持ち上げる前提で、レベルを落として混ぜられた低域成分だけを運びます。再生レンダラーでは、出力先での LFE の扱いが次の 3 つの規則で決まります。ほかで使う共通の downmix は、includeLfe を指定しない限り LFE を捨てるだけです(狭める方向を参照)。

  • 折り込み(出力先に LFE チャンネルが無い、または低音管理にサブウーファーが無い場合): LFE 信号を 120 Hz でローパスし、レベルを落として L/R ペアに加算します。
  • サブウーファー供給(低音管理が有効でサブウーファーがある場合): LFE 信号を持ち上げ、"small" に指定したスピーカーからクロスオーバーした低域成分と合わせて LFE チャンネルへ送ります。
  • 低音管理が無効で、出力先が LFE チャンネルを持つ場合、LFE チャンネルはそのまま素通しします。後段のアンプが自前で +10 dB を掛ける前提だからです。

モジュール別のチャンネル対応 ​

ライブラリの大半は モノラルかステレオだけを処理し、それより広い入力は拒否します。サラウンドのチャンネル数を受け付けるのは以下のモジュールだけで、それぞれ自分が出力する幅より広い素材をどう扱うかが異なります。

モジュール受け付ける幅ステレオより広い場合の扱い
音声ファイルの読み込みモノラルに畳むか、インターリーブのバッファをそのまま通す1/2/6/8 チャンネルのファイルは下記の BS.775 ダウンミックスでモノラルに畳み、それ以外の数は平均します
解析・ストリーミング解析モノラルのみ呼び出し側が先に畳みます
ラウドネスメーター(lufsInterleaved)任意のチャンネル数チャンネル数に応じて BS.1770 のチャンネル重みを選びます
True Peak・相関・フェーズスコープモノラル/ステレオ拒否
ワンショットエフェクトとマスタリングプロセッサ1–2拒否
リペアセッション(masteringRepairAnalyze / masteringRepairApply)空でない任意のプレーナー形式のチャンネル集合選んだ処理を全チャンネルに適用。デノイズとデリバーブはマスクを共有します
リアルタイムプロセッサ(ダイナミクス、EQ など)最大 64 チャンネル(プレーナー形式)チャンネルごとに動作。ステレオペア専用のエフェクトは、幅広のバスでも前方ペアにしか作用しません
ミキシングのバス・ストリップ・メーター1 / 2 / 6 / 8バスが宣言したレイアウトに従います
ミキサーグラフ宣言どおりのバス幅より狭い宛先(小さいバス、ステレオのサイドチェーンキー)には BS.775 ダウンミックスが掛かり、より広い宛先には入力側のチャンネルがそのまま渡ります
リアルタイムエンジン / プロジェクトのバウンスバスのレイアウト。出力は 1 / 2 / 6 / 8ミキサーグラフと同じ規則。マスターバスより広い要求は拒否されます。AudioWorklet では、5.1 または 7.1 の出力先のメータースナップショットにチャンネルごとの配列が加わります
リアルタイムエンジンのトラックレーン(setTrackLanes)ステレオのソースのみモノラル、5.1、7.1 のソースは拒否されます(InvalidParameter。WASM の worklet ファサードは RangeError)。ゼロ初期化したレーンはモノラルとして読まれるため、C の呼び出し側は SONARE_CHANNEL_LAYOUT_STEREO を設定します。setTrackLanes は MAX_TRACK_LANES(32)を超えるレーン数、−1〜+1 の外のレーンのパン、0〜2 の外の幅、フェーダー範囲外の値も拒否します
リアルタイムボイスチェンジャー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 として公開されています。BS.775 自体が定めているのは 5.1 までのダウンミックスで、以下の 7.1 の規則は、サイドのペアをサラウンドのペアへ折り込む形でそれを拡張したものです。サラウンドペアはレベルを落としてフロントペアに折り込まれ、LFE チャンネルは計算から外れます。downmix は includeLfe を指定しない限り捨て、再生レンダラーは上記の LFE 折り込みを自前で行います。JavaScript では同じ係数が downmix(channels, targetLayout) です。センターとサラウンドは -3 dB でフロントペアに入り、LFE チャンネルは捨てられます。decodeChannels(bytes) はファイルの全チャンネルを保持するので、自分で狭められます。Audio.fromMemoryWithBrowserFallback のブラウザコーデックへのフォールバックもこの規則でモノラルに畳むため、どちらのデコーダーでも同じサンプルになります。

downmix は元のレイアウトをチャンネル数(1、2、6、8)から読み取ります。出力先は ChannelLayout の序数で、0 がモノラル、1 がステレオ、2 が 5.1、3 が 7.1 です。

元出力先規則
ステレオモノラルL と R の単純平均
5.1 または 7.1モノラル下のステレオへの折りたたみを行い、2 チャンネルを平均
5.1ステレオL + 0.707 C + 0.707 Ls。右側も同様。LFE は捨てる
7.1ステレオ5.1 と同じ規則に、Ls と並べて Lss を -3 dB で加える
7.15.1Ls + Lss と Rs + Rss をゲイン 1 で加算。ほかのチャンネルはそのまま
同じレイアウト同じレイアウトコピー
任意より広いレイアウト拒否(InvalidParameter、"downmix cannot upmix")
上記以外のチャンネル数モノラルチャンネルの重みなし平均
上記以外のチャンネル数モノラル以外拒否(InvalidParameter)

折りたたみは既定では正規化されません

この折りたたみは、フルスケールに収まるようには調整されません。フルスケールで同相の 5.1 ソースは、ステレオでもモノラルでも 2.41 に達し、7.1 ソースはステレオで 3.12 に達します。Audio.fromMemory で 5.1 ファイルを読み込むときも同じ折りたたみを使うため、フルスケールを超えることがあります。書き出す前に下記の normalize を指定するか、リミットしてください。

折りたたみには 2 つのオプションがあります。normalize は出力を最悪ケースの合計で割ります。全プレーンがフルスケールで同相のソースがちょうど 1.0 になり、割る値はレイアウトで決まる固定値で信号から測るものではないため、一般的な素材は数 dB 小さくなります。includeLfe は LFE プレーンを捨てる代わりに -3 dB でフロントペアへ折り込み、同じ最悪ケースは 3.12(5.1)または 3.83(7.1)に上がります。どちらもステレオやモノラルへ狭める折りたたみに効き、7.1 から 5.1 への折りたたみはどちらの設定でも LFE プレーンをそのまま残します。JavaScript では { normalize, includeLfe }、Python では normalize=・include_lfe=、C では sonare_downmix_ex です。

5.1 · DOWNMIXIDLE
5.1 のダウンミックス:フルスケールを超える折りたたみ

6 つのチャンネルが標準順(L、R、C、LFE、Ls、Rs)でそれぞれの音を鳴らし、最後に同相のサイン波を一斉に鳴らします。downmix はセンターとサラウンドを −3 dB(×0.707)で加え、LFE を捨て、正規化はしません。そのためフルスケールでは、同相のサイン波がステレオでもモノラルでも 2.414(+7.66 dBFS)に達します。チャンネルをオフにすると、どのチャンネルが 0 dBFS を超えさせているかがわかります。

出力先
チャンネルごとのピーク
0 dBFS
typescript
import { init, decodeChannels, downmix } from '@libraz/libsonare';

await init();
const { channels, sampleRate } = decodeChannels(fileBytes);
const stereo = channels.length > 2 ? downmix(channels, 1) : channels;
python
from libsonare import decode_channels, downmix, ChannelLayout

channels, sample_rate = decode_channels(file_bytes)   # (channel_count, frames), float32
stereo = downmix(channels, ChannelLayout.STEREO) if channels.shape[0] > 2 else channels

シグネチャは JavaScript/TypeScript Audio・ストリーミング API、C と C++ の形は C++ API を参照してください。ミキサーグラフ自身の狭める規則は サラウンドグループバスとワイドメーター にあります。

再生レンダラー自身の変換表を、入力と出力先ごとに示します。「バイノーラル化」は、スピーカーへの信号を測定した頭部伝達関数(HRTF)でフィルタリングし、音がヘッドホンの外側にあるように聞かせることです。

入力 \ 出力先ステレオスピーカー5.1 スピーカー7.1 スピーカーヘッドホン
モノラルL/R、-3 dBセンターのみセンターのみセンター(バイノーラル化)
ステレオ素通しアップミックス(upmix.enabled: false なら L/R のみ)アップミックス(または L/R のみ)アップミックス後にバイノーラル化(または ±30° の L/R のみ)
5.1BS.775 ダウンミックス + LFE 折り込み素通しL/R/C/LFE はそのまま。Ls/Rs は Lss/Rss へ移動し、7.1 自身の Ls/Rs は無音5.1(バイノーラル化)
7.1BS.775 ダウンミックス + LFE 折り込みBS.775 ダウンミックス(LFE はそのまま)素通し7.1(バイノーラル化)

広げる方向(アップミックス) ​

ミキサーと再生レンダラーでは、チャンネル構成を広げる方法が異なります。ミキサーは狭いバスの信号を広いバスの同じインデックスのチャンネルへ加算し、追加のチャンネルは無音のままにします。再生レンダラーはスピーカーの配置に基づいて、広い構成へアンビエンスを割り当てます。

変換ミキサー再生レンダラー
5.1 → 7.1Ls/Rs はインデックス 4・5 に残り、インデックス 6・7 の側方チャンネルは無音Ls/Rs はインデックス 6・7 の側方チャンネルへ移り、インデックス 4・5 の後方チャンネルは無音
ステレオ → 7.1フロントペアのみ。ほかは無音後方・側方の両方にアンビエンスを生成し、後方ペアには逆相成分も加える

サラウンドパンナーは両モジュールとも 配置図 の角度を使いますが、パンしたソースの配置にだけ使われ、バスをどう広げるかは決めません。フルパンでは、パンナーは反対側のチャンネルを完全に無音にします。

再生レンダラーは 5.1 の入力から後方ペアを合成することはせず(後方チャンネルの人工的な生成は行いません)、高さを加えた広いフォーマットへのアップミックスも行いません。詳しくは 再生レンダラー § 非対象 を参照してください。

関連ページ ​