Timing with IAC Bus

Hi folks,

I’m working on a project integrating SC and Ableton (on OSX.12 ARM M1) connected via IAC (+ CV out to other outboard devices via CVTools). I’m experiencing intermittent yet very significant timing issues, especially when moving from one application to the next and where any network activity takes place. Though i’m baffled that a contemporary computing system still exhibits such issues (wasn’t this why we stuck with Atari?) it does seem that either the IAC bus or SC are low priority here.

Is there a means to force Supercollider to prioritize time-sensitive actions?

Thanks.

Hi @zentrumsounds,
There is a known SC server priority issue with M1 processors due to the new MacOs QoS implementation. Waiting that this problem will be solved, you need to modify the source code of SC server and recompile SC by yourself. After that SC works like a charm on M1-M2 :slight_smile:

See this topic :

Best,

José

1 Like

Thanks Jose!

That’s it exactly…though I’m not quite clear what the fix involves.

Is it “simply” a case of removing (commenting out) the lines in question at 109-116? I’ve only used the SC download and not yet recompiled SC myself. Not sure I’m 100% comfortable doing this but the timing errors are going to cause issues in a performance i have in a few weeks if i can’t resolve this.

static void resyncThreadFunc() {
#    ifdef NOVA_TT_PRIORITY_RT
    std::pair<int, int> priorities = nova::thread_priority_interval_rt();
    nova::thread_set_priority_rt((priorities.first + priorities.second) / 2);
#    else
    std::pair<int, int> priorities = nova::thread_priority_interval();
    nova::thread_set_priority(priorities.second);
#    endif

347-354:

void SC_AudioDriver::RunThread() {
#ifdef NOVA_TT_PRIORITY_RT
    std::pair<int, int> priorities = nova::thread_priority_interval_rt();
    nova::thread_set_priority_rt((priorities.first + priorities.second) / 2);
#else
    std::pair<int, int> priorities = nova::thread_priority_interval();
    nova::thread_set_priority(priorities.second);
#endif

Remove the calls to nova::thread_set_priority in the following places:

1 Like

That’s it! Thanks again @Spacechild1 :wink:

So just to clarify. This involves building SC from scratch using XCode? Or are these actions i can take on the downloaded 3.13.0 version?

Unfortunately you have to do it from scratch by compiling it yourself.
Follow the instructions here :

It is not absolutely necessary to use XCode, you can do it directly from the terminal using cmake.

Waiting for the problem to be solved definitively, maybe some developer can make a version for distribution on the Downloads | SuperCollider site??

1 Like