我正在尝试学习如何使用事件模式。我键入了以下内容,期望每次都“跳下”一个八度的序列:
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
密钥的一些细节吗?
答案 0 :(得分:1)
是的,你遗漏了一些东西:播放模式时,midinote
键中的数据在freq
键中神奇地转换为赫兹值。因此,当您编写synthdef时,不应使用midinote
,而应使用freq
。
这可能看起来像是可疑的魔法,但请按照这种方式思考:您可以使用freq
编写一次SynthDef,然后您可以自由使用midinote
或freq
或在你的模式中degree
,它们都将被转换,而不必重写你的SynthDef来使用不同命名的控件。
要详细了解正在发生的事情,此页面非常有用:Pattern Guide 07: Value Conversions