logo

Rhythmic diffusion

Réaction-diffusion rythmique

Sommaire

Introduction

Il est maintenant temps de relier la partie graphique avec la partie audio.
Jusqu'à présent, les paramètres étaient modifiées dans le code. Désormais, le but est de laisser la partie audio modifier ces paramètres en fonction des ratios précédemment calculés.
Cependant, il faut trouver un moyen simple et général pour décrire comment l'audio va influencer une certaine propriété de la réaction-diffusion.

De plus, au vu du nombre de paramètres de la simulation, il serait agréable de pouvoir sauvegarder et charger des paramètres prédéfinis afin de pouvoir aisément naviguer entre différents résultats obtenus.

Lien entre ratio et propriété

Dans l'application finale, l'utilisateur doit pouvoir changer, ajouter et supprimer les liens entre l'audio et la réaction-diffusion depuis une interface.
Le système stockant et décrivant ces liens doit alors être assez simple et maléable pour pouvoir les modifier.

L'objectif est de relier un des ratios de la partie audio à une propriété de la simulation. Il est donc nécessaire d'avoir un indicateur pour le ratio et pour la propriété sélectionnée.
Là où le ratio est assez direct (un enum contenant trois possibilités), la propriété est un peu plus complexe car elle peut avoir plusieurs valeurs. C'est le cas lorsque des bruits de Perlin ou de Voronoï sont utilisés, le but est de pouvoir choisir entre l'intensité, l'échelle ou encore un décalage du bruit.
De plus, bien que cela n'a pas été présenté, il également possible de modifier la forme, taille et bordure du cercle rajoutant des substances B à la simulation.

Maintenant qu'il est possible d'associer un élément de la simulation et un ratio de l'analyse audio, il faut indiquer comment cette propriété va être modifiée.
La première nécessité est d'avoir une valeur initiale, autrement dit, la valeur qu'aura la propriété quand le ratio est à zéro. Ensuite, il faut la valeur qui sera appliquée au ratio et qui va ensuite modifier la valeur initiale.

Une implémentation en code ressemblerait à cette fonction :

float applyRatio(float initialValue, float calculationValue, float ratio)
{
  return initialValue + (calculationValue * ratio);
}

Bien sûr, ici le choix a été fait d'ajouter le produit à la valeur initiale, cependant, il est possible de la soustraire ou de faire toute sorte d'opérations plus complexes avec.
C'est le dernier élément des liens entre l'analyse audio et la réaction-diffusion, qui permet de décrire le mode de calcul.

Les trois modes utilisables dans l'applications sont l'addition (similaire au code présenté précédemment), la soustraction et un mode booléen.
Ce dernier ajoute la "calculationValue" uniquement si le ratio est égale à un (qui est la valeur maximum).

Mis ensemble, tous ces éléments permettent de décrire l'influence d'un ratio sur une propriété de la simulation.
A chaque itération, le programme va parcourir tous les elements décrivant un lien entre un ratio et une propriété puis les appliquer à la simulation, modifiant en temps réél ses paramètres.

Voici plusieurs démonstrations où un ratio est relié avec un paramètre de la réaction-diffusion.

Ratio des sonorités autres relié à Diffusion Rate B
Ratio de la basse relié à la Kill Rate
Ratio des cymballes relié à Kill Rate

Paramètres prédéfinis

Avec le nombre de paramètres grandissant, il est réellement pratique de pouvoir sauvegarder et appliquer différentes configurations à la simulation.
C'est la bibliothèque cereal qui permet d'aisément sauvegarder tous les différents paramètres du programme (allant du dégradé de couleurs, aux valeurs des paramètres jusqu'au propriétés des formes utilisées) dans un fichier au format XML.

Ce type de fichier est ensuite chargé au démarrage de l'application et permet de naviguer entre les différents paramètres prédéfinis.
Pour rendre le changement de couleur pendant les transitions plus agréable, le dégradé de couleurs effectue une transition douce en quelques secondes.

Ratio de la basse relié à la Kill Rate

Démonstrations

Voici plusieurs démonstrations avec les musiques utilisées pour les tests de l'analyse audio.
Ces démonstrations ont été effectuées avec le projet à son état final et utilisent chaque fonctionnalité créée.

Un grand merci à ces artistes qui m'ont permis de partager ces démonstrations utilisant leurs oeuvres.

All India Radio - Four Three
Turing Complete - Wide Instructions
Le Wanski - M.U.S.H

Conclusion

Ce projet était vraiment plaisant à réaliser et m'a donné l'opportunité de travailler sur de l'audio d'une manière très concrète et appliquée.
En travaillant dessus les soirs et les week-end, il m'aura fallu au total entre trois et quatre mois pour finir ce projet.

Bien sûr, certains points peuvent se pousser encore plus loin.

Il est possible d'ajouter de nouveaux ratios ou encore d'améliorer la précision de l'analyse audio.
Une autre fonctionnalité intéressante serait que le programme puisse convertir les fichiers de multiples format de fichier audio tel que le MP3, automatiquement en WAV.

Pour ce qui est de la réaction-diffusion, il existe d'autres modèles que celui de Gray-Scott qui pourraient êtres simulés.
Il serait également possible de rajouter de l'interactivité en utilisant la souris pour rajouter des particules B à la simulation en temps réél.

Les performances dépendent essentiellement de la carte graphique, et même si la simulation arrive à tourner sur un PC portable, la différence avec du matériel plus puissant se fait quand même ressentir.
Il est donc toujours possible d'optimiser le programme mais globalement, les performances sont satisfaisantes.