SoundEngine

Un serveur d'effets sonores en temps réel

Nicolas Juillerat

Poster grand public (pdf): SoundEngine_Poster.pdf
Rapport complet au format pdf: SoundEngine.pdf
Slides de la présentation (ppt): SoundEngine.ppt
Sources du programme: SoundEngine.tgz (This is really a .tgz file. Rename it if necessary)
Related software at CoreBounce

About the SoundEngine application

SoundEngine is a program developed at the DIUF (Departement d'Informatique de l'Université de Fribourg) as a diploma work. It exists in two versions: A real-time server and a command line utility. Both versions are only working on Linux and BSD systems.

The command line version allows you to apply and combine various effects on sounds. The input sound to process and the resulting output sound can both be independantly a file or the audio hardware. Thus this program can be used to convert sound files, to play or record sound files and even to process sounds in real-time if you have a full-duplex audio hardware.

The server version works in real-time, which means:

  1. It can (like the command-line version) read a sound from an analog source (microphone), transform it in any way, and produce the result to the speakers with a delay of about one tenth of a second.
  2. The parameters of the transformation, as well as the transformation itself can be modified at any time while the server is processing the input sound. The modifications can be heard immediatly.

While the command-line version can only combine effects in a linear way (one after the other), the server version can combine them in any way, and create a graph with no restriction. Also, only the server version allow you to modify the effects while the sound is being processed. On the other way, the command-line version provide a set of complex effects which are combination of small effects and that are build automatically.

SoundEngine implements the following effects:

It supports the following file formats:

Résumé du rapport

Ce document présente les étapes nécessaires à l'élaboration d'un programme, basé sur une architecture client-serveur, permettant la lecture et la manipulation de flux de données sonores en temps réel. Une version entièrement fonctionnelle de la partie serveur, appellée SoundEngine, a été implémentée dans le cadre de ce travail de diplôme. Le client, appelé Soundium, a été implémenté par Simon Schubiger, mais ne fait pas l'objet de ce rapport. Ce document, ainsi que les exemples, sont principalement axés sur les problèmes rencontrés et les solutions choisies durant le développement de la partie serveur du programme.

Le modèle retenu dans SoundEngine permet d'une part de définir les flux de données et les transformations qu'ils subissent, et d'autre part de modifier, de combiner et d'appliquer ces transformations sur des flux de données en temps réel, tels que le flux de données sonores qui provient d'un microphone.

Dans une première partie, le modèle choisi dans SoundEngine est présenté, en décrivant les différentes entités, leurs structures, leurs interfaces et la manière dont elles communiquent. On trouvera notament une description du protocole client-serveur utilisé, des informations sur la nécessité d'un scheduler, et la manière dont ce dernier a été implémenté, ainsi que les techniques utilisées afin d'optimiser les performances des traitements.

Dans une deuxième partie, les transformations sonores qui ont été implémentées dans SoundEngine sont décrites, ainsi que la manière dont elles sont intégrées dans le modèle choisi. Quelques chapitres sont également consacrés à la présentation de la théorie sous-jacente aux transformations de Fourier et au fenêtrage, des outils essentiels utilisés par le programme. On trouvera également une decription du fonctionnement du "pitch shifting", effet sonore implémenté dans SoundEngine qui consiste à modifier la fréquence d'un son sans en altérer la vitesse.

Finalement, une dernière partie est consacrée à la présentation d'une version modifiée du programme, regroupant à la fois le serveur SoundEngine, et un mini client dans lequel de nombreuses opérations sont automatisées. Cette partie permet de décrire sur des exemples concrets les possibilités d'utilisations du serveur pour effectuer des opérations utiles dans la pratique.

Mots-Clés : Effets sonores, temps réel, client-serveur, scheduler, transformations de Fourier, fenêtrage, pitch shifting.

Note that the SoundEngine project is no longer active.

Last update: 2006-01-26