# FAUST

FAUST (Functional Audio Stream) es un lenguaje de programación dedicado funcional, diseñado para aplicaciones de procesamiento de señales de audio en diferentes formas, como bibliotecas de software, complementos de audio o software . Este lenguaje ha sido desarrollado por GRAME desde el año 2002, la principal implementación es software libre bajo licencia GPLv 2.
Un programa en FAUST se traduce como un procesador de señal, es decir una función matemática que transforma una señal de entrada en una señal de salida.
Faust Play Ground es una aplicación web en línea que permite ensamblar fácilmente programas escritos en Faust con una interfaz gráfica. Puede exportar a diferentes plataformas compatibles con FAUST y crear complementos.

## Descripción general

El modelo de programación FAUST combina el enfoque de una programación funcional con una sintaxis basada del diagrama de bloques .
Un programa escrito en FAUST no hace una descripción de un o grupo de sonidos sino que realiza un procesamiento de la señal de audio digital . El programa de base esta organizado como un conjunto de definiciones, incluyendo al menos la definición de la palabra clave process, equivalente a main en C, que opera con los datos de entrada.

## Ejemplos

El primer ejemplo describe una función que genera un "silencio".
| codificado | diagrama | función |
| process = 0; | | $s(t)=0$ |
El segundo ejemplo copia la señal de entrada a la salida. Utiliza el carácter _ que es la función identidad. :
| codificado | diagrama | función |
| process = _; | | $s(t)=e(t)$ |
la suma de las dos señales de entrada se realiza mediante el carácter + :
| codificado | diagrama | función |
| process = +; | | $s(t)=e1(t)+e2(t)$ |
Mayormente los signos de FAUST se parecen a su equivalente en C para números, pero se aplican a señales. Por ejemplo, la indicación sin aplica la función C sin a cada muestra de la señal de entrada. :
| código | diagrama | función |
| process = sin; | | $s(t)=sin(e(t))$ |
Algunos son específicos de FAUST, como el operador de retardo @ que retrasa la señal de entrada una cierta cantidad de tiempo, en este ejemplo, 10 muestras. :
| código | diagrama | función |
| process = _ @ 10; | | $s(t)=e(t-10)$ |

## Generación de aplicaciones musicales.

A partir de archivos de arquitectura de software específicos, un programa FAUST puede generar código informático para una amplia diversidad de plataformas de software y formatos de complementos . Estos archivos de arquitectura se definen como contenedores y describen las interacciones entre el host del software y la GUI . En 2015 se gestionan más de 10 arquitecturas, con posibilidad de crear nuevas.
Archivos de arquitectura disponibles para FAUST :
| Nombre del archivo | Nombre de la arquitectura | Tipo de arquitectura |
| alsa-gtk.cpp | ALSA + GTK | solicitud |
| alsa-qt.cpp | ALSA+ Qt4 | solicitud |
| android.cpp | Androide | solicitud |
| au.cpp | Unidad de audio | Plug-in |
| ca-qt.cpp | Audio central + Qt4 | solicitud |
| ios-coreaudio.cpp | iOS para iPhone y iPad <br /> | solicitud |
| jack-gtk.cpp | JACK + GTK | solicitud |
| jack-qt.cpp | JACK + QT4 | solicitud |
| ladspa.cpp | LADSPA | plug-in |
| max-msp.cpp | Máx/MSP | plug-in |
| pd.cpp | Pure data | plug-in |
| q.cpp | lenguaje q | plug-in |
| supercollider.cpp | Super Collider | plug-in |
| vst.cpp | VST | plug-in |
| vsti-mono.cpp | Instrumento monofónico VST | plug-in |
| vsti-poly.cpp | Instrumento polifónico VST | plug-in |