soundstage_extender

ノード

ミックスで決まった定位を起点に、ステレオ音像を拡張します。広がった音はさらに外へ、端の音はスピーカーの外まで出し、センターの音と残響はそのまま残します。

パラメータ

欄何を決めるか範囲必須
amountスピーカーの内側での拡張量(0.0 =拡張しない、1.0 =最大)。センターと片側に振り切った位置は動かない。0 〜 1任意
outside_deg端の音をスピーカーの外へ押し出す角度[度](0 =スピーカーの外へは出さない)。0 〜 60任意
push_from外へ押し出し始める位置のしきい値。スピーカー角に対する割合(小さいほど多くの音が外へ出る)。0.1 〜 0.9任意
speaker_angle_deg聴き手の正面とスピーカーの挟み角[度](正三角形の配置なら30度)。10 〜 60任意
xtc_betaクロストークキャンセルの正則化パラメータ。大きいほど穏やか(送り信号の持ち上げが小さい)で、外への広がりも控えめになる。0.01 〜 1任意
{
  "amount": 1,
  "outside_deg": 45,
  "speaker_angle_deg": 30,
  "type": "soundstage_extender"
}

計算

STFTのマスごとに(窓は48kHzの1024サンプルと同じ長さ、ホップは1/4):

1. L/Rの共分散を約30msで平滑する
2. u = その主固有ベクトル = [cos ψ, sin ψ · e^(jφ)]
   c = (λ1 - λ2) / (λ1 + λ2)    そのマスが1つの直接音である度合い
3. p = uᴴ x (直接音)         a = x - u · p (残響)
4. ψから出すパン位置を amount で拡張し、
   push_from から端までを outside_deg だけ外へ押し出す
   動かす量は c に比例させる
5. スピーカーの内側:新しい角度で p をパンし直す
   外側:送り = (Hᴴ H + β I)⁻¹ Hᴴ · d(θ)
   H = スピーカーから耳、d = θにある音源が両耳に作る信号(球頭モデル)
6. 出力 = 置き直した p + a
約200Hzより下と20kHzより上は動かしません。スピーカーの外への押し出しは、球頭モデル(Brown & Duda)が当てになる約200Hz〜9kHzで働きます。amount と outside_deg を0にすると、出力は窓1つ分遅れた入力と一致します。

使うときの注意

  • すでに広がっている音だけを動かします。

    センターの音と残響には触れません。半分ほど振られた音はさらに外へ、端の音はスピーカーの外へ動くので、ミックスの左右の並び順は変わりません。

  • 外への定位にはスイートスポットが必要です。

    左右のスピーカーの真ん中に頭があり、スピーカーが speaker_angle_deg の位置にある前提で計算しています。数cmのずれなら保たれますが、10cmほどずれると音像はスピーカーの内側へ戻ります。ヘッドホンでは効きません。

  • 窓1つ分の遅延が加わります。

    約21ms(44.1kHz系の素材では約23ms)です。再生中にこのノードを足したり外したりすると、その長さだけ音が途切れます。値を変えるだけなら途切れません。

  • 重なっている音は動きが小さくなります。

    同じ瞬間に同じ周波数を2つの音が分け合うと、そのマスは2つの間を向くため、どちらも目標まで動きません。外れるのは常に控えめな側で、指定より外へ押し出されることはありません。

  • crosstalk_canceller とは併用しないでください。

    どちらもクロストークを打ち消す処理です。重ねると打ち消しが二重に掛かります。