Writing plugins for Elk using FAUST

FAUST is an amazing functional language which can generate very easily efficient plugins that run straight away for Elk.

We created this CMake template to straightforward the process to use FAUST with our cross-compilation toolchain:

You will need to have the VST 2 SDK header available for using this.


More information and some pre-compiled binaries from FAUST examples can be found on the repository used for the FAUST+Elk Workshop given at CCRMA in February 2020:

I’ve just ordered the bundle for Raspberry Pi and am looking forward to developing some things in Faust. I’ve used Faust on

(1) an old Macbook with Ubuntu Studio and a USB audio interface, but
(a) too many xruns/glitches
(b) latency borders on unacceptable
© using wifi makes (a) even worse, somewhat ruling out OSC

(2) A bela, but
(a) underpowered for what I want to do algorithm wise

(3) An ESP32-A1S based audio dev board, but
(a) underpowered for what I want to do algorithm wise
(b) Native support for OSC lacking, I had to hack a workaround

1 Like

Hi @Digital-Larry,
it seems like FAUST on an Elk Pi might be the sweet spot for your requirements, keep us updated if you got anything interesting!

1 Like

So, is the general strategy simply to make an LV2 or vst plugin from Faust code? In Faust, as far as I know, native OSC support is handled via the UI elements. I’ve done some stuff recently on the ESP32, whose Faust port lacks native OSC support at the moment. I used some UDP/OSC code and set up some real time tasks to catch and filter messages coming from TouchOSC, then send messages to the Faust algorithm using “sendParamValue()” but this still use hooks into the Faust code’s UI elements. So I’m wondering how one goes about writing an LV2 plugin with Faust without UI elements that works with OSC.



Hi Larry,
yes, the basic strategy is just using one of the plugins architecture for FAUST to generate a plugin that SUSHI can host.

When we prepared the CMake template, SUSHI’s LV2 support was not very mature so we only prepared a VST 2 one. However, it should be pretty easy to modify that CMake’s project to generate an LV2 plugin instead.

You don’t need to use FAUST’s internal OSC support. As long as the parameters are exposed to the host (and they are by default for anything that has a UI element in FAUST), SUSHI will take care of exposing OSC paths for you.


Thanks a lot for giving us this useful information :grinning: