Mot-clé : Audio

2018

This paper demonstrates how FAUST, a functional programming language for sound synthesis and audio processing, can be used to develop efficient audio code for the Web. After a brief overview of the language, its compiler and the architecture system allowing to deploy the same program as a variety of targets, the generation of WebAssembly code and the deployment of specialized WebAudio nodes will be explained. Several use cases will be presented. Extensive bench... Lire la suite

This paper demonstrates how FAUST, a functional programming language for sound synthesis and audio processing, can be used to develop efficient audio code for the Web. After a brief overview of the language, its compiler and the architecture system allowing to deploy the same program as a variety of targets, the generation of WebAssembly code and the deployment of specialized WebAudio nodes will be explained. Several use cases will be presented. Extensive benchmarks to compare the performance of native and WebAssembly versions of the same set of DSP have be done and will be commented

Stéphane Letz, Yann Orlarey, Dominique Fober

Mots-clés :
Webassembly, Webaudio, Audio, Compilation, Domain Specific Language, DSP, FAUST, Signal processing

2017

Faust audio DSP language for JUCE

Linux Audio Conference, 2017, Saint-Etienne, France. pp.61-68

Faust [Functional Audio Stream] is a functional programming language specifically designed for real- time signal processing and synthesis [1]. It consists of a compiler that translates a Faust program into an equivalent C++ program, taking care of generat- ing the most efficient code. JUCE is an open-source cross-platform C++ application framework devel- oped since 2004, and bought by ROLI1 in Novem- ber 2014, used for the development of desktop and mobile appl... Lire la suite

Faust [Functional Audio Stream] is a functional programming language specifically designed for real- time signal processing and synthesis [1]. It consists of a compiler that translates a Faust program into an equivalent C++ program, taking care of generat- ing the most efficient code. JUCE is an open-source cross-platform C++ application framework devel- oped since 2004, and bought by ROLI1 in Novem- ber 2014, used for the development of desktop and mobile applications. A new feature to the Faust environnement is the addition of architectures files to provide the glue between the Faust C++ output and the JUCE framework. This article presents the overall design of the architecture files for JUCE.

Adrien Albouy, Stéphane Letz

Mots-clés :
Audio, Domain Specific Language, DSP, FAUST, JUCE, Real-time

The Faust architecture files ecosystem is regularly enriched with new targets to deploy Digital Signal Processing (DSP) programs. This paper presents re-cently developed techniques to expand the standard one DSP source, one program or plugin model, and to better control parameter changes during the audio computation. Sample accurate control and polyphonic instruments definition have been introduced, and will be explained particularly in the context of MIDI cont... Lire la suite

The Faust architecture files ecosystem is regularly enriched with new targets to deploy Digital Signal Processing (DSP) programs. This paper presents re-cently developed techniques to expand the standard one DSP source, one program or plugin model, and to better control parameter changes during the audio computation. Sample accurate control and polyphonic instruments definition have been introduced, and will be explained particularly in the context of MIDI control.

Stéphane Letz, Yann Orlarey, Dominique Fober, Romain Michon

Mots-clés :
Audio, DSP programming, FAUST, MIDI

2016

Embedding native audio-processing in a score following system with quasi sample accuracy

ICMC 2016 - 42th International Computer Music Conference, Sep 2016, Utrecht, Netherlands

This paper reports on the experimental native embedding of audio processing into the Antescofo system, to leverage timing precision both at the program and system level, to accommodate time-driven (audio processing) and event-driven (control) computations, and to preserve system behaviour on multiple hardware platforms. Here native embedding means that audio computations can be specified using dedicated DSLs (e.g., Faust) compiled on-the-fly and driven by the A... Lire la suite

This paper reports on the experimental native embedding of audio processing into the Antescofo system, to leverage timing precision both at the program and system level, to accommodate time-driven (audio processing) and event-driven (control) computations, and to preserve system behaviour on multiple hardware platforms. Here native embedding means that audio computations can be specified using dedicated DSLs (e.g., Faust) compiled on-the-fly and driven by the Antescofo scheduler. We showcase results through an example of an interactive piece by composer Pierre Boulez, Anthèmes 2 for violin and live electronics.

INteractivité dans l'Ecriture De l'Interaction et du Temps

Pierre Donat-Bouillud, Jean-Louis Giavitto, Arshia Cont, Nicolas Schmidt, Yann Orlarey

Mots-clés :
Samplerate, Audio, Scheduling, Buffer, Multimedia

2014

FAUSTLIVE, Just-In-Time Faust Compiler... and much more

Linux Audio Conference, ZKM, May 2014, Karlsruhe, Germany

FaustLive is a standalone just-in-time Faust compiler. It tries to bring together the conve- nience of a standalone interpreted language with the e ciency of a compiled language. Based on libfaust, a library that provides a full in- memory compilation chain, FaustLive doesn't require any external tool (compiler, linker, etc.) to translate Faust source code into binary ex- ecutable code. Thanks to this technology FaustLive provides several advanced features. For... Lire la suite

FaustLive is a standalone just-in-time Faust compiler. It tries to bring together the conve- nience of a standalone interpreted language with the e ciency of a compiled language. Based on libfaust, a library that provides a full in- memory compilation chain, FaustLive doesn't require any external tool (compiler, linker, etc.) to translate Faust source code into binary ex- ecutable code. Thanks to this technology FaustLive provides several advanced features. For example it is possible, while a Faust application is running, to modify its behavior on-the- y without any sound interruption. It is also possible to mi- grate a running application from one machine to another, etc.

INteractivité dans l'Ecriture De l'Interaction et du Temps

Sarah Denoux, Stéphane Letz, Yann Orlarey, Dominique Fober

Mots-clés :
Audio, Faust, DSP programming, Remote processing and interfacing

LibAudioStream est un moteur de rendu audionumérique disponible sous forme de librairie, permettant de manipuler des ressources audio à travers le concept de flux. Ce moteur est facilement intégrable dans des applications qui nécessitent de jouer des fichiers son, des montages audio, et d'appliquer des effets et des traitements DSP en temps-réel. Une algèbre de description, de composition et de transformation des flux audio permet de construire des expressions... Lire la suite

LibAudioStream est un moteur de rendu audionumérique disponible sous forme de librairie, permettant de manipuler des ressources audio à travers le concept de flux. Ce moteur est facilement intégrable dans des applications qui nécessitent de jouer des fichiers son, des montages audio, et d'appliquer des effets et des traitements DSP en temps-réel. Une algèbre de description, de composition et de transformation des flux audio permet de construire des expressions complexes, que l'on va pouvoir ordonnancer à des dates précises dans le futur, et dont le rendu sera ensuite exécuté en temps réel le moment venu. L'application a un contrôle à l'échantillon près de ce qui est fait et à quelmoment, tout en étant déchargée des calculs audio temps réel proprement dit. Ce rapport donne une description formelle du langage d'expressions et des fonctionnalités de LibAudioStream.

INteractivité dans l'Ecriture De l'Interaction et du Temps

Stéphane Letz

Mots-clés :
Audio, Faust

FaustLive : Un compilateur à la volée pour Faust... et bien plus encore

Journées d'Informatique Musicale, 2014, Bourges, France

FaustLive est une application qui, grâce à son compilateur Faust embarqué, se propose de réunir le confort d'un langage interprété avec l\éfficacité d'un langage compilé. Basée sur libfaust, une librairie qui offre une chaîne de compilation complète en mémoire, FaustLive ne requiert aucun outil externe (compilateur, éditeur de lien, ...) pour traduire du code FAUST en code machine exécutable. Par l'intermédiaire de cette technologie, FaustLive offre de multiple... Lire la suite

FaustLive est une application qui, grâce à son compilateur Faust embarqué, se propose de réunir le confort d'un langage interprété avec l\éfficacité d'un langage compilé. Basée sur libfaust, une librairie qui offre une chaîne de compilation complète en mémoire, FaustLive ne requiert aucun outil externe (compilateur, éditeur de lien, ...) pour traduire du code FAUST en code machine exécutable. Par l'intermédiaire de cette technologie, FaustLive offre de multiples fonctionnalités. Par exemple, il est possible de glisser un nouveau fichier DSP sur une application FAUST en fonctionnement pour remplacer son comportement et ce, sans interruption du son. Il est aussi possible de transférer une application qui fonctionne en local, sur une autre machine, même si celle-ci utilise un système d\éxploitation différent.

Sarah Denoux, Stéphane Letz, Yann Orlarey

Mots-clés :
Audio, Contrôle et calculs à distance, FAUST, Programmation de DSP

2009

What's new in JACK2?

Linux Audio Conference, 2009, Parma, Italy

JACK2 is the future JACK version based on the C++ multi-processors Jackdmp version. This paper presents recent developments: the D-Bus based server control system, NetJack2 the redesigned network components for JACK and profiling tools developed during port on Solaris.

Stéphane Letz, Nedko Arnaudov, Romain Moret

Mots-clés :
Audio, D-Bus, Networked, Real-time, Server

TIMING MEASUREMENTS IN JACK2

[Technical Report] GRAME. 2009

Timing measurements allow developers to help under- standing the behaviour of their JACK based applications. The server code base now allows to record various tim- ing while the server and clients are running and generate scripts to interpret them.

Stéphane Letz, Dominique Fober, Yann Orlarey

Mots-clés :
Audio, Profiling, Real-time, Server, Timing

2005

Jack audio server for multi-processor machines

International Computer Music Conference, 2005, Barcelona, Spain. pp.1-4

Jack is a low-latency audio server, written for POSIX conformant operating systems such as GNU/Linux. It can connect a number of different applications to an audio device, as well as allowing them to share audio between themselves. We present a new C++ version for multi-processor machines that aims at removing some limitations of the current design: the activation system has been changed for a data flow model and lock-free programming techniques for graph acces... Lire la suite

Jack is a low-latency audio server, written for POSIX conformant operating systems such as GNU/Linux. It can connect a number of different applications to an audio device, as well as allowing them to share audio between themselves. We present a new C++ version for multi-processor machines that aims at removing some limitations of the current design: the activation system has been changed for a data flow model and lock-free programming techniques for graph access have been used.

Stéphane Letz, Yann Orlarey, Dominique Fober

Mots-clés :
Audio, Lock-free, Multi-processor, Parallelism, Real-time

jackdmp: Jack server for multi-processor machines

Linux Audio Conference, 2005, Karlsruhe, Germany. pp.29-36

jackdmp is a C++ version of the Jack low-latency audio server for multi-processor machines. It is a new implementation of the jack server core features that aims in removing some limitations of the current design. The activation system has been changed for a data flow model and lock-free programming techniques for graph access have been used to have a more dynamic and robust system. We present the new design and the implementation for MacOSX.

Stéphane Letz, Dominique Fober, Yann Orlarey

Mots-clés :
Audio, Lock-free, Multi-processor, Parallelism, Real-time

2004

Jack Audio Server: MacOSX port and multi-processor version

Journées d'Informatique Musicale - Sound and Music Computing, IRCAM, Oct 2004, Paris, France. pp.177-183

Jack is a low-latency audio server, written for POSIX conformant operating systems such as GNU/Linux. It can connect a number of different applications to an audio device, as well as allowing them to share audio between themselves. We present the port for Apple's MacOS X, and new developments to take advantage of multi-processor architecture.

Stéphane Letz, Dominique Fober, Yann Orlarey, Paul Davis

Mots-clés :
Architecture, Audio, Real-time

2003

Automatic vectorization in Faust

Journées d'Informatique Musicale, 2003, Montbeliard, France

Faust is a Block-Diagram language for sound signal processing and synthesis. It implements a new algebraic representation of block-diagrams and adopts a functional model of semantics instead of a data flow model. Based on these elements, a compiler able to translate DSP block diagram specification into C code is briefly presented. The code produced proves to be efficient and can compete with a hand written code. The optimization process is even pushed further:... Lire la suite

Faust is a Block-Diagram language for sound signal processing and synthesis. It implements a new algebraic representation of block-diagrams and adopts a functional model of semantics instead of a data flow model. Based on these elements, a compiler able to translate DSP block diagram specification into C code is briefly presented. The code produced proves to be efficient and can compete with a hand written code. The optimization process is even pushed further: the C code produced can be automatically vectorized to address Altivec extension for PowerPC (instruction-motorola) and SSE and SSE2 extensions for Intel architecture (instruction-intel). A method is proposed to determine whether or not a Faust expression can be vectorized by crossing a type information (synthesized during an upward run-around in the syntactic tree to be compiled) and a contextual information (inherited during a downward run-around in the syntactic tree). Thanks to this method, we are able to find expressions that can be vectorized inside recursive expressions that are not supposed to be vectorizable. The quality of the code produced by Faust is evaluated. On one hand, scalar code produced by Faust is compared to vector code produced by Faust, on the other hand, scalar and vector code are compared to code optimized by hand. In the end, we briefly present code transformations to vectorize the expressions classed as non-vectorizable by the previous method so that even better performances can be achieved in the future.

Nicolas Scaringella, Yann Orlarey, Stéphane Letz, Dominique Fober

Mots-clés :
Audio, Compiler, Processing, Signal, Vectorization

This document presents the language FAUST, its syntax and grammar as well as several commented examples. FAUST (the name stands for Functional Audio Streams) is a programming language specifically designed to develop and implement efficient real time digital signal processors.

Etienne Gaudrain, Yann Orlarey

Mots-clés :
Audio, Block-diagrams, Functionnal, Processing, Programming, Real, Signal, Time

2002

This paper is the continuation of a previous work done on clock skew compensation over a high latency network. It evaluates the efficiency of the EPTMA clock skew detection algorithm applied to real-time audio streaming over a local network. The presented results include real world apparent deviations of audio card clocks and acuracy of the skew detection. It appears that EPMTA is very suitable to measure clocks deviation in the context of audio transport. Fina... Lire la suite

This paper is the continuation of a previous work done on clock skew compensation over a high latency network. It evaluates the efficiency of the EPTMA clock skew detection algorithm applied to real-time audio streaming over a local network. The presented results include real world apparent deviations of audio card clocks and acuracy of the skew detection. It appears that EPMTA is very suitable to measure clocks deviation in the context of audio transport. Finally, a simple method to compensate for the clock skew is presented, mainly to evaluate a complete solution for audio streaming.

Dominique Fober

Mots-clés :
Audio, Clock, Network, Real-time, Skew

2001

Porting PortAudio API on ASIO

[Technical Report] GRAME. 2001

This document describes a port of the PortAudio API using the ASIO API on Macintosh and Windows. It explains technical choices used, buffer size adaptation techniques that guarantee minimal additional latency, results and limitations.

Stéphane Letz

Mots-clés :
Audio, Portability, Techniques

Callback adaptation techniques

[Technical Report] GRAME. 2001

This document describes a callback adaptation technique developed for the PortAudio port on ASIO. This method handle buffers of different sizes and guarantee lowest latency added by buffer size adaptation.

Stéphane Letz

Mots-clés :
Audio, Techniques