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