首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >superCollider中的总线数组

superCollider中的总线数组
EN

Stack Overflow用户
提问于 2016-01-29 04:26:52
回答 1查看 534关注 0票数 0

我用do生成了一个合成器:

代码语言:javascript
复制
(
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的多个实例之间建立一对一的连接。我能用一组总线连接它们吗?如果是的话,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 09:20:10

是的你可以。在这里,我对您的代码进行了最少的修改。首先,我让~sourceOut成为一个总线阵列,而不是一条总线。其次,在do循环中,我利用了这样一个事实: SuperCollider中的主迭代函数可以提供第二个index参数以及每个项本身。第三,我使用index参数来选择所需的总线:

代码语言:javascript
复制
(
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,它对于原型开发和实时编码非常有用,并提供了一些技巧来将synths的输出插入到彼此之间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35076874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档