ステレオ、リミッター、ラウドネスコントロール
マスタリングチェーンの最終段は、マスターの広がり・ピーク安全性・レンダリング後のラウドネスを決めるブロックです。
ここの各コントロールはまとめて判断します。ステレオ幅を広げるとピークの振る舞いが変わることがあり、ラウドネス目標を上げればリミッターは深く働きます。シーリングを下げればコーデック変換には安全になりますが、稼げるラウドネスは減ります。
ステレオ幅
ステレオ幅は、ミッド/サイド(M/S)で考えると理解しやすくなります。左右のペアは、別の 2 つの信号に書き換えられます。ミッドは M = (L + R) / 2 で、左右に共通する成分(センターにあるボーカル、キック、ベース)です。サイドは S = (L − R) / 2 で、左右で異なる成分(広がり)です。L = M + S、R = M − S で左右に戻せるので、何も失われません。
ステレオ幅はサイド信号の大きさを変えます。1 より大きいとサイドが大きくなってイメージが広がり、1 より小さいとサイドが小さくなって狭まり、0 ではミッドだけ、つまりモノラルになります。広げると大きく感じられることはありますが、モノラル互換性が弱まったり、低域が不安定になったりします。モノラルに折りたたむとサイドは完全に打ち消されるので、幅で足した分はそのままモノラルの聴き手から失われます。
ラウドネスマッチした A/B と相関値を併用しながら判断してください。スピーチ素材では控えめが基本です。
ステレオ幅を動かすと全体のレベルも動きます。幅の変更に合わせてかかるエネルギー補正は信号に依存しない固定ゲインなので、Mid と Side のエネルギーが等しい素材でしか相殺されません。通常のミックスでは Side は Mid よりはるかに小さいため、レベルは保たれていると考えず、ステレオ幅を動かしたらラウドネスを測り直してください。
戻すべきサインは、モノラルに切り替えたときにボーカル・キック・ベース・スネアの芯が弱くなることです。ステレオでは派手に聞こえても、センターが痩せる設定はマスタリングの改善ではなく単なるバランス移動です。
ステレオ幅は必ずモノラルで確認する
幅を決める前にモノラルへ折りたたんでください。センターの芯が痩せるなら幅が広すぎます。リミッターは最後の安全装置であって、密度を作る道具ではありません。常に深く働いているなら、シーリングを上げる前に、前段の低域・コンプレッサー・インプットゲインを直します。
True Peak リミッター
True Peak リミッターは、波形を再構成したときにサンプル間に現れるピークも含めて、ファイル自体のピークをシーリングの下に抑えます。その後に起きることは見えません。非可逆エンコーダー(AAC、MP3、Opus)は波形を変えるので、リミッターを通った後のファイルでもピークが再び上がることがあります。それを吸収するのが、シーリングと 0 dBTP のあいだの余裕です。リミッターのシーリングは最終的な安全限界で、ストリーミング系の納品では -1 dBTP 前後がよく使われます。dBTP は decibels true peak の略で、サンプル点そのものではなくサンプル間まで含めて測ったピークを指します。
リミッターが常に深く働いている場合は、シーリングだけを緩める前に、前段の低域バランス・コンプレッサー・インプットゲインを見直します。リミッターは最後の安全装置であり、ミックス全体の密度を作る主役ではありません。
ルックアヘッドと True Peak 安全性
ルックアヘッドは、速いピークが出力に到達する前にリミッターが先読みするための時間です。リミッターは遅らせていない信号を測りながら、音声そのものをルックアヘッドの時間だけ遅らせます。そのため、ピークが届く時点ですでにゲインが下がり始めていて、1 サンプルで急に押さえ込まずに済みます。この遅れはレイテンシにもなります。maximizer.truePeakLimiter の既定はルックアヘッド 1 ms、リリース 50 ms、4 倍オーバーサンプリングで、48 kHz では 129 サンプルのレイテンシを報告します。これはルックアヘッドに、オーバーサンプリングのフィルターと出力のピークガードによる遅れを足したものです。たいていの素材では 1 ms 前後で足ります。短すぎると鋭いピークが歪み、長すぎるとレイテンシが増えてアタック感が柔らかくなります。
ラウドネス目標
ラウドネス目標は、レンダリング後ファイルの Integrated LUFS(Loudness Units relative to Full Scale)の目標値です。Integrated は曲全体にわたるゲート付きの平均で、無音や極端に静かな部分は平均に入る前に除外されます。マスタリングデモでは -14 LUFS、-16 LUFS といった公開先を想定した値と、任意のカスタム値が選べます。
下のメーターは、再生中のクリップから Integrated LUFS、True Peak、ラウドネスレンジを読み取ります。
ラウドネス段は、ピークがシーリングに触れた時点で止まるゲイントリムではありません。段入力を計測し、固定ゲイン(target − current。候補ゲインで測り直して解きます。マスタリングプロセッサ を参照)を算出して適用したうえで、シーリングに合わせた True Peak リミッターを通します。仕上がったミックスの大半はピークノーマライズ済みで、シーリングまでの余裕はほぼ 0 dB です。その余裕の範囲内でしかゲインを動かさない段では、目標がどれだけ離れていてもラウドネスは一切動きません。目標に到達させているのはリミッターです。固定ゲインはシーリングを超える方向に信号を押し上げることを許され、リミッターがそれをシーリングの下へ戻します。
maxLimiterGainReductionDb は、この押し上げ幅の上限です。単位は dB の深さで、既定値は 12、有限かつ 0 以上でなければなりません。固定ゲインがシーリングまでのピーク余裕を超えられるのは最大でこの値までなので、段が目標に向かう途中でリミッターに求めるリダクションはおよそ 12 dB を超えません。上限が効くのはあくまで target − current までのゲインに対してで、目標より大きなマスターを作ることはできません。この値によって、ピークがどの程度立った入力まで段がノーマライズを試みるかが決まります。0 にすると厳密な余裕クランプに戻り、ピークノーマライズ済みの入力はどんな目標を与えても入力時のラウドネスのままになります。
上限に達した場合、呼び出し側が受け取るのは目標ではありません。固定ゲインは 余裕 + maxLimiterGainReductionDb で止まり、シーリングはどの設定でも守られ、レンダリング後ファイルは要求した LUFS より小さく仕上がります。結果にはそのことが明示されます。loudnessTargetLimited が true になり、outputLufs は実際に到達したラウドネス、appliedGainDb はリミッターのリダクションを含まない固定ゲインだけを示します。上限の内側でも段は反復しません。1 パスでゲインを算出し、リミッターがその一部を削り、その不足分も同じ形で報告されます。段のパラメータ一覧は マスタリングプロセッサ にあります。
出力レンダー
ブラウザデモはローカルで処理し、ステレオ WAV(16 ビット PCM、24 ビット PCM、32 ビット float。ディザーは整数形式のみ)と JSON レポートを書き出します。音源はアップロードされません。
実装メモ
libsonare のステレオイメージャーは、ステレオ幅で説明したミッド/サイドの形で動作します。サイド信号に幅の値を掛け、左右に戻します。デコリレーションはその上に載るオプションとして用意されています。
エネルギー補正を有効にすると、Mid と Side の両方に sqrt(2 / (1 + width^2)) のゲインがかかります。このゲインは幅の設定値だけから決まり、そのときのサンプル値からは導かれません。処理が線形に保たれ、相互変調成分を生まないのはこのためですが、全体のエネルギーが一定に保たれるのは Mid と Side のパワーが等しいという前提のもとだけです。実際の楽曲素材はその前提を満たさないので、広げれば全体のレベルはわずかに下がり、狭めれば上がります。
True Peak リミッターは、ルックアヘッド・リンクピーク検出・オーバーサンプリングされた True Peak 経路を併用します。ラウドネス段は入力を計測し、LUFS 目標に到達するためのゲインを計算したうえで、そのゲインをシーリングまでの余裕に maxLimiterGainReductionDb を足した値で制限します。その後に通す True Peak リミッターは、単体の maximizer.loudnessOptimize プロセッサとチェーン内の loudness 段が共有する 1 つの設定から組み立てられるため、どのラウドネス経路でもリミッティングは同じです。リミッター自身のリダクションは loudness.optimize 段のゲインリダクションとして、appliedGainDb とは別に報告されます。
マスタリングデモでは 4 倍オーバーサンプリングを既定にしています。実行された段名は JSON レポートにも出力されるため、最終チェーンの監査に利用できます。シーリングと LUFS 目標がぶつかった場合は、ピーク安全性が優先される設計です。「LUFS は届いていないが True Peak には到達した」という状態は、レポートの applied gain と output LUFS から判定でき、チェーンの結果では loudnessTargetLimited として直接フラグが立ちます。
ストリーミングチェーンはファイル全体を先読みできないため、ラウドネスのゲインを数値として受け取ります。streamingLoudnessGain/streamingLoudnessGainStereo(Python では streaming_loudness_gain/streaming_loudness_gain_stereo)は、オフラインのチェーンをラウドネス段まで実行し、シーリングによる制限を含めて適用されるゲインと、その制限に使われたTrue Peakを返します。無音のときの値は 0 dB です。両方の値を StreamingMasteringChain に loudnessStaticGainDb と loudnessStaticGainPeakDb として渡します。