Articulo de referencia

FALLO (lenguaje de programación)

{{cite web |url=https://github.com/grame-cncm/faust/ |title=grame-cncm: faust |website=[[GitHub]]}} "},"latest release date":{"wt":"{{Start date and age|2025|12|14}}"},"programm...

FAUST ( Functional Audio Stream ) es un lenguaje de programación visual puramente funcional , basado en texto y específico de dominio, para implementar algoritmos de procesamiento de señales en forma de bibliotecas , complementos de audio o aplicaciones independientes. Un programa FAUST representa un procesador de señales: una función matemática que se aplica a una señal de entrada y se envía como salida. Es software libre y de código abierto, distribuido bajo la Licencia Pública General de GNU (GPL).

Descripción general

El modelo de programación FAUST combina un enfoque de programación funcional con una sintaxis de diagrama de bloques :

  • El enfoque de programación funcional proporciona un marco natural para el procesamiento de señales . Las señales digitales se modelan como funciones discretas del tiempo, los procesadores de señales como funciones de segundo orden que operan sobre ellas, y los operadores de composición de diagramas de bloques de FAUST , utilizados para combinar procesadores de señales, como funciones de tercer orden, etc.
  • Los diagramas de bloques, incluso si son puramente textuales como en FAUST, promueven un enfoque modular para el procesamiento de señales que cumple con los hábitos de los ingenieros de sonido y los desarrolladores de audio. Un programa FAUST no describe un sonido o un grupo de sonidos, sino un procesador de señales . El código fuente del programa está organizado como un conjunto de definiciones con al menos la definición de la palabra clave process(el equivalente de mainen C):
proceso = ... ;

El compilador FAUST traduce el código FAUST a un objeto C++ , que luego puede interactuar con otro código C++ para producir un programa completo.

También puede realizar compilación cruzada (traducción) de la especificación de procesamiento de señales digitales (DSP) FAUST a: C , C++ , C# , Cmajor, Codebox ( Max ), D , intérprete, Java , JSFX ( REAPER ), LLVM IR, Julia , Rust y WebAssembly (Wast/Wasm).

El código generado funciona a nivel de muestra. Por lo tanto, es adecuado para implementar funciones DSP de bajo nivel, como filtros recursivos . El código también puede integrarse . Es autónomo y no depende de ninguna biblioteca DSP ni sistema de ejecución . Presenta un comportamiento muy determinista y un tamaño de memoria constante.

La semántica de FAUST se caracteriza por su simplicidad y precisión. Esto permite que el compilador de FAUST se guíe semánticamente . En lugar de compilar un programa literalmente, compila la función matemática que representa. Esto puede fomentar la reutilización de componentes. Además, tener acceso a la semántica exacta de un programa FAUST simplifica los problemas de preservación.

FAUST es un lenguaje textual orientado a diagramas de bloques. Combina dos enfoques: programación funcional y diagramas de bloques algebraicos , que se construyen mediante composición de funciones . Para ello, FAUST se basa en un álgebra de diagramas de bloques con cinco operaciones de composición.

Código de ejemplo

Los programas FAUST definen una processfunción que opera sobre los datos de entrada. Esto es análogo a la mainfunción en la mayoría de los lenguajes de programación. El siguiente es un ejemplo que produce silencio:

proceso = 0 ;

El segundo ejemplo copia la señal de entrada a la salida. Implica la _primitiva que denota la función identidad para señales:

proceso = _ ;

Otro ejemplo suma una señal estéreo en una señal mono utilizando la +primitiva:

proceso = + ;
Diagramas de bloques generados por Faust a partir de algunos programas sencillos.

La mayoría de las primitivas de FAUST son análogas a sus contrapartes en C para números, pero se aplican a señales. Por ejemplo, la primitiva de FAUST sinopera sobre una señal X aplicando la función de Csin a cada muestra X[t]. Todas las funciones numéricas de C tienen su equivalente en FAUST. Algunas primitivas de procesamiento de señales son específicas de FAUST. Por ejemplo, el operador de retardo @toma dos señales de entrada: X (la señal que se va a retardar) y D (el retardo que se va a aplicar), y produce una señal de salida Y tal que Y(t) = X(t − D(t)).

Composición del diagrama de bloques

A diferencia de los lenguajes de programación visual tipo Max , donde el usuario realiza conexiones manuales, las primitivas de FAUST se ensamblan en diagramas de bloques mediante un conjunto de operaciones de composición de diagramas de bloques de alto nivel .

Ejemplos sencillos de composición de diagramas de bloques

Utilizando el operador de composición secuencial, :la salida de +se puede enrutar a la entrada de abspara calcular el valor absoluto de la señal:

proceso = + : abs ;

Aquí se muestra un ejemplo de composición paralela utilizando el ,operador que dispone sus expresiones izquierda y derecha en paralelo. Esto es análogo a un cable estéreo.

proceso = _ , _ ;

Estos operadores se pueden combinar arbitrariamente. El siguiente código multiplica una señal de entrada por 0,5:

proceso = _ , 0.5 : * ;

Lo anterior puede reescribirse en forma currificada :

proceso = * ( 0.5 );

El operador de composición recursiva ~se puede utilizar para crear diagramas de bloques con ciclos (que incluyen un retardo implícito de una muestra). He aquí un ejemplo de un integrador que toma una señal de entrada X y calcula una señal de salida Y tal que Y(t) = X(t) + Y(t−1):

proceso = + ~ _ ;

Generación de solicitudes completas

Mediante archivos de arquitectura específicos , un programa FAUST puede utilizarse para generar código para diversas plataformas y formatos de complementos. Estos archivos de arquitectura actúan como envoltorios y describen las interacciones con el sistema de audio y la interfaz gráfica de usuario del host. A partir de 2021Se admiten más de 30 arquitecturas y cualquiera puede implementar otras nuevas.

Captura de pantalla de mixer.dsp (disponible en la distribución FAUST) utilizando la arquitectura jack-qt.

Generación de diagramas de bloques

Una opción útil permite generar la representación del diagrama de bloques del programa como uno o más archivos gráficos SVG.

Es útil observar la diferencia entre el diagrama de bloques y el código C++ generado. La clave no reside en compilar el diagrama de bloques literalmente, sino la función matemática que representa. Los compiladores modernos de C/C++ tampoco compilan los programas literalmente. Sin embargo, debido a la compleja semántica de C/C++ (debido a efectos secundarios, alias de punteros, etc.), no pueden ir muy lejos en esa dirección. Esta es una clara ventaja de un lenguaje puramente funcional: permite a los compiladores realizar optimizaciones muy avanzadas.

Semántica similar a la de las flechas

La semántica de Faust es casi idéntica a la de la clase de tipos Arrows de Haskell . Sin embargo, la clase Arrow no está vinculada a procesadores de señales.

Los combinadores Arrow son más restrictivos que sus contrapartes FAUST; por ejemplo, se conserva el anidamiento de la composición paralela y las entradas de los operandos &&&deben coincidir exactamente.

Premios

Referencias

  1. «grame-cncm: fausto» . GitHub .
  2. "Premios de Ciencia Abierta para Software de Investigación de Código Abierto" . Ouvrir la Science . 2022-02-07 . Consultado el 2025-12-04 .
  • Michon, Romain; Smith, Julius O. III (2011). "Faust-STK: un conjunto de modelos físicos lineales y no lineales para el lenguaje de programación Faust" (PDF) . Actas de la 11.ª Conferencia Internacional sobre Efectos de Audio Digital (DAFx-11) : 199–204 .
  • Fober, Dominique; Orlarey, Yann; Letz, Stéphane (2011). "Faust Architectures Design and OSC Support" (PDF) . Actas de la 11.ª Conferencia Internacional sobre Efectos de Audio Digital (DAFx-11) : 213–216 .
  • Smith, Julius O. III; Michon, Romain (2011). "Filtros de escalera de paso total no lineales en Faust" (PDF) . Actas de la 11.ª Conferencia Internacional sobre Efectos de Audio Digital (DAFx-11) : 361–364 .
  • Jouvelot, Pierre; Orlarey, Yann (2011). "Tipos de vectores dependientes para la estructuración de datos en Multirate Faust" (PDF) . Computer Languages, Systems & Structures . 37 (3): 113– 131. doi : 10.1016/j.cl.2011.03.001 .
  • Smith III, Julius O. (2011). "Procesamiento de señales de audio en Fausto" (PDF) .
  • Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2010). "Paralelización automática de aplicaciones de audio con Faust" (PDF) . Actas del Congrès Français d'Acoustique .
  • Letz, Stéphane; Orlarey, Yann; Fober, Dominique (2010). "Planificador de robo de trabajo para paralelización automática en Faust" (PDF) . Actas de la Conferencia de Audio Linux (LAC-2010) .
  • Gräf, Albert (2010). "Extensión de reescritura de términos para el lenguaje de programación Faust" (PDF) . Actas de la 8.ª Conferencia Internacional de Audio Linux (LAC-2010) : 117.
  • Barthélemy, Jérôme; Bonardi, Alain; Orlarey, Yann; Lemouton, Serge; Ciavarella, Raffaele; Barkati, Karim (2010). "Primeros pasos hacia una organología de instrumentos virtuales en la música por ordenador" (PDF) . Actas de la Conferencia Internacional de Música por Ordenador de 2010 (ICMA-2010) : 369–372 .
  • Jouvelot, Pierre; Orlarey, Yann (2010). "Tipos de vectores dependientes para Faust multivelocidad" (PDF) . Actas de la 7.ª Conferencia de Computación de Sonido y Música (SMC-2010) : 345–352 . Archivado del original (PDF) el 7 de abril de 2012. Consultado el 11 de octubre de 2011 .
  • Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2009). "Adding Automatic Parallelization to Faust" (PDF) . Actas de la Linux Audio Conference (LAC-2009) .
  • Jouvelot, Pierre; Orlarey, Yann (2009). "Semántica de Fausto multigrado". Informes técnicos del Centre de Recherche en Informatique de MINES ParisTech (PDF) .
  • Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009). Paralelización de aplicaciones de audio con Faust (PDF) (Informe). Archivado del original (PDF) el 25 de abril de 2012. Recuperado el 11 de octubre de 2011 .
  • Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2009). "Fausto: un enfoque funcional eficiente para la programación DSP". Nuevos paradigmas computacionales para la música por computadora (PDF) . Edición Delatour. ISBN 978-2-7521-0054-2.
  • Orlarey, Yann; Letz, Stéphane; Fober, Dominique (2008). "Tecnologías multinúcleo en Jack y Fausto" (PDF) . Actas de la Conferencia Internacional de Música por Computadora de 2010 (ICMC-2008) .
  • Gräf, Albert (2007). "Interfaz de Pure Data con Faust" (PDF) . Actas de la 5ª Conferencia Internacional de Audio Linux (LAC2007) : 24.
  • Smith III, Julius O. (2007). «Apéndice K. Filtrado digital en Faust y PD» . Introducción a los filtros digitales: con aplicaciones de audio . W3K Publishing. págs.  417–?. ISBN 978-0-9745607-1-7.
  • Gräf, Albert; Kersten, Stefan; Orlarey, Yann (2006). "Programación DSP con Faust, Q y SuperCollider" (PDF) . Actas de la 4ª Conferencia Internacional de Audio Linux (LAC2006) .
  • Trausmuth, Robert; Dusek, Christian; Orlarey, Yann (2006). "Uso de Faust para la programación de FPGA" (PDF) . Actas de la 9.ª Conferencia Internacional sobre Efectos de Audio Digital (DAFx-09) .
  • Orlarey, Yann; Fober, Dominique; Letz, Stephone (2005). "Demostración del lenguaje de procesamiento de señales Faust" . Actas de la Conferencia Internacional de Música por Computadora . Vol.  2005. Computer Music Association. pág.  286.
  • Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2004). "Aspectos sintácticos y semánticos de Fausto". Soft Computing (PDF) .
  • Scaringella, Nicolás; Orlarey, Yann; Fober, Dominique (2003). «Vectorización automática en Fausto» (PDF) . Revista de informática musical (JIM-2003) .
  • Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002). "Un enfoque algebraico para la construcción de diagramas de bloques" (PDF) . Revista de informática musical (JIM-2002) .
  • Orlarey, Yann; Fober, Dominique; Letz, Stéphane (2002). "Un álgebra para lenguajes de diagramas de bloques" (PDF) . Actas de la Conferencia Internacional de Música por Computadora (ICMA-2002) .
  • Sitio web oficial , compilador en línea, soporte, documentación, noticias, etc.
  • FAUST en GitHub