0

我可以设置这样的比例:

~pp = Scale.phrygian(\pythagorean);

然后我可以创建一个Pbind像这样播放音阶的:

(
Pbind(
    *[
        instrument: \default,
        scale: ~pp,
        degree: Pseq([0, 1, 2, 3, 4, 5, 6, 7], inf),
        amp: 0.5,
        dur: 0.5
    ]
).play;
)

Synth.new似乎根本没有得到它(只会导致沉默):

b = Synth.new(\default, [\scale: ~pp, \degree: 3, \amp, 0.5]);

有趣的是,如果我删除scale参数:

b = Synth.new(\default, [\degree: 3, \amp, 0.5]);

然后我收到一张便条,但始终是同一张便条。它不响应degree参数。

最终,我希望能够从外部 OSC 设备(我的手机!)触发笔记。这意味着连接OSCFunc以侦听某些触发器,并在这些 OSC 事件发生时从音阶播放音符。我以为我可以使用Synth.newinsideOSCFunc来实际弹奏音符,但它似乎不知道音阶,所以我有点卡住了。

任何人都可以就如何实现这一目标提供任何建议吗?

4

1 回答 1

1

好好阅读 Pattern Guide,尤其是Pattern Guide 07: Value Conversions。这是一个很好的教程。它会告诉你这些神奇的转换并没有在 SuperCollider 中随处使用,但只有当你使用Event基于调度的时候,比如 Patterns (例如你的Pbind)。值转换实际上是在“默认事件”中定义的,如该教程文章中所述。

所有这一切的一个后果是,如果您只想启动一个音符,但仍需要价值转换,您可以使用演奏音符的事件风格来做到这一点,它使用()然后调用它创建一个事件.play

  ~synth = (instrument: \default, scale: [0,2,4,5,7,9,11], degree: 12.rand, amp: 0.5).play;

  ~synth = (instrument: \default, scale: [0,3,6,9], degree: 12.rand, amp: 0.5).play;

这仍然返回一个 Synth 对象。有关这种方式的更多信息,请参阅事件帮助文件。

于 2014-03-21T09:42:10.663 回答