Как заставить OSC взаимодействовать с процедурой планирования в суперколлайдере

Я пытаюсь использовать обмен сообщениями OSC как метод планирования задач/процедур в Supercollider. В частности, я хочу, чтобы подпрограмма ждала, пока сообщение не будет получено через OSC, прежде чем возобновить работу. Так что вместо (например) 10.wait я хочу - что-то вроде :wait(прослушиватель OSC - сообщение получено, так что продолжайте). Я просмотрел документацию Supercollider, но не смог найти ничего, что можно было бы адаптировать к такой ситуации. Любое предложение относительно решения будет очень признательно.


person Kammo3    schedule 14.02.2019    source источник


Ответы (1)


Посмотрите документацию по объекту Condition. Вы можете создать Condition, ожидать его в одном потоке, а затем возобновить этот поток позже/из другого потока, используя либо condition.unhang, либо condition.test_(true).signal.

Код вашего обработчика сообщений OSC может выглядеть примерно так:

~stepCond = Condition();

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

OSCfunc(\step, {
    ~stepCond.unhang();
}, '/step')
person scztt    schedule 14.02.2019