Почему эта структура синтезатора молчит?

Я пытаюсь направить синтезатор на другой синтезатор (для создания эффектов) через шину. Вот мой код:

b = Bus.audio(numChannels: 2);

SynthDef(
    "mySynth",
    {
        |freq, amp, gate = 1|
        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);
            //TODO: Implement some crazy, revolutionary effects
            Out.ar(0, audio);
    }
).add;

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;

Код не вызывает ошибок (в окне вывода написано «EventStreamPlayer»). Но у меня нет звука.

Если я изменю строку Out.ar в \mySynth, чтобы использовать канал 0 вместо шины b, то я получу звук, хотя и без какой-либо маршрутизации на синтезатор эффектов. Итак, я предполагаю, что проблема связана с шинами и/или порядком обработки. Но я не знаю, как это исправить. Кто-нибудь может помочь?


person David    schedule 06.08.2013    source источник


Ответы (1)


В вашем коде вы не создаете синтезатор effects, поэтому звук не поступает на выходную шину.

person Dan Stowell    schedule 07.08.2013
comment
Как мне его создать? - person David; 08.08.2013
comment
Я создал синтезатор, используя e = Synth(\effects); после его SynthDef. - person David; 08.08.2013
comment
Особенно важно, как я выполняю код. Я задал еще один вопрос об этом здесь: stackoverflow.com/questions/18134636/. - person David; 08.08.2013
comment
Кстати, спасибо за помощь! - person David; 08.08.2013