SuperCollider: Synchronous vs Asynchronous
The Problem
Most examples in this class can not be run as a complete script. They need to be evaluated line by line or block wise. One reason for this is the difference between synchronous and asynchronous execution. This problem is in detail explained in the SC guides: https://doc.sccode.org/Guides/Sync-Async.html This site just gives a shorter answer.
Issues usually arise, when a command has been sent to the server
and following command depends on the completion of that action.
Examples can be the creation of nodes or the loading and filling
of buffers.
Running this simple block at once will result in an error. It creates a node
and does not wait for completion before it uses the .set()
method.
The result is a FAILURE IN SERVER /n_set Node 1000 not found
:
A Solution
There are several ways of dealing with the above introduced problem.
One solution is to wrap the code block in a Routine
, which allows
to control the order of execution. In the case of asynchronous tasks,
the command s.sync
can be used inside a routine. It waits for the
sever to finish all asynchronous tasks and the below example works
without errors: