Transformer un escalier en un piano public

Publié le 2025-05-08

Bonjour, bonjour. Aujourd’hui, je vais vous présenter le projet Escalarmonie. Il s’agit d’un projet réalisé en collaboration avec le festival Spawn! d’Angoulême. Cet événement qui est organisé au Cnam-Enjmin est dédié au développement de la filière image en Charente.

Pour l’occasion, mon équipe et moi avons conçu, fabriqué et mis en place une installation interactive permettant aux visiteurs du festival d’utiliser un des escaliers comme un instrument de musique.

Installation d'Escalarmonie dans le bâtiment de l'Enjmin
Installation d'Escalarmonie dans le bâtiment de l'Enjmin

Contexte

Le projet a été réalisé en plusieurs à temps partiel entre octobre 2023 et avril 2024. Nous étions 4 à avoir travaillé sur le projet.

  • Pierre Vandel : Gestion de projet, Gestion du Budget
  • Lucas Le Dudal :  Recherche hardware, prototypage
  • Colin Bernard : Programmation Électronique
  • Jame Floc’h Le Carour : Programmation Audio / UI, Modélisation 3D 

L’objectif était de réaliser une installation ludique avant le lancement du festival Spawn! 2024. L’idée était inspirée d’un projet similaire réalisé dans le métro de Rennes. Le budget du projet était d’environ 630 €.

  • 440 € d’électronique
  • 100 € de matériel audio
  • 80 € de décoration
Zone initialement prévue pour l'installation de l'escalier
Zone initialement prévue pour l'installation de l'escalier

À l’origine, la moitié complète de l’escalier était prévue d’être transformée en instrument. Pour rentrer dans le budget du projet, huit marches de l’escalier ont été transformées en touches de piano. Cela permettait de quand même correspondre à une gamme de touches blanches de piano et permettait également de créer des ambiances sonores relativement complexes.

Projet en deux parties

Tout comme le jeu À travers le Maldirach le projet Escalarmonie contient deux pôles techniques. Le premier pôle est une partie électronique contrôlée par un ESP32. Le second pôle est une application Unity qui régit un système audio avec en plus une interface utilisateur qui permet au public de contrôler les types de sons joués par l’installation.

Flow d'information du système
Flow d'information du système

Escalier

Pour la conception de l’escalier, nous avons fait un état de l’art des différentes installations existantes.

Projets d'escalier piano à Rennes et par The Fun Theory

Ces solutions utilisaient des capteurs de pression et demandaient beaucoup de matériel qui n’était pas à la portée du projet avec nos financements. Nous nous sommes alors tournés vers des solutions alternatives de détection de présence. 

La première option était d’utiliser des capteurs de distance ultrason classiques. En effectuant des tests, nous avons remarqué que leur rayon de détection était trop élevé et les capteurs avaient tendance à détecter le sol et les autres marches comme un obstacle.

Capteur Ultrason testé pour le projet
Capteur Ultrason testé pour le projet

Après d’autres recherches, nous avons choisi d’utiliser des capteurs de distance laser de type time of flight. Le capteur choisi permettait de détecter un obstacle sur une distance de six mètres et n’avait pas le problème d’interférence des systèmes à ultrason, car le cône de détection était très étroit.  

Capteur Adafruit VL53L4CX utilisé dans le projet
Capteur Adafruit VL53L4CX utilisé dans le projet

Tous les détecteurs étaient contrôlés par un ESP32 qui a été programmé par Colin Bernard. Il a également construit le boitier qui contenait le microcontrôleur et le hub des capteurs.

Boitier électronique du projet
Boitier électronique du projet

Pour faciliter l’installation des capteurs, j’ai modélisé des supports articulés dans Blender. Ces supports nous ont permis de pouvoir régler individuellement les capteurs pour éviter les interférences tout en protégeant les PCB.

Rendu des articulations possibles des supports
Rendu des articulations possibles des supports
Capteurs dans différentes positions

Système numérique

Je me suis occupé de la programmation du système numérique du projet. Pour cela, j’ai choisi d’utiliser le moteur de jeu Unity.  Grâce au projet Maldirach, j’avais l’expérience de contrôler un système audio via un ESP32 avec ce moteur. De plus, le système de Mastering audio du moteur permet d’obtenir des effets relativement complexes sans avoir besoin de librairies audio externes. Enfin, le moteur permet de créer des interfaces utilisateurs avancées. Cela a été très utile durant le projet.

Communication avec l’ESP32

La communication avec l’ESP32 est assez simple. Comme pour le projet Maldirach, le premier script réceptionne les informations de l’ESP32 via un port serial sur un thread en background et notifie les informations reçues via des Events. L’ESP32 informe au système le nombre de touches disponibles et chaque touche qui est actuellement pressée.

Ces informations sont ensuite filtrées par un second script qui empêche les interférences électriques et les problèmes des capteurs d’avoir un impact sur les sons joués par le système. Il permet également de paramétrer la distance minimum et maximum de détection d’obstacles pour pouvoir fonctionner dans plusieurs configurations. Par exemple, on peut configurer le système pour détecter les pas sur un quart, la moitié ou toute la largeur d’un escalier.

Distance de détection : 5.0 m


Pour aider au prototypage, j'ai créé un script qui émule le comportement de l'_ESP32_. Celui-ci détectait les appuis sur les touches du clavier et envoyait des _events_ similaire, cela m'a permis de prototyper le système de son et d'_UI_ pendant le développement de la partie électronique.
Contrôle des touches de clavier via un ESP32 et un script simulant des touches
Contrôle des touches de clavier via un ESP32 et un script simulant des touches

Gestion des playlists audio

Le système peut jouer plusieurs instruments et des ambiances sonores qui sont stockées dans des Playlists. Celles-ci sont importées au lancement du logiciel depuis un dossier proche de l’exécutable.

Chaque playlist est un dossier qui comprend un nombre choisi  n  de “notes” jouables (peut être une note ou un bruit d’ambiance) et chaque note est numérotée de 1 à n.  

Voici à quoi ressemble la hiérarchie des fichiers d’Escalarmonie pour un projet avec deux playlists :

.
├── Escalarmonie.exe
└── Playlists
    ├── Piano
    │   ├── 1.wav
    │   ├── 2.wav
    │   ├── 3.wav
    │   ├── ...
    │   ├── [n].wav
    │   ├── thumbnail.png
    │   └── settings.json
    └── Forest
        ├── 1.wav
        ├── 2.wav
        ├── 3.wav
        ├── ...
        ├── [n].wav
        ├── thumbnail.png
        └── settings.json
txt

Les playlists contiennent également une image thumbnail qui est affichée dans l’interface du logiciel. Enfin, les paramètres de la playlist sont stockés dans un fichier settings.json. Il contient plusieurs paramètres qui permettent de modifier le comportement et le son des touches :

{
	"AttackDuration": 1, // ..... Durée fade in
	"ReleaseDuration": 2, // .... Durée fade out
	"AudioIsLooping": true, // .. Boucle audio si la touche reste appuyée
	"HighpassCutoff": 22000.0, // Filtrage hautes fréquences
	"LowpassCutoff": 10.0, // ... Filtrage basses fréquences
	"Distortion": 0.0 // ........ Distortion audio
}
JSON

Par exemple, AudioIsLooping est principalement utilisée pour les ambiances sonores qui se répètent dans le temps.

AttackDuration, RealeaseDuration et IsAudioLooping contrôlent les sources sonores individuellement, tandis que HighpassCutoff, LowpassCurtoff et Distortion influent sur le système de mixage audio d’Unity.

Effet de filtrage audio dans un mixeur Unity
Effet de filtrage audio dans un mixeur Unity

Tous ces effets permettent de créer des ambiances sonores complexes et d’effectuer des modifications sur les pistes audio sans devoir réexporter les samples audio.

Interface Utilisateur

J’ai conçu l’interface utilisateur dans le but de donner envie aux visiteurs de changer les playlists de son. L’objectif était donc d’avoir une interface simple et accueillante pour des personnes novices. Un second objectif était d’afficher des informations sur le fonctionnement de l’installation dans un but de vérification / debug.

J’ai donc séparé l’interface en deux sections :

  • Section supérieure (principale) de sélection de playlists
  • Section inférieure (secondaire) d’affichage d’informations
Interface verte Interface orange
Interface du projet changeant de couleurs en fonction de la playlist sélectionné

La section principale peut être utilisée sur un écran tactile et permet de changer les playlists instantanément. La section secondaire, quant à elle, contient des informations de connexions ainsi qu’un affichage des touches actuellement détectées et préssée.

Pour donner vie à l’application, j’ai ajouté le fait qu’elle prenne pour thème la couleur de la playlist sélectionnée. Quand la playlist jouée change, les couleurs d’accentuations et le gradient de fond changent également de couleur. J’ai utilisé la librairie ColorThief for Unity pour récupérer la couleur principale des miniatures des playlists. J’ai ensuite utilisé cette couleur pour changer la teinte globale des éléments de l’application.

Exemple de changement de teinte de l’interface en fonction d’une valeur de teinte :

 J’ai utilisé plusieurs ShaderGraphs pour modifier les couleurs des interfaces et des images. Ils m’ont permis de les changer dynamiquement et de filtrer les images. Le projet utilise URP comme backend de rendu. Concernant les animations, j’ai utilisé la librairie DoTween qui m’a permis d’animer les changements d’état des interfaces, comme les changements de couleurs d’accentuation ou l’état des éléments d’interface.

Shadergraph contrôlant l'apparence des miniatures des playlists
Shadergraph contrôlant l'apparence des miniatures des playlists

L’interface du logiciel est très dynamique, elle peut afficher un nombre de playlists et de touches disponibles variable. L’affichage et la gestion des états de l’application sont dirigés par quelques scripts managers qui contrôlent la communication entre l’interface utilisateur et l’état interne du système audio.

1
2
3
4
5

Festival Spawn!

L’installation a été faite dans le bâtiment de l’Enjmin pour le festival Spawn!. Elle est restée installée toute la durée du festival et a fonctionné comme prévu. Nous avons été très agréablement surpris de l’engouement du public pour l’installation et des utilisations créatives qui en ont été faites.

Le projet a été très intéressant d’un point de vue technique comme de gestion de projet. Les questions de budget nous ont conduits à trouver des solutions alternatives pour nos problématiques comme la détection de présences et la gestion audio. Le code source du projet est disponible sur Github.

Ce projet n’aurait pas pu être réalisé sans le soutien financier de l’Enjmin et du festival Spawn! et nous en sommes très reconnaissants.