总线、节点和组 - 4. 动态总线分配
ww(-dub-)
在这前那个例子中,我使用了16号总线以为一个8通道的接口留出空间,8进,8出。如果你不知道你已经有多少个输出、入口怎么办呢?自然地,有一个管理总线的自动化方法。Bus.control和Bus.audio可被用于返回下一个可用的控制与音频总线的目录。Bus.index返回那个目录。下边第一个例子将在post窗口返回:Bus(internal, audio, 4, 1),意味着一个在目录第四位位于internal服务器的音频总线被返回。为什么是4?因为0~3已被电脑的输入和输出所占用,因此4是下一个可用的总线。方法free释放那个总线,然后被重新分配。接下来我重新分配一个两通道总线到c,接着是一个两通道总线到b。它们应当是4,5和6,7,但你的里程表可能不同:它们实际上将是任何你系统内空闲的口。然后我向这些分配的端口分别发送一个Saw和SinOsc,使用12通道的scope,以使你可以看到它们全部。注意它们都是立体声总线,但Saw是一个单声道patch。尽管如此,第二个c总线仍是可用的。 请确保在每个例子运行完毕之后释放每条总线。 18.13. 总线分配及重分配 b = Bus.audio; b.index; b.free; c = Bus.audio(s, 2); b = Bus.audio(s, 2); {Out.ar(c.index, Saw.ar)}.play; {Out.ar(b.index, SinOsc.ar([500, 1000])).scope(8) b.free; c.free; 如果你bypass(设旁路)Bus并仅输入一个目录编号,它将不会被注册到一个总线分配。这被称为硬接线(hardwiring)。为说明这点,我将首先用一个硬接线的哑巴(dummy)合成器接管一些总线。而后使用Bus获得下一个可用的总线,列印它的目录,然后使用它的目录创建一个新的合成器。注意将它与发送到第一个SinOsc使用的总线上。 18.14. 总线分配和再分配 {Out.ar(4, SinOsc.ar([100, 200, 300, 400]))}.scope(8); b = Bus.audio(s, 2); b.index; // 不管上边的代码是什么,应该仍为4 {Out.ar(b.index, Saw.ar([800, 1000]))}.scope(8); // 添加到正弦波上 b.free; 紧接着在运行下边这堆代码的同时观察post窗口内的反馈。 18.15. 总线分配 a = Bus.audio(s, 2) // 获取接下来可用的两个通道 b = Bus.audio(s, 1) // 获取接下来的一个通道 c = Bus.audio(s, 2) // 再获取两个 c.index // 列印c a.index // 列印a a.free // 释放a b.free // 释放b d = Bus.audio(s, 1) // a and b are now free, so these e = Bus.audio(s, 2) // should take over those indexes a = Bus.audio(s, 2) // reallocate a and b, will probably b = Bus.audio(s, 1) // 9 through 11 [a, b, c, d, e].postln; // 列印全部 s.scope(14); // 开启一个scope // 现在开启一些合成器. 我将把它们全部混至总线0,1。 // 因此我们将首先开启它。记住 // 先入, 后出, 先收, 后送. {Out.ar(0, Mix.ar(In.ar(2, 12))*0.1)}.play {Out.ar(a.index, SinOsc.ar)}.play {Out.ar(b.index, SinOsc.ar(1000))}.play {Out.ar(c.index, Saw.ar([400, 800]))}.play {Out.ar(d.index, Pulse.ar(200))}.play {Out.ar(e.index, [Saw.ar(500), FSinOsc.ar(900)])}.play // 你在没有将一条总线分配给一个变量的情况下仍能获得一条总线 // 这样仅仅将使你无法在之后释放它. {Out.ar(Bus.audio.index, Saw.ar(2000))}.play // 你可以将两个信号写入一条总线 {Out.ar(a.index, Saw.ar(2000))}.play [a, b, c, d, e].do({arg each; each.free}) // 释放全部 我不得不承认,对于总线我并非经验丰富。我的直觉是,动态分配可能是不可或缺的或另一个不必要的复杂的层面。你自己决定吧。
你的回复
回复请先 登录 , 或 注册相关内容推荐
最新讨论 ( 更多 )
- 想入坑sc,有大神有pdf吗?实在找不到 (王牛煜昊)
- 想自学 SuperCollider 有群组可以交流吗 (Sugar Rusher)
- SuperCollider SynthDef 初级教程 (ww)
- 站长咱能不能建一个微信群 (铁狼)
- 求大神 考试。。什么是UGI (坚强一点-B)