0

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

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钥匙的一些细节吗?

4

1 回答 1

1

是的,您缺少一些东西:当播放模式时,midinote中的数据会神奇地转换为键中的赫兹值。freq所以当你写你的 synthdef 时,你不应该使用.midinote而应该使用freq.

这似乎是一种可疑的魔法,但请这样想:您可以编写一次 SynthDef,使用freq,然后您可以在您的模式中自由使用or midinote,它们都将被转换,而无需您重写您的SynthDef 使用不同名称的控件。freqdegree

要了解更多关于正在发生的事情,这个页面非常有帮助:模式指南 07:价值转换

于 2013-07-28T19:49:55.833 回答