Visual Experience - Installation audio-réactive

Une installation artistique interactive créée en hackathon à Clermont-Ferrand. Le micro du spectateur pilote des animations visuelles en temps réel : une reine prend vie à travers 9 tableaux qui réagissent au son ambiant, chaque fréquence audio contrôlant l opacité, l échelle et le rythme des compositions.

IV - Persistant 2 jours (hackathon) 2018-04-28 2018-11-29
XP
100%

Le concept

Visual Experience est né d’un hackathon à Clermont-Ferrand sur le thème “Visual Experience”. L’idée : transformer le son ambiant en art visuel.

Le spectateur parle, chante, tape dans ses mains - et une reine apparaît. Chaque fréquence audio contrôle un aspect de l’animation : l’amplitude pilote l’opacité et l’échelle des éléments, le spectre fréquentiel distribue l’énergie sur différents tiles visuels.

Comment ça marche

Le pipeline est simple mais efficace :

  1. Capture - Le micro du navigateur via Web Audio API, split en canaux stéréo
  2. Analyse - FFT (Fast Fourier Transform) avec 64 bins de fréquence, mise à jour toutes les 50ms
  3. Mapping - L’amplitude max (+60dB de normalisation) est convertie en position de seek sur les timelines anime.js
  4. Rendu - Chaque tableau compose des images PNG de la reine avec des animations d’opacité, d’échelle et de timing

Les 9 tableaux

Chaque tableau (state) est une composition visuelle autonome :

  • States 1-2 - La reine émerge. Background pulse, puis 5 tiles apparaissent en cascade avec un easing élastique
  • State 3 - Tiles déclenchés aléatoirement quand l’amplitude dépasse un seuil - effet “beat-reactive”
  • States 4-5 - Compositions complexes. Le spectre FFT est découpé : chaque tile réagit à sa propre bande de fréquences
  • States 6-8 - Respiration. Transitions douces, compositions épurées
  • State 9 - Silence. Fin de la performance

L’architecture socket.io

Le projet utilise socket.io pour séparer l’émetteur (une tablette avec le micro) du récepteur (un écran/projecteur qui affiche les visuels). Pendant la démo du hackathon, une personne tenait la tablette dans le public pendant que les visuels s’affichaient sur le mur.

Ce que j’en retiens

C’est un projet de pure exploration créative - pas d’utilisateur final, pas de product-market fit, juste l’envie de connecter du son à de l’image. Le mapping audio → animation via seek() d’anime.js est une technique élégante : au lieu de calculer des valeurs frame par frame, on laisse l’animateur définir les extrêmes et le son choisit où on se situe entre les deux.

Le code porte les traces du hackathon : pas de tests, des console.log partout, un state_9 vide. Mais le pipeline audio-visuel fonctionne et le concept tient.

Stack technique

anime.js

Moteur d animation

API timeline fluide, seek programmatique pour piloter les animations par le son

Web Audio API

Capture micro + analyse FFT

Accès direct aux fréquences audio en temps réel, sans serveur

Webpack

Build & dev server

Bundling JS rapide pour le hackathon

Socket.io

Communication temps réel

Séparer la capture audio (tablette) de l affichage (projecteur) pendant la démo

Jour 1 - Du micro aux pixels+14 commits

Init du projet, mise en place du pipeline audio : capture micro via Web Audio API, split stéréo, analyse FFT. Premier état visuel avec anime.js piloté par l amplitude. Animations de background, premiers tiles, CI GitLab Pages. Fin de journée : 3 tableaux fonctionnels avec transitions.

  • Pipeline audio : micro → FFT → amplitude normalisée
  • State machine avec enter/run/exit pour chaque tableau
  • States 1-3 : background pulse, tiles élastiques, tiles audio-réactifs
  • CI GitLab Pages pour le déploiement
Jour 2 - Polish et performance+7 commits

Remplacement du setInterval par requestAnimationFrame, fix des animations de particules et des transitions entre états. Peaufinage des 9 tableaux. Fix CI pour le déploiement GitLab Pages.

  • Performance : suppression du setInterval, animations plus fluides
  • Transitions entre états, animations de sortie
  • CI : mv au lieu de cp pour le déploiement