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

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, то я получу звук, хотя и без какой-либо маршрутизации на синтезатор эффектов. Итак, я предполагаю, что проблема связана с автобусами и / или порядком обработки. Но я не знаю, как это исправить. Кто-нибудь может помочь?

0
David 7 Авг 2013 в 00:43

1 ответ

Лучший ответ

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

2
Dan Stowell 8 Авг 2013 в 01:23
Как мне создать его экземпляр?
 – 
David
8 Авг 2013 в 15:44
Я создал экземпляр синтезатора, используя e = Synth(\effects); после его SynthDef.
 – 
David
8 Авг 2013 в 23:31
Это особенно важно, как я выполняю код. Я задал здесь еще один вопрос: stackoverflow.com/questions/18134636/….
 – 
David
8 Авг 2013 в 23:38
Кстати, спасибо за помощь!
 – 
David
8 Авг 2013 в 23:40