я построил следующую простую структуру синтезатора, которая создает синтезатор и направляет его выход через эффекты блок:Почему это важно, как я выполняю этот код?
b = Bus.audio(numChannels: 2);
SynthDef(
"mySynth",
{
|freq, amp, gate = 1|
var vol = 0.5;
var audio = Pulse.ar(freq, 0.5);
var env = EnvGen.kr(Env.perc, doneAction:2);
audio = Pan2.ar(audio, MouseX.kr(-1, 1));
Out.ar(b, audio * env);
}
).add;
SynthDef(
"effects",
{
var audio = In.ar(b, 2);
audio = LPF.ar(audio, MouseY.kr(200, 1000));
//TODO: Implement some crazy, revolutionary effects
Out.ar(0, audio);
}
).add;
// **** Dividing line for executing the code ****
e = Synth(\effects);
p = Pbind(*[
instrument: \mySynth,
scale: #[0, 2, 4, 5, 7, 9, 11],
degree: Pseq([3, 3, 9, 9, 2, 9, 9, 3, 5, 7], inf),
dur: Pseq([0.2, 0.2, 0.2, 0.1, 0.1, 0.2, 0.2, 0.2, 0.1, 0.1], inf),
amp: Pseq([1, 0.6, 0.9, 0.3, 0.4, 0.9, 0.6, 0.85, 0.3, 0.4], inf),
]);
p.play;
Это производит только звуковой выход, когда я выполняю код определенным образом:
- Я могу выполнить каждый блок по отдельности, и я получаю звуковой вывод.
- Я могу выполнить первые блоки до комментария разделительной линии, а затем следующие блоки, и я получаю слышимый вывод.
- Если я выполняю весь код вместе, я не получаю слышимый вывод.
Я предполагаю, что там должна быть некоторая задержка между объявляя SynthDef
, а затем создать его экземпляр с помощью Synth()
, в то время как сервер не установлен настройки материала. Может ли кто-нибудь пролить свет?
Спасибо, что ответили на исправление моего собственного кода. Всегда полезно. Так что все, что мне нужно было сделать, это вызвать 'play' вместо' add'? Ой! – David