Почему этот шаблон событий не производит скачки октавы?

Я пытаюсь научиться использовать шаблоны событий. Я набрал следующее, ожидая последовательность, которая "спрыгивает" на октаву каждый раз:

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 ответ

Решение

Да, вы что-то упустили: данные в midinote ключ магически преобразуется в значения Герца в freq ключ при воспроизведении паттерна. Поэтому, когда вы пишете свой synthdef, вы не должны использовать midinote вместо freq,

Это может показаться подозрительной магией, но подумайте об этом так: вы можете написать SynthDef один раз, используя freq и после этого вы можете свободно использовать midinote или же freq или же degree в ваших шаблонах, и все они будут преобразованы без необходимости переписывать SynthDef для использования элемента управления с другим именем.

Чтобы узнать больше о том, что происходит, эта страница очень полезна: Руководство по шаблонам 07: Преобразование значений

Другие вопросы по тегам