フィルター12種類(LPF)聴き比べ
フィルターを聴き比べました。
こちらで音を聴けます。
カットオフ周波数を600Hzに固定した状態(レゾナンス大と小)と
10Hz-5000Hzにスイープさせた状態(レゾナンス大と小)を
続けて再生しています。
レゾナンスのパラメータは0.05と0.95を設定して比較しましたが、フィルターによって
0.05でレゾナンス小
0.95でレゾナンス大
のものもあれば、その逆
0.05でレゾナンス大
0.95でレゾナンス小
のものもありました。
あと、音量のバラつきが結構ありましたが、同じフィルターなのにレゾナンス大小、またはスイープするしない、で音量差があったものについては音量差を整えずそのままにしています。
ですが違うフィルター間での音量差がよほど気になったもの(大きすぎor小さすぎ)については、全体の音量を整える意味でmulパラメータをいじりました。(それでも結構バラつきがあります。)
さてそれぞれのキャクターですが、様々あって楽しいです。
今回これをやって発見もあり、よかったと思いました。
コードはこちらです。
// filter聴き比べ
(
~cof = Bus.control(s, 1);
SynthDef(\cof, {
var cutoff;
cutoff = SinOsc.kr(1/8*(110/60)).range(10, 5000);
Out.kr(~cof, cutoff);
}).play;
)
(
SynthDef(\filters,{
arg freq=220, gate=1, amp=0.2, ffreq=6000, rq=0.1, type=0;
var sig, env, cof=600;
env = EnvGen.kr(Env.asr(0.001, 1.0, 0.02), gate, doneAction:2);
cof = In.kr(~cof);
sig = VarSaw.ar(freq, 0, 1);
sig = Select.ar(type,
[
LPF.ar(sig, 600),//0
LPF.ar(sig, cof),//1
RLPF.ar(sig, 600, rq, 0.5),//2
RLPF.ar(sig, cof, rq, 0.5),//3
RLPFD.ar(sig, 600, rq, mul:2),//4
RLPFD.ar(sig, cof, rq, mul:2),//5
BMoog.ar(sig, 600, rq),//6
BMoog.ar(sig, cof, rq),//7
DFM1.ar(sig, 600, rq),//8
DFM1.ar(sig, cof, rq),//9
IIRFilter.ar(sig, 600, rq, 0.5),//10
IIRFilter.ar(sig, cof, rq, 0.5),//11
MoogFF.ar(sig, 600, rq*2),//12
MoogFF.ar(sig, cof, rq*2),//13
MoogLadder.ar(sig, 600, rq, 2),//14
MoogLadder.ar(sig, cof, rq, 2),//15
MoogVCF.ar(sig, 600, rq),//16
MoogVCF.ar(sig, cof, rq),//17
SVF.ar(sig, 600, rq, mul:0.3),//18
SVF.ar(sig, cof, rq, mul:0.3),//19
BLowPass.ar(sig, 600, rq, 0.4),//20
BLowPass.ar(sig, cof, rq, 0.4),//21
BLowPass4.ar(sig, 600, rq, 0.4),//22
BLowPass4.ar(sig, cof, rq, 0.4)//23
]);
Out.ar(0, sig!2 * env * amp);
}).add;
)
(
Pbind(
\instrument, \filters,
\midinote, Pseq([
48, 36, 55, 77, 46, 36, 72, 46,
55, 67, 36, 55, 31, 75, 43, 82,
36, 84, 55, 77, 46, 36, 72, 46,
55, 67, 36, 55, 31, 67, 43, 31,
]-5, inf),
\dur, 0.25,
\amp, 0.3,
\sustain, 0.24,
\type, Pseq([
Pseq([0],32),
Pseq([1],32),
Pseq([2],64),
Pseq([3],64),
Pseq([4],64),
Pseq([5],64),
Pseq([6],64),
Pseq([7],64),
Pseq([8],64),
Pseq([9],64),
Pseq([10],64),
Pseq([11],64),
Pseq([12],64),
Pseq([13],64),
Pseq([14],64),
Pseq([15],64),
Pseq([16],64),
Pseq([17],64),
Pseq([18],64),
Pseq([19],64),
Pseq([20],64),
Pseq([21],64),
Pseq([22],64),
Pseq([23],64),
], 1).trace,
\rq, Pseq([Pseq([0.05],32),Pseq([0.95],32)],inf).trace
).play(TempoClock(110/60));
)
FreqScope.new;
コードだと600Hzとか10Hz-5000Hzの部分を変えて実行できますし、
フィルターによってはレゾナンス以外のパラメータを持っていたりするので、そういうパラメータを追加して聴き比べるのも楽しいと思います。
(本当はもっと効率的な書き方があるのだと思うのですが(特にPbindのところ)・・・今回はこれを再生して動画にしました。)
Selectについて
フィルターの切り替えにSelectを使っています。
Select.ar(ナンバー, [信号1, 信号2, 信号3・・・])
というふうに書くことで、受け取るナンバーに応じて信号1,2,3・・・を切り替えて再生することができます。
添付した上記コードの場合、typeという変数にarg経由でPbindからナンバーを受け取っています。
ナンバーは0から始まる整数です。(上記コードでは0から23まで。)
Pbindから受け取る他に、例えば下記のような方法で整数を渡してあげる方法もあります。
(
SynthDef(\selectTest,{
var sig, num, amp=0.3;
num = MouseY.kr(0, 3);
sig = Select.ar(num,
[
Saw.ar(220),
Pulse.ar(220),
BrownNoise.ar
]);
Out.ar(0, sig!2 * amp);
}).play;
)
マウスを動かすと、音色が変わります。
マウスが画面の下の方にあるときはSaw
マウスが画面の中央あたりにあるときはPulse
マウスが画面の上の方にあるときはBrownNoise
が鳴るはずです。
コードのnumに.pollをつけてみると何が起きているか(post windowで)わかりやすいです。
(
SynthDef(\selectTest,{
var sig, num, amp=0.3;
num = MouseY.kr(0, 3);
sig = Select.ar(num.poll,
[
Saw.ar(220),
Pulse.ar(220),
BrownNoise.ar
]);
Out.ar(0, sig!2 * amp);
}).play;
)
numが0のときはSaw
numが1のときはときはPulse
numが2のときはときはBrownNoise
(小数点以下は無視)
num = MouseY.kr(0, 3);
の部分を、
num = SinOsc.kr(1).range(0, 3);
や
num = LFNoise0.kr(10).range(0, 3);
などに置き換えても面白い効果が得られます。
Selectは受けるナンバーによって音を切り替えられはするものの、内部的には3つ全部鳴らしているのでしょうか。フィルター聴き比べのコードのように24個を鳴らし分ける設定だとかなり重くてCPU負荷が高そうです。
<目次へ>
https://note.com/sc3/n/nb08177c4c011