チャンネルストリップ
チャンネルストリップは、ミキサーにおける 1 トラックのレーンです。ボーカル、ベース、ドラムバスのような 1 つのパートが、マスターへ届く前に通る縦 1 列のコントロール群です。
重要なのは処理の順序です。順序を知っていれば、各コントロールの効き方をかなり正確に予測できます。
このページは ミキシングの基礎 より一段深く、libsonare の ChannelStrip に沿って解説します。
固定された信号順
libsonare はストリップの各ブロックを 1 つの固定順で処理します。上から順に読めば、「なぜこのコントロールはこう振る舞ったのか」という疑問の多くに答えが出ます。
- 入力トリム:他のどの処理よりも前、入口で行う純粋なレベル調整。
- 極性反転(L/R):波形を反転し、マイクやチャンネル間の位相を直すのに使います。
- チャンネルディレイ:他トラックに対して時間整合します。指定は整数サンプル単位です(
setChannelDelaySamples、シーンのフィールドはchannelDelaySamples)。ミリ秒指定の入口はないため、換算は自分で行ってください。 - EQ:トーン整形。常にフェーダーの前で動きます(後述)。
- プリフェーダーインサート:フェーダーの前で動く直列プロセッサ。
- フェーダー(+ VCA オフセット):他トラックとのバランスを取るコントロール。
- パン:選んだパンモードとパンロー(パンローは、中央の音量をサイドに対してどれだけにするかを決めます)でトラックをステレオフィールドに配置します。
- ステレオ幅:ステレオイメージを狭めたり広げたりします。
- ポストフェーダーインサート:フェーダーの後の直列プロセッサ。
- メーター/ゴニオメーターのタップ:処理ではなく計測です。ゴニオメーターは、ステレオイメージの広がりを点の散らばりで見せる表示です。
なぜ順序が重要か
順序は見た目の問題ではありません。どこに置くかで、各プロセッサに入ってくる信号が変わります。
| 位置 | 起きること |
|---|---|
| フェーダー前のコンプレッサー | 生のレベルに反応し、フェーダーを動かしても効き方は変わりにくい |
| フェーダー後のコンプレッサー | フェーダーで作ったバランス操作にも反応する |
| プリフェーダーセンド | フェーダー前をタップするため、ミックスバランスから独立する |
| ポストフェーダーセンド | フェーダーに追従するため、音量を動かしてもエフェクト比率が保たれる |
タップ位置の取り違えは、最も多いルーティングミスの 1 つです。
EQ の位置
EQ はプリフェーダーで動くので、その後のインサートとフェーダーが作用するトーンを整えます。C++ の ChannelStrip は set_eq_position でポストフェーダーへ移せますが、シーン JSON と各言語のバインディングは常にプリフェーダーです。シーンでは、EQ はストリップの eq フィールドです(ミキシングシーン JSONを参照)。
キューモニタリング: PFL と AFL
ほかの人が聴いているミックスを乱さずに、あるトラックだけを単独で聴きたいことがあります。本番前にボーカルのブレスノイズを確認する、会場がメイン出力を聴いている間に別のトラックを試聴する、といった場面です。これがキューモニタリングで、通常のミックスの代わりではなく、それと並行してヘッドホンやモニターバスへ送る別系統のタップです。
ただしキューが分かれたままになるのは、そう指定したときだけです。リアルタイムエンジンの通常の process(...) はモニターバスをメイン出力に足し込むため、キューしたレーンはメイン出力で 2 回重なって聞こえ、PFL にしたミュート中のレーンも聞こえてしまいます。プログラムとキューを 2 つの出力として受け取るには processWithMonitor(...) を使うか、worklet ノードを cueOutput: true で作成してください。オフラインレンダリング、バウンス、フリーズにキューが含まれることはありません。トラックモニタータップ を参照してください。
リアルタイムエンジンのトラックレーンには、ゲインの層が 2 つあります。最初にレーン自身のストリップがあり、このページで説明した全段(独自のトリム、フェーダー、パン)を通ります。その後にレーンミキサーが、レーンフェーダー、ミュート/ソロのゲート、レーンパンをかけます。キューのタップは、この 2 つの層の間と後ろにあります。
PFL(プリフェーダーリッスン)は、レーンストリップ(ストリップ自身のフェーダーを含む)の後、レーンフェーダー、ゲート、パンより前で信号を取ります。そのためトラックがミュートされていても、ゲートで閉じていても、パンで振り切られていても PFL のキューは聞こえ続け、フェーダー位置に関わらずソースの生の内容を確認するのに向きます。AFL(アフターフェーダーリッスン)はそれらの段の後、サラウンドパスまで含めた地点で信号を取るため、トラックが実際にミックスへ送っているのと同じレベルと定位で聞こえます。
libsonare がキュータップをどうスケジュールするか
キューモニタリングはキュー投入可能なリアルタイムコマンドです。RealtimeEngine の setTrackMonitorMode(laneIndex, mode, renderFrame?)(EngineTrackMonitorMode = 'off' | 'pfl' | 'afl')で、C ABI では sonare_engine_set_track_monitor_mode(SonareEngineTrackMonitorMode)に対応し、Python では set_track_monitor_mode として公開されます。他のエンジンコマンドと同様に WASM の AudioWorklet 経路からも使え、process(...) はモニターバスをエンジンの通常出力に折り込み、processWithMonitor(...) はプログラム出力を変えずにモニターバスを別の出力として返します。
libsonare がストリップをどうモデル化するか
ストリップは ChannelStripConfig で構成される ChannelStrip です。ブロックは次の順に処理されます。
トリム -> 極性 -> チャンネルディレイ -> EQ -> プリフェーダー InsertSlot
-> VCA オフセット付きフェーダー -> PannerProcessor
-> StereoWidthProcessor -> ポストフェーダーインサートEqPosition(C++ のみ)で EQ のプリ/ポストを選べます。TapPoint はプリ/ポストフェーダーのセンドと GoniometerBuffer/MeterProcessor が信号を読む位置を示します。ゲインとパンの変更はパラメータスムージングされ、経路はリアルタイム安全(事前確保、デノーマル対策)なので、同じストリップがオフラインでも AudioWorklet 内でも動きます。