2016年5月21日土曜日

1.6 Stereo Panners

ステレオのPannner



今までみた Pan はモノラルでの入力に、
補正を加えて2つのチャンネルに出力していました。
それらを単一の入力であることから、

"Mono Panner" と呼びます。

では、どのように、2チャンネルの入力を、
2チャンネルで出力していけばよいでしょうか。

まず考え付くのは、
Pan の方向を完全に一方に振り向けた際は、
複数の入力を合わせて一方のチャンネルに送り、
もう一方を無音にしておくこと、

そして、Pan が中央にあるときには、
割り当てを変えずに、それぞれの出力にそのまま送ること、です。

これらの状態を、"Condition(1b)"と呼びましょう。

if c == 0: # Pan が左chのみ
    (S'(c))(l, r) = ( l + r, 0)

elif c ==1: # Pan が右chのみ
    (S'(c))(l, r) = ( 0, l + r)

elif c ==0.5: # Pan が中央
    (S'(c))(l, r) = (l, r)

S`(c) は新しいPanのスケーリング関数です。

変数cはPanの位置を0から1の間で表し、
(l, r) は入力信号の変数になります。
これらは、S'(c)関数の引数です。

最後に、c が間の位置になるときに平方根を用いて、出力値を調整します。
これは当然、condition(2) のためです。

出力値とPanの位置をグラフにしたものがFig.1.11です。
このグラフをみればよくわかるでしょう。

S'(c)(l,r)は、4つのグループに分けられます。


Fig.1.11
"Sterep input Pannner" にて、出力値とPanの位置の関係をグラフにしたものです。

L[x]とR[x]の線は、
左右それぞれの入力が、
左右それぞれの出力へ割り振られる値を表しています。

どちらのチャンネルから入力されているかは、
[L]と[R]という2つの引数で確認してください。

例えば、L[R]は、右chからの入力が左chに送られている量を表しています。

そしてこれは、変数cの関数になるので、
この場合だと、L[R](c)と表せます。

最終的には、
S'(c, l, r) = [...] = (OutL, OutR)
と表せ、(l, r) はそれぞれ、左右の入力値になり、
(OutL, OutR)は、出力値となります。

-----


グラフをみると、 それぞれの状態が、
"condition(1b)" であることがわかります。

なぜなら、 c=0であるとき、
つまり、Panが左チャンネルのみに割り当てられている時、
(l, r)を入力値とすると、出力値は、


Out L =  L[L] (c=0)*l + L[R](c=0)*r
          =  1*l + 1*r
          =  l + r

Out R = R[L](c=0) * l + R[R] (c=0) * r
           = 0 * l + 0 * r
           = 0

となります。

つまり、
(Out L, Out R) = ( l + r,  0)

というわけです。

同じようにすると、グラフが、

S' (c=1, l, r) = ( 0, l + r)

S' ( c=0.5, l, r) = (l, r)

となっていることがわかります。


では、次の4つの関数をみてください。


                 def
L[L](c) = min(1, 22c)
                 def
L[R](c) = max(0, 12c)
                 def
R[L](c) = max(0, 2c1)
                 def
R[R](c) = √min(1, 2c)



これらの関数の核になる部分は、
√c の部分で、
この√c が様々な形に変わって、
4つの関数に適した形に変化したものです。

min や max 関数は、
[0, 1]の範囲内に値を落とし込むのに用いる関数です。
また、負の数になるのを防いでいます。

これら4つの関数の強度の総数を足し合わせることで、
これらの関数が condition(2) であることを確かめられます。


---

より総合的なやり方として、
S'(c)関数を2x2の行列に書き換えることができ、
それをAと呼ぶと、
(l, r)の入力を積の配列に表すことができます。







それでは、これらの(2つの)関数をFAUSTで用いて、
2種類の"Angle-Interpolated Stereo Panner"と、
"Output-Interpolated panner"を作ってみましょう。

0 件のコメント:

コメントを投稿