10.

減算合成とフィルターの使用

減算合成の基本的な考え方はコーヒーをいれることに似ています。つまり、最終的に必要ない成分をフィルターを通じて取り除くということです。

////////////////////////////////////////////////////////////////////////////////////////////////////

次の様に.dumpClassSubtreeメッセージをFilterクラスに送ることで、SuperCollider 3のほとんど全てのフィルターのリストが得られます。

Filter.dumpClassSubtree;

これがそのリストです。

Filter

[

DetectSilence

Formlet

Ringz

SOS

FOS

Slew

Median

LPZ2

[ BRZ2 BPZ2 HPZ2 ]

Slope

LPZ1

[ HPZ1 ]

MidEQ

BPF

[ BRF ]

LPF

[ HPF ]

RLPF

[ RHPF ]

LeakDC

Lag

[ Ramp Lag3 Lag2 ]

Decay2

Decay

Integrator

TwoPole

[ APF TwoZero ]

OnePole

[ OneZero ]

Resonz

]

SuperColliderのヘルプ・システムでHelp/UGens/Filtersを調べることでもフィルターのヘルプ・ファイルをみることができます。ヘルプ・ファイルの全てにはそれぞれのフィルターがどのように動作するのかを示す素晴らしい例があります。

////////////////////////////////////////////////////////////////////////////////////////////////////

ヒント：次の様にObjectクラスに.dumpClassSubtreeメッセージを送ることで

Object.dumpClassSubtree;

SuperColliderのそれぞれの単独のクラスのリストが表示されます。

////////////////////////////////////////////////////////////////////////////////////////////////////

LPF（ローパス・フィルター）を使って入力ソースから高い周波数成分を減算します。

(

SynthDef("subtractive", {

Out.ar(

0,

LPF.ar(

Pulse.ar(440, 0.5, 0.1), // フィルターをかけるソース

Line.kr(8000, 660, 6) // フィルターの周波数をLineでコントロールする

)

)

}).load(s);

)

Synth("subtractive")

////////////////////////////////////////////////////////////////////////////////////////////////////

RLFP（レゾナント・ローパス・フィルター）は、高い周波数成分を取り除き、フィルターの（カットオフ・ポイントの）周波数を強調するためによく使います。

(

SynthDef("passLowFreqs2", {

Out.ar(

0,

RLPF.ar(

Saw.ar([220, 221] + LFNoise0.kr(1, 100, 200), 0.2),

[LFNoise0.kr(4, 600, 2400), LFNoise0.kr(3, 600, 2400)],

0.1

)

)

}).load(s);

)

Synth("passLowFreqs2")

////////////////////////////////////////////////////////////////////////////////////////////////////

Rezonzはとても、とても、とても強力なフィルターです。特定の周波数帯域を強調する時に使います。

カットオフが非常にシャープなためにノイズをピッチに変えてしまいます。

(

SynthDef("noiseToPitch", { arg out = 0, mul = 1;

Out.ar(

out,

Resonz.ar(

WhiteNoise.ar(mul),

LFNoise0.kr(4, 110, 660),

[0.005, 0.005]

)

)

}).load(s);

)

(

// 左右のチャンネルをアクティブ化する

Synth("noiseToPitch", [\out, 0\mul, 1]);

Synth("noiseToPitch", [\out, 1, \mul, 1]);

)

////////////////////////////////////////////////////////////////////////////////////////////////////