The Faust Programming Language as a Platform for Creating Hybrid Acoustical and Digital Musical Instruments

Romain Michon,a,b Yann Orlarey,a
Stéphane Letz,a and Dominique Fobera

---
a. GRAME-CNCM, Lyon (France)
b. CCRMA, Stanford University (USA)


Forum Acusticum -- Dec. 9-11, 2020 -- Lyon, France

What's a Hybrid Acoustical and Digital Musical Instrument?

An instrument combining physical and virtual elements in an attempt to take the best of both "worlds."

The Korg Wavedrum combines an acoustical drum membrane and virtual resonators.

Dan Schlessinger's Kalichord uses plastic tines equipped with piezos to drive string physical models.

There only exists a few software and hardware platforms that can be used to design hybrid instruments. The "ideal" platform should:

  • be easily programmable,
  • provide sensor inputs,
  • have multiple audio inputs and outputs,
  • be easily embeddable.

Most hardware platforms used by the music technology/computer music communities provide such features but their programming remains challenging.

What is Faust?

  • Functional programming language for real-time audio signal processing
  • Faust DSP code can be translated to C, C++, JAVA, LLVM, WebAssembly, etc. through the Faust compiler
  • Faust can generate ready-to-use objects for a wide range of platforms ("architecture"/wrapper system): mobile apps, web apps, standalones, embedded systems, audio plug-ins, etc.
  • Faust provides a large collection of signal processing libraries.
  • Faust is increasingly used in the industry, in research, in education, etc.

In recent years, Faust has been supporting an increasing number of embedded systems:

  • Mobile Devices
  • The BELA
  • The Raspberry Pi
  • The Teensy
  • The ESP32
  • Etc.

In this presentation, we give an overview of how Faust can be used to design hybrid musical instruments using various platforms and approaches.

Mobile devices provide:

  • built-in stereo audio in/out
  • built-in sensors (i.e., touch screen, motion sensors, etc.)
  • potential sensor inputs through a mircocontroller connected to them through MIDI over USB
  • they are completely standalone/battery powered

Faust on Mobile Devices

Example of a Graphical User Interfaces generated by faust2ios, faust2android, and faust2smarkeyb (respectively)

Faust on Embedded Linux

Faust is well supported on Linux and can therefore target most embedded Linux systems with optimized support on the Raspberry Pi, the BELA, and the Elk.

Faust on Microcontrollers

Faust can be used to program the Teensy (left) and the ESP32 (right) microcontrollers

Examples of Hybrid Instruments Made With Faust

The BladeAxe

Instruments from Music 250a
(here Luigi Sambuy's Sweep and Collisions)

Future Works

Towards FPGAs* for ultra-low latency and advanced physical models

*FAST project: https://fast.grame.fr

Thanks! :)

Contact: michon@grame.fr

---

Slides of this presentation:

https://ccrma.stanford.edu/~rmichon/talks/fa20