superCollider中的总线阵列

时间:2016-01-29 04:26:52

标签: supercollider

我有一个使用do:

生成的Synth
(
SynthDef(\siny, { arg freq, outBus=0; Out.ar( outBus, SinOsc.ar(freq!2,0,0.2) ) } ).send(s);
SynthDef(\filter, { arg cFreq,q=0.8, inBus; Out.ar( 0, BPF.ar(In.ar(inBus), cFreq!2, 1/q ) ) } ).send(s);

)

(
~sourceOut = Bus.audio(s);
~sine_Group = ParGroup.new;
z = [100,500,1000,1500,250];

{
z.do({ arg val; Synth.head(~sine_Group, \siny, [\freq: val, \outBus: ~sourceOut]) });
z.do({ arg val; Synth.after(~sine_Group, \filter, [\inBus: ~sourceOut, \cFreq: 200] ) });

}.play;
)

现在,我的理解是,Synth \ siny的多个实例的输出在bus~sourceOut中混合,并作为输入到synth \ filter

我真正想做的是在\ siny和\ filter的多个实例之间建立一对一的连接。我可以使用一组总线来连接它们吗?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:1)

是的,你可以。在这里,我最低限度地修改了您的代码。首先,我使~sourceOut成为Busses数组而不是单个总线。其次,在do循环内部,我利用了SuperCollider中的主要迭代函数可以提供第二个index参数以及每个项本身的事实。第三,我使用index参数来选择所需的总线:

(
z = [100,500,1000,1500,250];
~sourceOut = z.collect{ Bus.audio(s) };
~sine_Group = ParGroup.new;

{
z.do({ arg val, index; Synth.head(~sine_Group, \siny, [\freq: val, \outBus: ~sourceOut[index]]) });
z.do({ arg val, index; Synth.after(~sine_Group, \filter, [\inBus: ~sourceOut[index], \cFreq: 200] ) });

}.play;
)

根据您的需要,您可能还希望查看NodeProxy对原型设计和实时编码有用的内容,并提供一些插入合成器的技巧。输出到彼此。