【问题标题】:Array of buses in superCollidersuperCollider 中的总线数组
【发布时间】:2016-05-06 17:41:05
【问题描述】:

我有一个用 do 生成的合成器:

(
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 实例的输出在总线 ~sourceOut 中混合,并作为输入到 synth\filter

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

【问题讨论】:

    标签: supercollider


    【解决方案1】:

    是的,你可以。在这里,我对您的代码进行了最低限度的修改。首先,我创建了~sourceOut 一个总线数组,而不是单个总线。其次,在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,它对于原型设计和实时编码很有用,并提供了一些将合成器的输出相互插入的技巧。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多