# FAUST (langage)

FAUST (acronyme anglais de Functional AUdio STream) est un langage de programmation dédié purement fonctionnel, conçu pour les applications de traitement du signal audio sous différentes formes comme les bibliothèques logicielles, les plugins audio ou les logiciels. Ce langage est développé par le GRAME depuis 2002, l'implémentation principale est un logiciel libre sous licence GPLv2.
Un programme en FAUST traduit un processeur de signal, c'est-à-dire une fonction mathématique qui transforme un signal d'entrée en un signal de sortie.
Le Faust Playground est une application web en ligne, permettant d'assembler simplement des programmes écrits en Faust avec une interface graphique. Il peut exporter vers les différentes plateformes compatibles FAUST et créer des plugins.

## Vue d'ensemble

La modèle de programmation FAUST associe l'approche d'une programmation fonctionnelle avec une syntaxe de schéma fonctionnel.
Un programme FAUST ne décrit pas un son ou un groupe de sons mais un traitement du signal audio numérique. Le programme source est organisé comme un ensemble de définitions, comprenant au minimum la définition du mot clé process, équivalent au main en C, qui opère sur les données d'entrée.

## Exemples

Le premier exemple décrit une fonction qui génère du silence :
| code | diagramme | fonction |
| process = 0; | | $s(t)=0$ |
Le second exemple copie le signal d'entrée en sortie. Il utilise la primitive _ qui est la fonction identité :
| code | diagramme | fonction |
| process = _; | | $s(t)=e(t)$ |
L'addition de deux signaux d'entrée est réalisée par la primitive + :
| code | diagramme | fonction |
| process = +; | | $s(t)=e1(t)+e2(t)$ |
La plupart des primitives en FAUST sont identiques à leur équivalent en C pour les nombres, mais appliquées à des signaux. Par exemple la primitive sin applique la fonction C sin à chaque échantillon du signal d'entrée :
| code | diagramme | fonction |
| process = sin; | | $s(t)=sin(e(t))$ |
Certaines sont spécifiques à FAUST, comme l'opérateur de retard @ qui retarde le signal d'entrée d'un certain délai, dans cet exemple, de 10 échantillons :
| code | diagramme | fonction |
| process = _ @ 10; | | $s(t)=e(t-10)$ |

## Génération d'applications musicales

À partir de fichiers d'architecture logicielle spécifiques, un programme FAUST peut générer un code informatique pour une grande diversité de plates-formes logicielles et de formats de plugins. Ces fichiers d'architecture sont définis comme des encapsuleurs et décrivent les interactions entre l'hôte logiciel et l'interface graphique. En 2015, plus de 10 architectures sont gérées, avec la possibilité d'en créer de nouvelles.
Fichiers d'architecture disponibles pour FAUST :
| Nom du fichier | Nom de l'architecture | Type d'architecture |
| alsa-gtk.cpp | ALSA + GTK | application |
| alsa-qt.cpp | ALSA + Qt4 | application |
| android.cpp | Android | application |
| au.cpp | Audio Unit | plug-in |
| ca-qt.cpp | Core Audio + Qt4 | application |
| ios-coreaudio.cpp | iOS pour iPhone et iPad | application |
| jack-gtk.cpp | JACK + GTK | application |
| jack-qt.cpp | JACK + QT4 | application |
| ladspa.cpp | LADSPA | plug-in |
| max-msp.cpp | Max/MSP | plug-in |
| pd.cpp | Puredata | plug-in |
| q.cpp | langage Q | plug-in |
| supercollider.cpp | SuperCollider | plug-in |
| vst.cpp | VST | plug-in |
| vsti-mono.cpp | Instrument monophonique VST | plug-in |
| vsti-poly.cpp | Instrument polyphonique VST | plug-in |