SynthDef で定義したエフェクトを In と Out でルーティングします。
Bus
SuperColliderではBusを指定することでルーティングを行います。
BusにはAudioBusとControlBusの2つがあります。AudioBusは.ar、ControlBusは.krの管理に使います。ここでは単にBusと言う場合、AudioBusを指すことにします。
Bus0からの数チャンネルはハードウェアへの出力となります。例えばステレオ環境ならBus0が左、Bus1が右チャンネルとなります。 ServerOptions から出力チャンネル数を調べることができます。
// s = Server.local; s.options.numAudioBusChannels; // ハードウェアの出力チャンネル数
以下でAudioBusとControlBusの最大チャンネル数を調べます。デフォルトの最大チャンネル数はAudioBusが1024、ControlBusが16384となります。
s.options.numAudioBusChannels; s.options.numControlBusChannels;
In, Out
In で入力Bus、 Out で出力Busを指定します。以下の例ではBus10に出力した Saw を In で受け取り、 BMoog フィルタを適用してBus0に出力します。
~bus = 10;
{
var numChannels = s.options.numOutputBusChannels;
var input = In.ar(~bus, numChannels);
var filter = BMoog.ar(input, 500, 0.991);
Out.ar(0, filter)
}.play;
{
var osc = Saw.ar(100, 0.2);
Out.ar(~bus, Pan2.ar(osc))
}.play;
Pfxb
パターンにエフェクトをかけるときは Pfxb が使えます。
thisThread.randSeed = 200;
SynthDef(\hihat,
{ | out(0), amp(1), pan(0), dur(0.1), curve(-64) |
var envAmp = Env.perc(0, dur, 1, curve);
var envGenAmp = EnvGen.ar(envAmp, doneAction: 2);
var noise = FBSineC.ar(40000, 4, 1.02, 1.05);
var dckill = BHiPass4.ar(noise, 240, 4, amp * envGenAmp);
OffsetOut.ar(out, dckill)
}
).add;
SynthDef(\delay,
{ | out(0), in(0), freq(0.1) |
var input = In.ar(in, 1);
var filter = input;
var delay = 0.1;
8.do({
filter = AllpassL.ar(filter, delay, delay.rand, delay.rand, 0.5, filter)
});
OffsetOut.ar(out, Pan2.ar(filter))
}
).add;
TempoClock.default.tempo = 118 / 60;
~bind = Pbind(
\instrument, \hihat,
\out, 10, // bus 10 に出力。
\dur, 0.25,
\curve, Pseq([-39, -70, -2, -33], inf),
\amp, 0.1
);
Pfxb(
~bind,
\delay,
\in, 10, // bus 10 から入力。
\out, 0,
\freq, 0.1
).play;