[WIP] Using Faust in Julia

Faust (Functional Audio Stream) is a functional programming language for sound synthesis and audio processing with a strong focus on the design of synthesizers, musical instruments, audio effects, etc. Faust targets high-performance signal processing applications and audio plug-ins for a variety of platforms and standards.

The core component of Faust is its compiler. It allows to “translate” any Faust digital signal processing (DSP) specification to a wide range of non-domain specific languages such as C++, C, LLVM bit code, WebAssembly, Rust, etc. In this regard, Faust can be seen as an alternative to C++ but is much simpler and intuitive to learn.

Faust Libraries

The Faust libraries implement hundreds of DSP functions for audio processing and synthesis. They are organized by types in a set of .lib files (e.g., envelopes.lib, filters.lib, etc.).

Online Faust IDE

The Online Faust IDE is a zero-conf tool that provides all the compilation services, including binaries generation for all the supported platforms and architectures, but also various utilities for signal processing development.

Using Faust in Julia

A new backend to generate Julia code from Faust DSP programs has been recently added in the compiler. The resulting code can be integrated in Julia with in different ways. This is covered in the Using Faust in Julia tutorial.

This is very much a WIP, since we are quite new in using the amazing Julia language. We are interested to get feedback on this initiative, in ways it can be improved, or whatever idea that can emerge.

15 Likes


Using Faust in Julia, all that running in VS Code

1 Like

Wow, that looks quite cool. Also that it can generate a GUI and plots out of the box.

(The opposite direction would of course be very attractive, i.e.,
calling Julia code from a DSP framework like Faust.
That would allow using packages like DifferentialEquations.jl as an experimental sound generator. :smiley: But it’s obvious that this isn’t easy and also not the focus of Faust. :wink: )

AFAICS, this is what is (somewhat) tried in:

And a [WIP] also Faust in Julia package.