JUCE + Julia integration

Julia is an exciting technology for math/DSP nerds.

Ultra-{clean/concise/succinct} syntax (pulling from Python, MATLAB, R, and half a dozen other influences) is translated to LLVM instructions (using a LISP-based parser) and {JIT/pre}-compiled to native code. It flies like the wind, consistently achieving C++/Fortran speeds.

I’m chatting with a Julia dev about the idea of embedding Julia in JUCE.

This would (IMHO) constitute a monumental technological breakthrough.

Julia is the only technology I’m aware of that solves the two-language problem – whereby you prototype in a high-level language such as MATLAB/Python and implement in a low-level language such as C++.

Julia + JUCE would be the only real-time multi-platform solution to the two-language problem. (Yes we’re still using two languages, but it is no longer a problem: we are no longer duplicating effort. The languages act in harmony rather than in opposition).

Imagine if we were able to inject Julia code into a C++ JUCE project to handle DSP or real-time audio. Imagine the effect that would have on development velocity. Imagine the number of teams that currently prototype in Python before handing off to a C++ developer to implement. And the lost hours patching the implementation. Debugging real-time C++ DSP code. Yummy. You have to set up a dummy testbed environment, single-step through, etc… I bet a lot of teams don’t even prototype in Python – just jump straight into C++ (something I would have done ten years ago). I would say I am >10x faster prototyping.

Wouldn’t it be awesome to create your engine in Julia, using a Jupyter Notebook (the Ju is for Julia btw) and just drop the code into a JUCE project!

This is a preliminary check to gauge the enthusiasm on the JUCE front. Is it something the core devs might consider investing some effort into? (The Julia people I think will need to take the brunt of the heavy lifting).

7 Likes

Sounds interesting.

There is a C++ Jupyter notebook these days: https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92

Julia looks great, but it’s definitely not the only option for writing DSP in a high level language and compiling to either embeddable code or native binary.

The most obvious one that springs to mind is Faust, which is audio-specific and has many highly optimised output targets.

There is also pyo which uses python as the high-level language.

Whilst libpd doesn’t compile to C++ or native code, it does allow prototyping in Pd’s high level dataflow language and then embedding patches within a native app.

1 Like

I would love to see this!

1 Like