Original author(s) | Yann Orlarey, Dominique Fober, Stéphane Letz |
---|---|
Developer(s) | GRAME, Centre National de Création Musicale |
Initial release | 2002 |
Stable release |
0.9.67 / May 19, 2014
|
Written in | C++ |
Operating system | Linux, OS X, Windows, Unix |
Type | Functional programming language for audio signal processing |
License | GPL |
Website | faust |
FAUST (Functional AUdio STream) is a domain-specific purely functional programming language for implementing signal processing algorithms in the form of libraries, audio plug-ins, or standalone applications. A FAUST program denotes a signal processor: a mathematical function that is applied to some input signal and then fed out.
The FAUST programming model combines a functional programming approach with a block diagram syntax:
A FAUST program doesn’t describe a sound or a group of sounds, but a signal processor. The program source is organized as a set of definitions with at least the definition of the keyword process
(the equivalent of main
in C):
The FAUST compiler translates FAUST code into a C++ object, which may then interface with other C++ code to produce a full program.
The generated code works at the sample level. It is therefore suited to implement low-level DSP functions like recursive filters. The code may also be embedded. It is self-contained and does not depend on any DSP library or runtime system. It has a very deterministic behavior and a constant memory size.
The semantics of FAUST is driven to be simple and well-defined. It allows the FAUST compiler to be semantically driven. Instead of compiling a program literally, it compiles the mathematical function it denotes. This may promote component reuse. Moreover, having access to the exact semantics of a FAUST program can simplify preservation issues.