Skip to content

Compiling Faust code for Bela

giuliomoro edited this page Mar 15, 2019 · 8 revisions

To be able to run Faust on Bela, you need to do some setup on your computer and on the Bela board. Faust generates some very large C++ files that may take forever (many minutes) to compile on the Bela board. It is therefore highly recommended that - before using Faust on Bela - you go through setting up distcc to get cross-builds happening, offloading the compilation task to the host computer. This is explained here. However, this step is optional and for very small Faust projects you may be fine without it.

So, here we go:

Host configuration

Pre-requisites: cmake, PkgConfig. Install them with your favourite package manager / googling skills. On a Mac with brew installed, it would be something like:

brew install cmake PkgConfig

Download Faust, checkout the latest known working version, build, install

git clone &&\
git checkout 09ad59955eccb522382d60d58fb648e9b0fb4a78 &&\
cd faust &&\
make -j4 &&\
sudo make install

If you do want to set up the distcc cross-compiling environment, optional but recommended (see above), follow the instructions here.

Board configuration:

There is no compulsory step to do to prepare the board. There are two optional steps, both recommended:

  • you may want to setup distcc to speed up builds (yes it's optional, but it's the third time we recommend it, so please do it!), see notes above and follow the instructions here if you are interested.
  • install a library on the board that will allow you to interact with the Faust GUI in the browser:

Install the libraries for the Faust GUI

  • download this file, a pre-compiled version of the http library that comes with Faust
scp* libHTTPDFaust.a root@

Install libmicrohttpd-dev on the board:

  • connect the board to the internet and run
apt-get install libmicrohttpd-dev


Great, at this point all should be done and ready to go. On the host, go into faust/examples/bela and run:

faust2bela -tobela simpleFX_Analog.dsp

this should build and run the project. (If it takes forever to build, maybe it's about time you consider setting up distcc, as "suggested" above.) Plug some signal into your Bela and you will hear it processed through drive, flanger, reverb! Bela's analog inputs will be controlling some of the parameters.

Now, if you did the optional step of installing the library for the GUI, you can repeat the above but with the -gui option:

faust2bela -tobela -gui simpleFX_Analog.dsp

Then find the GUI at . Some of the parameters displayed are controlled by Bela's analog inputs, and cannot be modified through the GUI. The others can be controlled in real-time through the GUI. Here is an example of what a Faust GUI looks like: Images/faust-gui.jpg

If you are looking into using external MIDI devices, you will need to pass the -midi -nvoices option, as per regular Faust, e.g.:

faust2bela -tobela -midi -nvoices 4 -gui /path/to/faust/file.dsp

Some Bela-specific examples can be found in the faust/examples/bela folder of faust (online version), and an illustrated README file is also there

Learn all about Faust:

The great Faust manual and the Faust playground: an online playground to experiment with connecting together Faust patches.

Interfacing with Bela's analog and digital pins

To interface Bela's analog and digital inputs, you need to edit the labels to follow the naming scheme: [BELA:ANALOG_0] or [BELA:DIGITAL_0]:

freq     = hslider("[1]Frequency[BELA:ANALOG_0]", 440 ,460, 1500, 1)
pressure = hslider("[2]Pressure[style:knob][BELA:ANALOG_4]", 0.96, 0.2, 2.0, 0.01)
gate     = hslider("[0]ON/OFF (ASR Envelope)[BELA:DIGITAL_0]",0,0,1,1);

See also this dsp file as an example.

An alternative, probably not working, discouraged, convoluted way of doing things:

This is a bit more convoluted and requires installing and compiling faust on your board and using a special Bela project. Follow the instructions here:

Clone this wiki locally
You can’t perform that action at this time.