How to send SC audio to customer application?

Hi all,
I need to write an application that processes sound. The sounds need to come from SuperCollider. The application will be written in C or C++ and need to run on a Windows machine.
What is the best way to route audio data to this custom application?

Does the processing happen in realtime or non-realtime?

realtime multichannel

Do you want to embed SuperCollider in your application or should SuperCollider run as a seperate program? In the latter case, it’s really about inter-application audio routing, so not specifically about SuperCollider. (You can use Jack, for example.)

Run as a seperate program seems fine to me. I already noticed Jack. SuperCollider does not support Jack natively I suppose. And I will need something like JackRouter, right?

What OS are you on?

You can tell SC where to send its audio in terms of SC needing an audio driver. On Mac, that defaults to CoreAudio, but if you wrote an Audio Driver interface that the OS would see in your other application, SC could use it. I don’t have any example of this (or know if it has been done). It wouldn’t be trivial.

Josh

If you’re on Windows, you can use the JackRouter ASIO driver.

Yes Windows. But I may switch to Mac later. I guess Jack works on both? Or is there no JackRouter for Mac?

There is a problem:
I can not use Jack because of licensing issues. Is there an other opion for Jack?

What’s the problem? The jack library is LGPL:

The JACK server uses the GPL, as noted in the source file headers. However, the JACK library is licensed under the LGPL, allowing proprietary programs to link with it and use JACK services.

From what you describe above, you might want to look at the code for Sonic Pi here https://github.com/sonic-pi-net/sonic-pi

It runs on Mac, Windows and most flavours of Linux and embeds SuperCollider as an external process. Most of the comms are between a server (written in Ruby) and scsynth (the SuperCollider server process) but there are some messages from GUI written in QT that go to scsynth as well.

Even if the codebase isn’t particularly useful, hopefully it demonstrates that it is possible.