What is Faust?
FAUST (Functional Audio Stream) is a functional programming language specifically designed for real-time signal processing and synthesis. FAUST targets high-performance signal processing applications and audio plug-ins for a variety of platforms and standards.
Various principles have guided the design of FAUST:
FAUST is a specification language. It aims at providing an adequate notation to describe signal processors from a mathematical point of view. FAUST is, as much as possible, free from implementation details.
FAUST programs are fully compiled, not interpreted. The compiler translates FAUST programs into equivalent C++ programs taking care of generating the most efficient code. The result can generally compete with, and sometimes even outperform, C++ code written by seasoned programmers.
The generated code works at the sample level. It is therefore suited to implement low-level DSP functions like recursive filters. Moreover the code can be easily embedded. It is self-contained and doesn’t depend of any DSP library or runtime system. It has a very deterministic behavior and a constant memory footprint.
The semantic of FAUST is simple and well defined. This is not just of academic interest. It allows the FAUST compiler to be semantically driven. Instead of compiling a program literally, it compiles the mathematical function it denotes. This feature is useful for example to promote components reuse while preserving optimal performance.
FAUST is a textual language but nevertheless block-diagram oriented. It actually combines two approaches: functional programming and algebraic block-diagrams. The key idea is to view block-diagram construction as function composition. For that purpose, FAUST relies on a block-diagram algebra of five composition operations (: , ~ <: :>).
Thanks to the notion of architecture, FAUST programs can be easily deployed on a large variety of audio platforms and plugin formats without any change to the FAUST code.
Signal Processor Semantic
A FAUST program describes a signal processor. The role of a signal processor is to transforms a group of (possibly empty) input signals in order to produce a group of (possibly empty) output signals. Most audio equipments can be modeled as signal processors. They have audio inputs, audio outputs as well as control signals interfaced with sliders, knobs, vu-meters, etc.