0

我正在尝试通过总线将合成器路由到另一个合成器(以提供效果)。这是我的代码:

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为使用 channel0而不是 bus b,那么我确实会听到声音,尽管没有任何路由到效果合成器。所以我猜这个问题与总线和/或处理顺序有关。但我不知道如何解决它。任何人都可以帮忙吗?

4

1 回答 1

2

在您的代码中,您没有实例化effects合成器,因此没有声音进入输出总线。

于 2013-08-07T21:23:54.023 回答