我可以设置这样的比例:
~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
来实际播放音符,但它似乎不知道音阶,所以我有点卡住了。
任何人都可以提供有关如何实现这一目标的任何建议吗?
答案 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。