为什么这个事件模式不会产生八度跳跃?

时间:2013-07-27 21:39:00

标签: supercollider

我正在尝试学习如何使用事件模式。我键入了以下内容,期望每次都“跳下”一个八度的序列:

p = Pbind(*[
    instrument: \mySynth,
    midinote: Pseq([108, 96, 84, 72, 60, 48, 36, 24, 12], inf),
    dur: 0.2
]);

SynthDef(
    "mySynth",
    {
        |midinote, gate = 1|
        var stereofreq = [midinote, midinote];
        var audio = Pulse.ar(stereofreq, 0.5, mul: 0.8);
        var env = Linen.kr(gate, 0.01, 1, 0.1, doneAction: 2);
        OffsetOut.ar(0, audio * env);
    }
).add;

p.play;

我当然得到一个降序,但间隔不是八度。我错过了midinote密钥的一些细节吗?

1 个答案:

答案 0 :(得分:1)

是的,你遗漏了一些东西:播放模式时,midinote键中的数据freq中神奇地转换为赫兹值。因此,当您编写synthdef时,不应使用midinote,而应使用freq

这可能看起来像是可疑的魔法,但请按照这种方式思考:您可以使用freq编写一次SynthDef,然后您可以自由使用midinotefreq或在你的模式中degree,它们都将被转换,而不必重写你的SynthDef来使用不同命名的控件。

要详细了解正在发生的事情,此页面非常有用:Pattern Guide 07: Value Conversions