Creative Coding in Julia (packages for audio and graphics processing)

Hello,

I am coming from a musician backround and am lookng for a programming language to code interactive audio-visual installations. I have some experience in coding with Java (a year of computer engineering many years ago) and C++ (openFrameworks recently, but only scratiching the surface). I am working a lot with Max Msp (visual programming enviroment for music and visuals) but find myself looking for a text based language. The readability, ease of use and “feels like a scripting language, but performs like a compiled language” of Julia make it an ideal candidate. What I would be looking for now are packages/libraries that abstract away some of the low-level stuff for audio/video programming and offer tools for audio-synthesis (especially granular audio-synthesis) and realtime 2D/3D graphics.

Regarding synthesis I found Juilacollider, a Julia implementation of Supercollider, a popular audio synthesis framework/server-application, but since it is based on a fork of Julia I am not sure if an how it can be integrated in regular julia code/programs (I am also still trying to get it to build correctly…).
There seem to be more packages available that deal with graphics, albeit mostly for scientific data visualitisation whereas I am looking to visualize data and sound by way of particle systems, 2D/3D animations (though in some case combined with FFT-spectograms).

TL;DR
Ist there any creative coding done in Julia? Are there libraries/packages to help with creative coding?

I’m completely outside the field, but have you taken a look at: JuliaMusic · GitHub ?

You can definitely try Makie.jl for creative visualizations, of course it has lots of functionality for making plots, but the underlying graphics primitives should be good for your purposes as well, and animating things with observables is quite nice.

I have used Max as well in the past, and dabbled a bit with audio in Julia. So far I haven’t really gotten anything real-time to work. Julia is fast, but it is a garbage-collected language, so realtime stuff could suffer from the garbage collector pauses. I tried very haphazardly to get some dynamically computed sounds out of GitHub - JuliaAudio/PortAudio.jl: PortAudio wrapper for the Julia programming language, compatible with the JuliaAudio family of packages and it kind of worked, but there’s almost no infrastructure for that.

That’s not supposed to discourage you, it would be very cool if you got something to work, there’s just not a lot of things that already exist in the real time audio space.

For visual things have a look at https://cormullion.github.io/

2 Likes

you can try Faust for real time audio processing;
https://faustdoc.grame.fr/tutorials/julia/

This is one cool blog!

What do you mean by

is it a specific term?

We can make videos with VideoIO
All sorts of Image things with Images
3D Meshes for 3dprinting

etc.

But perhaps like most creative stuff, spending time making the tools takes away from producing the output.

It makes no sense to make packages out of my 3d print models or generated images or svgs, I hack away until I have something groovy, show it somewhere, and then move on.

Thank you for all the quick answers.

First off, regarding the term “creative coding”: I think it’s mostly used to describe coding to prduce art algorithmically. And as you stated, spending time making the tools takes time away from producing the output, which is why frameworks like openFrameworks (C++), Cinder (C++), Nannou (Rust) Processing (Java), p5.js (Javascript) … apstract away lots of the lowlevel (rendering, dsp, ect.) mechanics. For example getting a object/function/struct that acts as a sine-wave oscillator and can be “connected” to other audio nodes instead of having to fill an array with values to generate a wavetable, iterate over it ect.

I’ve used Faust before and like it, but since the Faust programs would need to be translated/compiled to Julia and then compiled again, it seems like a suboptimal worflow in a case where parameters have to be tweaked often and have to be linked to parameters in Julia.
I’ve looked at PortAudio.jl, seems like it might be possible, but I’m probably not good enough at actual dsp coding get anything out of it. Especially considering the performance issues with garbage collected languages you mentioned.
Music.jl could work if I rely on external software-instruments for the actual sound generation.

Luxor.jl looks promising for 2D graphics and the blog is great!
Makie,jl also seems very promising!

There’s also Javis.jl which relies on Luxor, but has a more p5.js type(animation based) approach.

1 Like

Luxor.jl with the @play macro feels a lot like Processing!

1 Like

A more direct integration of te Faust compiler here: GitHub - corajr/Faust.jl: Julia wrapper around the Faust DSP compiler.