u-he UHM言語 学習 14 Waveform Blend Modes
ブレンドの種類が9種あるので、それぞれを確認。 1フレームだけのサイン波に対してコサイン波をブレンド(演算)する。 この手の波形の演算は数式処理ソフトMaximaを使うと視覚的に表現できるので、そのグラフも載せておく。
replace
単純な置き換えなので、サイン波がコサイン波に置き換わる。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=replace
Wave "aux1"
add
足し算。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=add
Wave "aux1"
sub
引き算。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=sub
Wave "aux1"
multiply
掛け算。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=multiply
Wave "aux1"
multiplyAbs
かける側(cos)を絶対値にして掛け算。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=multiplyAbs
Wave "aux1"
divide
本来の割り算であれば、sin/cos=tan、下のmaximaのグラフのようにタンジェントカーブになって無限大が出てしまう。 そこで何かをやっている。無限大の位置は0となっている。プラスマイナスは絶対値に変換されているので、こんな感じになっているようだ。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=divide
Wave "aux1"
無理やりmaximaで書くと下のようになる。マイナス無限大になっているけど、これを最大値1にして、最小値を0にした感じだろうか。
divideAbs
こちらも同じく謎計算。ほぼ矩形波になった。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=divideAbs
Wave "aux1"
min
サイン波とコサイン波の両方の値を見て、絶対値で小さい方の値を取っている。ただし符号は変化させない。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=min
Wave "aux1"
max
サイン波とコサイン波の両方の値を見て、絶対値で大きい方の値を取っている。ただし符号は変化させない。
NumFrames = 1
Wave target=aux1 "sin(2 * pi * phase )"
Wave "cos(2 * pi * phase )"
Move target=aux1 start=0 end=0 to=0 blend=max
Wave "aux1"