如何让 OSC 与 Supercollider 中的 Scheduling Routine 交互

How to get OSC to interact with Scheduling Routine in Supercollider

我正在尝试使用 OSC 消息传递作为在 Supercollider 中调度 tasks/routines 的方法。具体来说,我希望例程在恢复之前等到通过 OSC 收到消息。因此,而不是(例如)10.wait 我想要 - 类似的东西:等待(OSC 侦听器 - 收到消息,所以继续)。我已经梳理了 Supercollider 文档,但无法找到任何可以适应这种情况的东西。任何关于解决方案的建议将不胜感激..

查看 Condition 对象的文档。您可以创建一个 Condition,在一个线程中等待它,然后稍后通过使用 condition.unhangcondition.test_(true).signal 在另一个线程上/从另一个线程恢复该线程。

您的 OSC 消息处理程序的代码可能类似于:

~stepCond = Condition();

Routine({
    "starting".postln;
    ~stepCond.wait;
    "continuing".postln;
}).play;

OSCfunc(\step, {
    ~stepCond.unhang();
}, '/step')