为什么Synth.new不了解秤?

时间:2014-03-20 22:46:00

标签: supercollider

我可以设置这样的比例:

~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.new内使用OSCFunc来实际播放音符,但它似乎不知道音阶,所以我有点卡住了。

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

1 个答案:

答案 0 :(得分:1)

好好阅读模式指南,特别是Pattern Guide 07: Value Conversions。这是一个很好的教程。它会告诉您,SuperCollider中并未使用这些神奇的转换,但仅限于使用基于Event的计划(例如模式)(例如您的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对象。 有关此方法的更多信息,请参阅the Event helpfile