見出し画像

LFオシレーター

SawとLFSawの違いについて書きます。

s.boot;

{Saw.ar(220, 0.3)!2}.play;

{LFSaw.ar(220, 0, 0.3)!2}.play;

//音を止めるにはコマンド+ピリオドです。

SawとLFSsawのふたつを交互に鳴らして聴き比べてみると、音質に違いがあるように感じません。
両方とも音量を0.3にしていますが、元々の振幅に差があるため音量差を感じる程度です。

Saw

{Saw.ar(220)}.plot;


LFSaw

{LFSaw.ar(220)}.plot;


ヘルプを見てみると実際にはSawの方はバンドリミテッドと書かれていて、高周波数でのエイリアスノイズを抑制するために周波数帯域を制限しているようです。
下記のコードを実行してマウスを画面右側に寄せていくとよくわかります。
(実行するときはマウス位置を画面の左寄りに置いておくことをお勧めします。右寄りに置いておくといきなり高周波が鳴ります。)

{Saw.ar(MouseX.kr(220, 10000), 0.3)!2}.play;
{LFSaw.ar(MouseX.kr(220, 10000), 0, 0.3)!2}.play;

実行中にマウスを徐々に画面右寄りに移動させると・・・
LFSawの方が高域が出ていますがその代わりにチリチリとしたエイリアスノイズが加わってきます。Sawはチリチリノイズが出ない代わりに高域の音量が少しだけ小さくなります。

音源として使う時には、高域云々についてはあまり気にせず(僕の場合は)聴き比べてみていい感じの方を使います。

ただ、両者には機能的にひとつだけ違いがあり、LFSawは開始位相を設定できるパラメータ"iphase"を持っています。
iphaseはノコギリ波をモジュレータとして使うときに便利に使えます。

パンニング例1.
iphaseをデフォルトの0にしておくとモジュレータの値が0から始まるので、出音のパンニングが中央から開始されます。

(
{
	var sig, mod, vol=0.3, iphs=0;
	mod = LFSaw.kr(0.5, iphs);
	sig = Pulse.ar(220);
	sig = Pan2.ar(sig, mod) * vol;
}.play;
)


開始位相(iphase)が0


(LFSawのiphaseは0〜2。0を設定すると周期の頭である0から開始する。)


パンニング例2.
iphaseを1に設定するとモジュレータの値が-1から始まるので、出音のパンニングが左から開始されます。

(
{
	var sig, mod, vol=0.3, iphs=1;
	mod = LFSaw.kr(0.5, iphs);
	sig = Pulse.ar(220);
	sig = Pan2.ar(sig, mod) * vol;
}.play;
)


開始位相(iphase)が1
(LFSawのiphaseは0〜2なので1を設定すると半分周期時点の-1から開始になる。)


もしノコギリ波の傾斜を逆にしたいときは『モジュレーションの回」でも書いた通り、プラスとマイナスを逆にするメソッドnegを使います。

{LFSaw.ar(220)}.plot;
{LFSaw.ar(220).neg}.plot;

LFSaw.ar(220)   と    LFSaw.ar(220).neg


もちろんモジュレータとしてパンニング以外にもいろいろと使えます。


また、音源として使うときにはこのiphaseに左右違う数値を与えることで広がりを与えることもできます。(デチューンさせて作る広がりとはキャラクターが違い、結構使えます。)

// 聴き比べ

// 右チャンネルだけ位相ずらし
{LFSaw.ar(440, [0, 0.5], 0.3)}.play;

// 左右チャンネルとも位相ずらし無し
{LFSaw.ar(440, [0, 0], 0.3)}.play;



位相をずらしたものをミックスしてしまう、というのも音作りの手法としてアリです。

{Mix(LFSaw.ar(440, [0, 0.5], 0.3))!2}.play;
Mix(LFSaw.ar(440, [0, 0.5], 0.3))



LFPulse


このSawとLFSawの違いは、PulseとLFPulseにもあてはまります。
Pulseはエイリアスノイズ軽減ため周波数帯域が制限されていて、LFPulseは制限されていません。

SuperColliderにはLFという文字がついているオシレーター(ジェネレーター)UGenが他にもあり、これらは共通してiphaseのパラメータを持っています。

LFCub
LFGauss
LFPar
LFPulse
LFSaw
LFTri

上記のなかでLFPulseとLFGaussについてはデフォルトでは振幅が0〜1です。(他は-1から1)
LFGaussは計算式でジェネレートされるみたいなので特殊なものだとして、LFPulseがなぜ0〜1なのかは謎です。

addパラメータを使えば0を中心にできるので、使用するうえで困ることはありません。
{LFPulse.ar(220, add:-0.5)}.plot;

0を中心に振幅が-0.5〜+0.5


上記にリストアップしていませんが、LFNoise0などのノイズ系はiphaseパラメータは持っていません。


<目次へ>
https://note.com/sc3/n/nb08177c4c011


いいなと思ったら応援しよう!