我对如何在加法合成中实现参数感到很困惑。
我正在尝试实现一个系统,我可以在其中对以下参数进行排序:任意数量的部分,基本频率。我不确定任意数量的部分的可行性,但在我看来,对基频进行排序确实应该是完全可能的。
这是我正在处理的代码:
(
z = {
arg index, freq, nn;
var finalFreq, ff, amp, nn;
ff = index*freq;
amp = 0.5/nn;
finalFreq = freq + ff;
finalFreq.postln;
s = SinOsc.ar(finalFreq, 0, amp);
};
)
(
SynthDef.new('additive',{
arg freq, nn;
var sig, env;
env = Line.kr(1,0,0.2);
sig = Mix.fill(nn, z) * env;
Out.ar(0,sig);
}).add
)
(p = Pbind(
\instrument, \additive,
\dur, Pseq([0.1,0.2,0.3,0.4],inf),
\freq, Pseq([100,440,880,55],inf),
\nn, Pseq([1,5,10,100],inf)
).play;
)
这失败了Index not an Integer
。而且我什至不确定如何向 z 发送参数。
我设想利用变量范围的另一种表述如下:
(
SynthDef.new('additive',{
arg freq, nn;
var sig, env;
env = Line.kr(1,0,0.2);
z = {
arg index;
var finalFreq, ff, amp, nn;
ff = index*freq;
amp = 0.5/nn;
finalFreq = freq + ff;
finalFreq.postln;
s = SinOsc.ar(finalFreq, 0, amp);
};
sig = Mix.fill(nn, z) * env;
Out.ar(0,sig);
}).add
)
它也不起作用,失败了Index not an Integer
。
你将如何解决这个问题?