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;