# VERS UN MÉTAVERS MUSICAL COLLABORATIF : EXPÉRIENCES WEB MULTI-PARTICIPANTS

Michel Buffa, Quentin Escobar, Ayoub Hofr

► To cite this version:

Michel Buffa, Quentin Escobar, Ayoub Hofr. VERS UN MÉTAVERS MUSICAL COLLABORATIF : EXPÉRIENCES WEB MULTI-PARTICIPANTS. Journées de l'Informatique Musicale 2025, Association Francophone d'Informatique Musicale (AFIM), INRIA, GRAME, Jun 2025, Lyon, France. hal-05102614

HAL Id: hal-05102614

https://hal.science/hal-05102614v1

Submitted on 7 Jun 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
# VERS UN MÉTAVERS MUSICAL COLLABORATIF : EXPÉRIENCES WEB MULTI-PARTICIPANTS

Michel Buffa *

University Côte d'Azur
Nice, France
michel.buffa@univ-cotedazur.fr

Quentin Escobar

University Côte d'Azur
Nice, France
quentin.escobar@etu-univ-cotedazur.fr

Ayoub Hofr

University Côte d'Azur
Nice, France
ayoub.hofr@etu-univ-cotedazur.fr

## ABSTRACT

Les standards Web du W3C permettent aujourd'hui des applications en ligne autrefois impensables. L'intégration d'API comme Web Audio et Web MIDI, ainsi que les Web Audio Modules (WAMs), souvent appelés « VSTs pour le Web », ont transformé la création musicale en ligne. Les WAMs facilitent le développement d'applications modulaires en utilisant des composants réutilisables comme les générateurs de notes, instruments virtuels et effets audio. L'écosystème WAM comprend plus de 100 plugins, tutoriels et applications hôtes, dont Sequencer Party, une application collaborative permettant de créer des installations musicales en assemblant des plugins. Cet article transpose les concepts 2D de Sequencer Party dans le métavers musical 3D, en réutilisant les WAMs existants et en générant dynamiquement des interfaces immersives adaptées à la VR/XR. Pour le rendu 3D et l'intégration aux dispositifs immersifs, la bibliothèque BabylonJS a été utilisée avec WebXR, permettant d'exécuter des applications dans les navigateurs Web des casques VR/XR sans logiciel supplémentaire.

## 1. INTRODUCTION

Le Métavers Musical (MM)[1] est un espace virtuel immersif dédié aux activités musicales, prolongement du concept de métavers, où les utilisateurs interagissent entre eux et avec des objets numériques. Ses applications sont variées : concerts virtuels, éducation, performances musicales collaboratives, etc. Cependant, transposer des expériences issues d'applications 2D ne fonctionne généralement pas en environnement immersif, nécessitant de nouvelles approches ergonomiques et sensorielles. La recherche sur ce sujet reste limitée, comme le soulignent Boem et Turchet [2], malgré de nombreux défis : sécurité, expérience utilisateur, interactions musicales collaboratives, et contraintes techniques des applications web en VR/XR. Néanmoins, ces applications web offrent un fort potentiel d'innovation : collaboration simplifiée, accès aux APIs des navigateurs, et indépendance vis-à-vis des "stores" contrôlés par Meta, Google ou Apple.

Cet article ne couvre pas tous ces aspects, mais se concentre sur la conception d'un monde immersif persistant et multi participants en temps réel pour la création d'installations musicales partagées. Il s'appuie sur les standards web récents du W3C, tels que Web Audio, Web MIDI, WebXR, WebGL, WebGPU, WebAssembly et WebRTC, désormais pris en charge par les navigateurs des principaux casques VR/XR. L'un des auteurs, représentant du comité consultatif du W3C pour son université, participe depuis 2015 au groupe de travail Web Audio du W3C et contribue activement au standard open-source des plugins Web Audio, les "Web Audio Modules" (WAMs), comparables aux plugins VST, mais pour le Web [3].

Le logiciel présenté, WAM Jam Party, est un hôte Web 3D exploitant des plugins WAM (générateurs de notes, instruments virtuels, effets audio) dans un environnement virtuel multi participants. Inscrit dans le domaine émergent du métavers musical,

il vise à expérimenter des aspects techniques et ergonomiques. Lancé il y a quelques mois et encore en phase de prototypage, il se distingue par une approche unique dans la littérature.

La section 2 présente les technologies audio utilisées, la section 3 explique l'intégration des concepts de création musicale collaborative dans une application immersive, la section 4 décrit la conception de l'expérience utilisateur (UX), la section 5 traite des représentations 3D des utilisateurs, la section 6 expose les tests d'utilisabilité, tandis que les sections 7 et 8 comparent les travaux connexes et abordent les limites ainsi que les améliorations possibles.

## 2. TECHNOLOGIES AUDIO DANS WAM JAM PARTY

### 2.1. L'API W3C Web Audio

Standardisée depuis 2021 <fnref n="1" />, cette API offre des « nœuds audio » dédiés au traitement et à la génération sonore. Manipulés en JavaScript via l'instanciation de classes, ces nœuds s'interconnectent pour former un « graphe audio » où le signal circule à la fréquence d'échantillonnage et subit diverses transformations. On y trouve comme nœuds des générateurs d'ondes, des sources sonores (microphone, échantillons audio, etc.) et des transformateurs audio.

L'API inclut un ensemble limité de nœuds « standards » pour des opérations courantes comme le contrôle du gain, le filtrage fréquentiel, le délai, la réverbération, la dynamique et la spatialisation sonore 2D/3D. Les bibliothèques audio temps réel répartissent généralement les tâches entre un thread de contrôle et un thread de rendu ([4], [5], [6]). L'API Web Audio suit ce modèle avec un « thread audio » haute priorité, chargé du traitement sonore et de la transmission des échantillons au système d'exploitation sous contraintes strictes de temps réel. Tout retard entraîne des artefacts sonores audibles. Le « thread principal », de priorité inférieure, exécute le code JavaScript de l'interface utilisateur, gère les appels à l'API et les modifications du graphe audio, comme la connexion ou l'ajustement des nœuds.

Dans l'API Web Audio, tous les nœuds, sauf un, sont des « blocs préfabriqués » écrits en C++ (ou en Rust sous Firefox) pour des performances optimales. Leurs algorithmes DSP sont intégrés directement dans le navigateur, sans possibilité de modification, seuls leurs paramètres peuvent être ajustés. L'exception est le nœud AudioWorklet, introduit en 2018, qui autorise un traitement audio personnalisé au sein du thread audio [7]. L'API permet d'assembler ces nœuds en graphe pour créer effets et instruments complexes, comme délai, auto-wah, chorus, distorsion, synthétiseurs ou samplers. Depuis sa publication, de nombreux effets et instruments ont été développés via cette approche [8].

Il est souvent nécessaire de chaîner effets et instruments, comme sur un pédalier de guitariste ou dans une station audio-numérique (DAW), où plusieurs éléments traitent des pistes ou des régions. Dans ces cas, l'API Web Audio est trop bas niveau, rendant indispensables des composants plus avancés, équivalents aux plugins VST, mais pour le Web [9]. Jusqu'en 2015, aucun standard n'existait pour des plugins audio web inter-opérables

<footnote>*. This work has been supported by the French government, through the France 2030 investment plan managed by the Agence Nationale de la Recherche, as part of the "CA DS4H project, reference ANR-17-EURE-0004</footnote>

<footnote n="1">1. Une "recommandation" est le plus haut niveau de standardisation, selon le W3C. Voir : https://www.w3.org/press-releases/2021/webaudio/</footnote>
et des applications hôtes [9]. Depuis, plusieurs initiatives ont émergé, dont l'une est devenue un standard communautaire.

## 2.2. Web Audio Modules : VSTs for the Web !

En 2015, Jari Kleimola et Olivier Larkin ont proposé le standard nommé Web Audio Modules (ou « WAM » en abrégé) pour des plugins Web Audio [10]. En 2021, la version 2.0 a été publiée, établissant un standard communautaire open source (API, SDK) offrant aux développeurs davantage de flexibilité (prise en charge des outils de build, TypeScript, frameworks comme React, etc.), des performances améliorées, un accès simplifié aux paramètres des plugins et une intégration facilitée dans les stations audio-numériques en ligne (DAW) [11].

<figure><img src="image_2.png" /><figcaption>FIGURE 1 – *Un drum sampler, et deux effect WAMs de distorsion.*</figcaption></figure>

Des dizaines de plugins WAM sont disponibles via le WAM Community Endpoint et peuvent être facilement intégrés dans des applications hôtes à l'aide de leur URI<fnref n="2" />. Il s'agit d'éléments comparables en qualité et en complexité à ceux du monde des applications de MAO natives – certains instruments et effets étant en fait des portages en WebAssembly du code source de plugins natifs existants écrits en C/C++/Rust.

<figure><img src="image_3.png" /><figcaption>FIGURE 2 – *Piano roll WAM.*</figcaption></figure>

L'écosystème WAM évolue rapidement. Par exemple, un système d'extensions est désormais pris en charge [12], permettant

<figure><img src="image_4.png" /><figcaption>FIGURE 3 – *WAM Step Sequencer programmable.*</figcaption></figure>

aux WAMs de manipuler des entrées et sorties vidéo, d'effectuer du rendu 3D ou des animations de shaders WebGL, de générer la modulation des paramètres, ou encore de charger/enregistrer des ressources/assets via le logiciel hôte (fonctionnalité utile pour les samplers). Les WAM disponibles incluent des générateurs de notes tels qu'un piano roll (Figure 2), un step sequencer programmable (Figure 3 et Figure 4), des générateurs de notes aléatoires, des générateurs d'accords, ainsi que des instruments virtuels : synthétiseurs (Figure 4), samplers (Figure 1), de la modélisation physique d'instruments (flûte, clarinette, cuivres, djembé), et plus de cent effets audio, incluant tous les classiques : flanger, chorus, réverbération (plusieurs types), distorsion, fuzz, overdrive, enveloppe followers, etc.

Sequencer Party (Figure 4, Figure 5, Figure 6) est une plate-forme collaborative audio/visuelle en temps réel, entièrement construite à partir de WAMs, permettant de créer et d'ajuster des installations musicales. Les utilisateurs connectés collaborent lors de sessions en temps réel et peuvent partager publiquement des presets WAM ainsi que des projets sur le site web. La plate-forme prend en charge une vaste collection de WAMs open-source, y compris tous ceux publiés par l'initiative WAM Community. Un menu intégré propose une liste catégorisée des plugins disponibles (Figure 5). Un utilisateur agit en tant que maître de cérémonie, crée une session, puis invite d'autres participants en leur envoyant un lien. Chaque écran correspond à une piste (Figure 6), et les sessions peuvent inclure plusieurs pistes. Un mixer est également disponible pour ajuster le volume de chaque piste.

<figure><img src="image_5.png" /><figcaption>FIGURE 4 – *Le même plugin WAM (programmé différemment) déjà présenté dans l’illustration précédente, utilisé ici pour monduler les paramètres d’un synthétiseur WAM.*</figcaption></figure>

Les participants peuvent intervenir à tout moment, et chaque modification de leur session (ajout, suppression, déplacement, connexion, déconnexion d'un WAM ou modification d'un para-

<footnote n="2">2. Les plugins de l'initiative WAM sont disponibles à partir du site web référence https://www.webaudiomodules.com/, ainsi qu'une API REST et une galerie en ligne.</footnote>
<figure><img src="image_6.png" /><figcaption>FIGURE 5 – Menu de Sequencer Party pour ajouter des WAMs.</figcaption></figure>

<figure><img src="image_7.png" /><figcaption>FIGURE 6 – Une piste typique dans Sequencer Party, c'est un écran!!</figcaption></figure>

mètre) est propagée au serveur et aux autres clients. Les paramètres globaux de l'hôte, comme le tempo, les pistes ou le mix global, sont également partagés. La synchronisation rythmique est locale : ainsi, si un utilisateur ajoute une boîte à rythmes, un séquenceur pas-à-pas et un générateur de basse, tous ces WAMs seront synchronisés. En cas de changement de tempo, l'ajustement s'applique à tous les clients tout en maintenant la synchronisation. Sequencer Party a été utilisé à plusieurs reprises pour diffuser des « parties » sur Twitch, rassemblant une communauté de musiciens électroniques. Toutes les sessions sont persistantes et peuvent être restaurées à tout moment.

## 3. WAM JAM PARTY : UNE TRANSPOSITION DU PARADIGME DE SEQUENCER PARTY AUX MONDES IMMERSIFS

Peu après les premières publications sur le « métavers musical » et la création du projet de recherche éponyme [10], l'idée de transposer Sequencer Party dans un univers 3D immersif et partagé a émergé. Cette transition soulève plusieurs défis : les éléments 2D (plugins WAM) doivent être adaptés à un univers conçu avec la technologie WebXR, Sequencer Party étant un projet en partie propriétaire (l'hôte n'est pas open source, seuls les plugins WAM sont accessibles en open source), il est nécessaire de concevoir et mettre en œuvre un nouvel hôte 3D/VR ainsi qu'une solution permettant de synchroniser les clients tout en conservant le principe d'un monde persistant.

Le plus grand défi reste l'utilisabilité d'un tel environnement immersif : quelle interface 3D pour les WAMs ? Peut-on éviter de reconcevoir manuellement chaque GUI de chaque plugin existant ? Quelle ergonomie pour un système collaboratif ? Comment évaluer son intuitivité et sa facilité d'utilisation ? Comment encourager collaboration et créativité ? De plus, quelles sont les limites techniques ? Quelle charge le système peut-il supporter ? Combien d'utilisateurs et de plugins au maximum ? Quelle est la latence réseau et son impact sur l'expérience utilisateur ? Jusqu'où les performances des cartes son et des CPU/GPU des casques actuels influencent-elles l'ensemble ?

### 3.1. Technologies WebXR utilisés

WebXR<fnref n="3" /> est le standard du W3C pour les applications Web fonctionnant dans les casques VR/AR. Bien que cette norme soit encore en évolution<fnref n="4" />, des implémentations sont déjà disponibles dans les navigateurs Web des casques les plus courants du marché, tels que la série Oculus commercialisée par Meta (Oculus 2, 3 et Pro). L'API WebXR offre des fonctionnalités clés de bas niveau telles que le rendu stéréoscopique pour une perception immersif en 3D, le suivi précis des mouvements de la tête et des contrôleurs, ainsi que le suivi de position (détection des mouvements de l'utilisateur dans le monde réel) pour une immersion totale. Elle est également supportée par des frameworks 3D de haut niveau tels que BabylonJS<fnref n="5" />, Three.js<fnref n="6" /> et A-Frame<fnref n="7" />.

Ces bibliothèques 3D sont basées également sur les APIs standards du W3C WebGL et WebGPU. ThreeJS et BabylonJS offrent des fonctionnalités de haut niveau et simplifient considérablement le processus de création de scènes interactives en 3D en fournissant des abstractions pour manipuler des objets 3D, des caméras, des lumières et des matériaux, et sont accompagnées de plusieurs moteurs physiques. Elles sont utilisées pour la visualisation de données, pour des animations interactives, pour la création de jeux 3D et, plus récemment, d'applications pour des applications immersives exploitant WebXR. Leurs fonctionnalités sont très similaires, mais certains avantages peuvent être trouvés sur certains points dans l'une ou l'autre : par exemple, BabylonJS intègre le moteur physique Havok, utilisé par les principaux jeux AAA, tandis que ThreeJS a servi de base à des couches supplémentaires de moteurs, comme le Needle Engine <fnref n="8" />, qui simplifie l'intégration avec le logiciel Unity, ainsi qu'à la librairie A-Frame et à son extension « networked A-Frame » <fnref n="9" />, qui facilite la création d'applications WebXR multi-participants à l'aide d'une approche déclarative. Il est à noter que Turchet et Boem ont utilisé avec succès networked A-Frame pour leur travail sur les « Musical Metaverse Playgrounds » [2].

BabylonJS : pour le projet présenté dans cet article, la librairie BabylonJS a été choisie pour plusieurs raisons : elle prend en charge le son spatialisé via des composants exploitant l'API Web Audio et il est possible d'accéder au contexte audio des scènes BabylonJS et ainsi de connecter des plugins WAM tels que des générateurs de notes, des instruments et des effets audios au graphe Web Audio. Par ailleurs, les auteurs ont une longue expérience avec cette bibliothèque, utilisée dans les cours de programmation 3D dispensés aux étudiants en master. Enfin, un contrôle total sur la couche réseau/synchronisation était essentiel, car l'approche envisagée (synchronisation d'états comme dans Google Docs) n'était pas celle proposée par networked A-Frame, par exemple (cette partie est détaillée dans la prochaine section).

### 3.2. Synchronisation d'états entre les clients connectés

S'appuyer sur les états des WAMs : la spécification de l'API des Web Audio Modules<fnref n="10" /> précise que chaque WAM doit implémenter les méthodes de l'interface WamNode, qui inclut les méthodes getState() et state(...) , pour gérer son état interne. L'état d'un plugin est constitué entre autres de la valeur de tous ses paramètres et ces deux méthodes de gestion d'état sont implémentées par défaut par des classes du SDK des WAM que la plupart des développeurs utilisent. Il est cependant possible

<footnote n="3">3. https://www.w3.org/TR/webxr</footnote>

<footnote n="4">4. Selon le W3C, le statut actuel de l'API WebXR en Mars 2025 est "Candidate Recommendation Draft" – qui signifie que la spécification est considérée stable et a passé plusieurs étapes de révision et de test.</footnote>

<footnote n="5">5. https://babylonjs.com</footnote>

<footnote n="6">6. https://threejs.org</footnote>

<footnote n="7">7. https://aframe.io</footnote>

<footnote n="8">8. https://needle.tools</footnote>

<footnote n="9">9. https://github.com/networked-aframe</footnote>

<footnote n="10">10. https://github.com/webaudiomodules/api</footnote>
de les redéfinir pour gérer des états personnalisés en ajoutant des données supplémentaires.

**Synchroniser des états au lieu d'envoyer des événements pour chaque changement** : la présence systématique de ces méthodes permet de synchroniser globalement les états de tous les plugins WAM présents dans un univers virtuel immersif. Pour ce faire, chaque hôte/client effectue des cycles de sérialisation/dé-sérialisation des états de tous les plugins plusieurs fois par seconde. À l'état interne d'un WAM, obtenu par un appel à getState(), sa position et son orientation dans l'espace 3D sont ajoutées, ainsi que ses connexions avec d'autres plugins dans le graphe. Des états spéciaux sont également créés : un pour les paramètres globaux de l'application hôte tels que le tempo et l'identifiant du client, et un pour l' avatar 3D de l'utilisateur (position et orientation du corps et des mains).

En parallèle de l'émission, l'hôte reçoit les mises à jour d'état des autres clients connectés plusieurs fois par seconde. Dans ce cas, les opérations inverses sont effectuées en appelant les méthodes setState(...) des WAMs, ce qui a pour effet de mettre à jour leurs paramètres, positions et orientations, leurs connexions, et restaure également les paramètres globaux ainsi que les positions et orientations des autres avatars. Dans des graphes complexes, composés de multiples Web Audio Modules qui peuvent inclure plusieurs dizaines de paramètres (comme c'est le cas de certains instruments WAM), l'état d'un WAM peut être un objet volumineux. La somme de tous ces états dans une session en cours, composée de dizaines de WAMs, peut atteindre plusieurs kilo octets. Il est donc important d'optimiser la synchronisation (notamment en ne propageant que les modifications incrémentales des états et non les états complets).

**Gérer les états en tant que documents texte** : L'idée de base, adoptée dans Sequencer Party, est de considérer l'état global d'une session comme un ensemble de documents texte. Sur cette base, des approches utilisées par des éditeurs de texte collaboratifs (comme Google Docs, Word en ligne ou Etherpad) peuvent être appliquées à la synchronisation. Les deux algorithmes principaux sont Operational Transformation (OT) (le plus connu) et aussi Conflict-free Replicated Data Types (CRDT). OT, populaire (utilisé par Google Docs), gère les conflits en transformant les opérations concurrentes pour qu'elles puissent être appliquées en toute sécurité, même dans un ordre différent sur différents clients et nécessite un mécanisme central pour résoudre les conflits. CRDT, plus récent, utilise des modèles mathématiques, simplifiant ainsi son implémentation. Il est mieux adapté aux systèmes distribués en temps réel et ne nécessite pas de source centrale de vérité, offrant des garanties supplémentaires de synchronisation entre clients distants.

**S'appuyer sur une implémentation de CRDT** : nous avons choisi l'implémentation de CRDT fournie par la bibliothèque JavaScript Yjs, utilisée par plusieurs applications collaboratives open source<fnref n="11" />. Yjs implémente une version modifiée de l'algorithme décrit dans [13], qui ajoute des optimisations à la version de base de CRDT. En particulier, cette version est bien adaptée à des applications temps réel nécessitant une synchronisation d'états<fnref n="12" />, car elle est incrémentale et n'échange que les différences d'états lors de la synchronisation entre deux clients. Yjs supporte à la fois les approches *pair à pair* (P2P, basées sur l'API du W3C WebRTC) ou chaque client est connecté directement aux autres, mais aussi les approches en étoile, avec un serveur centralisé (basées sur l'API W3C WSocket). WAM Jam Party utilise dans sa version actuelle l'approche P2P.

**Optimiser la gestion de documents** : Chaque état de WAM est stocké en tant que document Yjs (au lieu d'un document "global"), de même pour l'état du logiciel hôte (tempo, etc.) et l'état de l' avatar 3D du client. Yjs utilise une approche CRDT optimisée pour synchroniser ces documents, envoyant uniquement les modifications (ou "différences") et non l'intégralité du document à chaque changement, réduisant ainsi la quantité de données échangées. Toutefois, au fur et à mesure des modifications, ces différences s'ajoutent et peuvent augmenter la taille du document et le temps de synchronisation. En gardant les états dans des documents Yjs séparés, cette croissance est retardée. Même lors de longues sessions (environ 40 minutes), le temps de mise à jour a légèrement augmenté sans affecter l'expérience utilisateur.

**Persistance des sessions** : lors de sessions live, un logiciel client spécial appelé *Session Manager*, toujours connecté, est chargé de gérer la persistance des sessions. Comme tous les autres clients, il reçoit les mises à jour des états et les enregistre dans un fichier unique chaque seconde. Cependant, chaque document Yjs associé aux WAMs n'est pas sauvegardé en tant que tel : seule la représentation JSON de l'ensemble des WAMs et des graphes formant les installations musicales est rendue persistante, excluant ainsi les informations supplémentaires stockées dans les documents Yjs pour le bon fonctionnement de l'algorithme CRDT. Ainsi, il est possible de fermer une session (tous les clients se déconnectent, à l'exception du *Session Manager*) et de la reprendre ultérieurement. Lorsqu'une session enregistrée est ré-ouverte par le *Session Manager*, de nouveaux documents Yjs sont générés à partir des états sauvegardés, et la session restaurée.

**Génération d'une interface graphique 3D à la volée, par introspection, sans modification des WAMs existants** : Depuis la création du standard WAM 2.0, une grande variété de plugins est disponible. Ces plugins peuvent fonctionner sans interface graphique car le standard WAM a été conçu pour que tous plugin puisse fonctionner de cette manière, en mode headless. On peut alors leur associer une interface 3D lorsqu'on les utilise tels quels dans un univers Web immersif. Voici la méthode utilisée : un plugin WAM est téléchargé à partir de son URI mais seul son *audioNode* (responsable du traitement DSP) est instancié et intégré au graphe Web Audio. L'appel à la méthode getParameterInfo()implémentée par tous les WAMs, renvoie un objet JavaScript détaillant les paramètres du plugin. À partir de cette description, il est alors possible de générer dynamiquement un ensemble de formes 3D constituant l'interface graphique du WAM. Contrairement au monde 2D où HTML/CSS permettent de structurer et styliser les interfaces, l'environnement 3D pose uniquement sur des *meshes*, c'est-à-dire des objets formés de maillages de triangles.

## 3.3. Web Audio Modules et environnement 3D immersif

**Optionnellement, un fichier de mapping au format JSON peut être utilisé pour associer les paramètres du WAM à différents types de widgets 3D**, en spécifiant la forme, la couleur, les labels, etc. L'approche *convention over configuration*<fnref n="13" /> a été adoptée, garantissant ainsi qu'un mappage par défaut est toujours disponible : par exemple, les potentiomètres seront représentés par des cylindres 3D verticaux manipulables par click and drag avec les manettes-contrôleurs équipant les casques VR, les interrupteurs par des boutons-poussoirs, les couleurs des éléments seront générées aléatoirement, et les étiquettes reprendront les noms des paramètres d'origine. Cependant, si une personnalisation est nécessaire ou si un instrument virtuel possède un trop grand nombre de paramètres, certains peuvent être masqués ou configurés dans l'interface 3D en ajoutant le fichier ce configuration. Par exemple, un synthétiseur peut n'afficher qu'un menu de sélection de presets si l'on souhaite uniquement réutiliser des sons existants, au lieu de présenter tous ses potentiomètres, curseurs et interrupteurs issus de son interface 2D.

<footnote n="11">11. https://github.com/yjs/yjs</footnote>

<footnote n="12">12. https://blog.kevinjahns.de/are-crdts-suitable-for-shared-editing donne plus de détails sur les performances de l'algorithme CRDT utilisé par Yjs.</footnote>

<footnote n="13">13. https://en.wikipedia.org/wiki/Convention_over_configuration</footnote>
<figure><img src="image_8.png" /><figcaption>FIGURE 7 – WAM Big Muff (écrit en FAUST, compilé en We assembly) : description textuelle de ses paramètres renvoyée par un appel à la méthode getParameterInfo().</figcaption></figure>

La Figure 7 illustre la recréation en WAM de la célèbre pédale de fuzz "Big Muff" d'Electro-Harmonix. La propriété customParameters dans son fichier de configuration JSON offre un contrôle détaillé sur l'apparence de chaque paramètre, tandis que la propriété defaultParameters définit les valeurs par défaut des contrôleurs pour les paramètres ne disposant pas de configuration spécifique. Ce fichier est généré automatiquement avec des valeurs par défaut pour chaque WAM pris en charge, à partir d'une liste d'URIs collectées via l' endpoint REST de l'initiative WAM Community <fnref n="14" />.

La représentation 3D par défaut d'un WAM repose sur une boîte 3D servant de conteneur principal pour ses paramètres. Sa taille s'ajuste dynamiquement en fonction du nombre de paramètres à afficher (Figure 8). Chaque paramètre est matérialisé par un élément visuel correspondant à son type : les boutons HTML sont convertis en boutons 3D (comme le bouton bypass dans l'exemple), tandis que les potentiomètres et curseurs HTML prennent la forme de cylindres 3D. Par ailleurs, une sphère verte et une sphère rouge sont positionnées de part et d'autre de la boîte, facilitant la connexion du WAM à d'autres WAMs ou à des éléments spécifiques de l'installation musicale 3D.

Support de représentations 3D et d'interactions personnalisées : les fichiers de configuration ont la possibilité de déléguer la gestion de la représentation 3D d'un WAM à un code JavaScript personnalisé. Cette fonctionnalité s'avère particulièrement utile pour les certains WAMs existant disposant d'inter faces graphiques complexes. C'est par exemple le cas du séquenceur pas à pas et du synthétiseur à quatre canaux utilisés dans la version actuelle de notre application, comme le montre la Figure 9.

## 4. INTERACTION UTILISATEUR

Cette section présente les principales actions pouvant être réalisées pour construire et modifier des installations musicales dans le monde immersif proposé. Les interactions jouent un rôle crucial dans une application telle que celle présentée dans cet article. Durant les phases de conception et de développement, les premières modifications apportées à la conception de l'interface utilisateur ont permis de l'adapter à son utilisation. Après la réalisation des premiers prototypes fonctionnels, des tests utilisateurs ont été menés, décrits dans la section 6.

<figure><img src="image_9.png" /><figcaption>FIGURE 8 – Représentation du WAM Big Muff de la Figure 7.</figcaption></figure>

<figure><img src="image_10.png" /><figcaption>FIGURE 9 – Un WAM step sequencer 3D avec une GUI personnalisée. Il contient un synthétiseur quatre voix.</figcaption></figure>

L'application permet aux utilisateurs de créer des installations musicales virtuelles composées de générateurs de notes, d'instruments virtuels et d'effets audio (Figure 10). Chaque élément est traité comme un nœud audio et relié à d'autres nœuds pour former un graphe audio orienté. Certains nœuds, spécifiques et fournis par l'hôte, incluent le "nœud de destination audio» qui correspond à une sortie sonore spatialisée en 3D. C'est le seul nœud ne possédant pas de sphère rouge à l'extrémité droite de sa boîte, car il ne peut être connecté à un autre WAM en sortie. L'ensemble minimal des interactions utilisateurs est le suivant :

- Les utilisateurs peuvent se déplacer dans la scène 3D, dans le plan XZ (plan horizontal)

- Les utilisateurs peuvent créer une session ou rejoindre une session existante.

- Les utilisateurs peuvent ajouter un WAM ou un nœud spécifique (tel qu'une destination audio) à la scène 3D.

- Les utilisateurs peuvent connecter/déconnecter des WAMs pour construire une installation musicale.

- Les utilisateurs peuvent ajuster les valeurs des paramètres des WAMs.

- Les utilisateurs peuvent changer la position ou l'orientation d'un WAM, les connexions devant suivre (représentation 3D des arcs dans le graphe audio).

- Les utilisateurs peuvent supprimer un WAM.

- Les utilisateurs peuvent interagir avec l'hôte (menu, etc.).

- Les utilisateurs peuvent se déplacer et voir les autres participants.

Ajout d'un WAM ou d'un nœud spécifique : un menu 3D a été conçu pour permettre la sélection des plugins à ajouter à la scène 3D. Ce menu est organisé de manière hiérarchique, avec des sous-menus pour chaque catégorie : générateurs de notes, instruments, effets audio, ainsi que la sortie audio. Il est développé à l'aide du Mixed Reality Toolkit (MRTK), une bibliothèque proposée par Microsoft pour le casque XR Hololens et adaptée à BabylonJS. Les entrées du menu sont définies dans un fichier de configuration JSON, qui spécifie les noms des catégories, les WAMs associés (avec leurs noms et chemins de fichiers de configuration, décrits précédemment), ainsi que les nœuds spéciaux, tels que le nœud de destination audio.

Sélection et positionnement 3D des éléments : un aspect clé de l'interaction utilisateur est la capacité à manipuler les plu-

<footnote n="14">14. https://www.webaudiomodules.com/community/plugins.json</footnote>
<figure><img src="image_11.png" /><figcaption>FIGURE 10 – Une installation musicale au premier plan, l'ava-
tar d'un autre participant à gauche, et un troisième participant
au fond, occupé à construire sa propre installation.</figcaption></figure>

gins WAM eux-mêmes. En pointant une boîte à la base d'un
WAM, puis en gardant la gachette droite du contrôleur VR en-
foncée, les utilisateurs peuvent repositionner librement l'ensemble
le WAM dans la scène virtuelle. Cette flexibilité permet aux uti-
lisateurs de placer les WAMs à des endroits pratiques pour l'in-
teraction et l'organisation visuelle. Nous avons également ajouté
des "assistants" et des "retours visuels" à cette interaction : grâce
aux rayons émis par les contrôleurs VR, l'opération "pointer puis
appuyer sur la gâchette pour faire glisser" est simplifiée grâce à
l'utilisation en coulisses d'une boîte invisible, plus grande, fa-
cilitant ainsi la sélection du WAM. La boîte invisible apparaît
avec une certaine transparence tant que le WAM est sélectionné
et déplacé, fournissant un feedback visuel confirmant que l'ob-
jet est bien sélectionné (Figure 11). Dans cet état sélectionné,
les mouvements du pointeur VR déplacent uniquement le WAM
dans le plan X/Y par rapport à l'utilisateur (mouvements haut /
bas / gauche / droite uniquement), et pour positionner un WAM
plus près ou plus loin de la position de l'utilisateur le long de
son axe local Z, le joystick droit peut être utilisé. Dans la version
actuelle, un WAM sélectionné peut aussi être pivoté en tournant
la manette servant à sélectionner. Lorsque les WAMs ne sont
pas sélectionnés, les utilisateurs peuvent se déplacer à l'aide des
mouvements de caméra standards fournis par la bibliothèque Ba-
bylonJS (caméra libre contrainte au plan XZ horizontal).

Connexion et déconnexion d'éléments : pour connecter des nœuds et établir un routage audio entre eux, les utilisateurs peuvent utiliser une approche simple et intuitive cliquer/déplacer. Il suffit de viser la sphère de sortie d'un élément, la sphère devient alors surlignée, légèrement zoomée. Ensuite, il faut garder appuyée la gâchette du contrôleur et déplacer le point de visée. Un câble virtuel apparaît, allant de la sphère de sortie du WAM de départ, son extrémité en forme de flèche allant vers la position pointée que l'on déplace. Lorsque la position pointée est proche d'une sphère d'entrée, celle-ci devient alors surlignée et zoomée. Il suffit alors de relâcher la gâchette pour établir la connexion (Figure 12). Cette représentation visuelle permet de construire visuellement le graphe formant l'installation musicale, illustrant le routage audio. Pour déconnecter des éléments, il suffit de suivre la même procédure mais en visant d'abord la sphère d'entrée d'un élément, puis de faire glisser et relâcher l'extrémité du câble connecté sans qu'aucune sphère de destination ne soit surlignée. Si plusieurs câbles sont connectés, les câbles seront "separés" lorsqu'ils seront cliqués ; il faudra alors sélectionner celui à déconnecter. Nous utilisons également des sphères invisibles de taille plus grande pour faciliter la sélection d'une sphère d'entrée ou de sortie, même lorsque le pointeur est proche, sans nécessité d'être exactement positionné dessus.

Ajustement des paramètres : au-delà du placement des WAMs, l'interaction utilisateur s'étend à la manipulation des paramètres audio individuels. En survolant un paramètre avec le curseur du contrôleur, celui-ci est mis en surbrillance (Fi-

<figure><img src="image_12.png" /><figcaption>FIGURE 11 – Un WAM d’effet a été sélectionné : sa “boîte” est affichée en gris transparent, légèrement zoomée, indiquant qu’il peut être déplacé ou orienté.</figcaption></figure>

gure 13), offrant un retour visuel pour indiquer quel paramètre
peut être modifié. Au-delà de la surbrillance, la méthode d'in-
teraction proposée dépend du type du paramètre. Les paramètres
de type *switch* sont visualisés sous forme de boutons pousoirs
3D et peuvent être modifiés en les pointant et en appuyant sur la
gâchette. Les paramètres de type *knob* ou * slider* sont visualisés
sous forme de cylindre ou de boîte 3D et peuvent être ajustés en
pointant et en maintenant la gachette enfoncée puis et en faisant
glisser l'élément 3D verticalement avec le contrôleur. La valeur
du paramètre en cours d'ajustement est affichée en temps réel
au-dessus de l'élément 3D, offrant ainsi un retour visuel clair
(Figure 14).

Les modifications apportées aux valeurs des paramètres dans
la représentation 3D sont immédiatement transmises au plugin
correspondant via l'API WAM. Cela garantit que le son produit
reflète en temps réel les valeurs des paramètres en cours de mo-
dification, permettant ainsi une utilisation intuitive.

<figure><img src="image_13.png" /><figcaption>FIGURE 12 – On clique sur une sphère de sortie et on déplace le rayon jusqu’à une sphère d’entrée, en maintenant la gâchette enfoncée, pour connecter des WAMs.</figcaption></figure>

Suppression d'éléments et fonctionnalités avancées : pour améliorer davantage l'interaction utilisateur, le projet introduit un menu contextuel offrant des options de contrôle et de manipulation supplémentaires, moins fréquemment utilisées. L'utilisateur peut activer ce menu contextuel en cliquant sur un WAM avec un bouton spécifique du contrôleur. L'une des principales options du menu est la possibilité de supprimer le WAM sélectionné de la scène. Une autre option clé permet de réaliser une rotation 3D précise d'un WAM autour de ses 3 axes.
<figure><img src="image_14.png" /><figcaption>FIGURE 13 – Exemple de paramètre sélectionné : il passe en surbrillance.</figcaption></figure>

<figure><img src="image_15.png" /><figcaption>FIGURE 15 – Avatar d'un participant.</figcaption></figure>

## 5. REPRÉSENTATION DES PARTICIPANTS

Pour améliorer l'expérience collaborative et offrir une sensation de présence au sein de l'environnement virtuel, le projet met en place un système de représentation et de synchronisation des avatars des participants (Figure 15). Dans l'environnement virtuel, chaque utilisateur est représenté par un avatar simple dont la tête et les mains suivent respectivement les mouvements du casque VR et des contrôleurs de l'utilisateur. Cette représentation améliore la sensation de présence et permet aux participants de percevoir les actions des autres utilisateurs. Le système d'emojis utilise un mécanisme de synchronisation pour garantir la cohérence des positions et actions entre tous les utilisateurs connectés. Le système d'emojis des joueurs repose sur le mécanisme de représentation d'état et de synchronisation décrit dans la section 3, garantissant la cohérence des positions et actions entre tous les clients connectés.

<figure><img src="image_16.png" /><figcaption>FIGURE 14 – Exemple d'interaction : ajustement d'un paramètre.</figcaption></figure>

## 6. TEST UTILISATEURS

Des tests utilisateurs préliminaires ont été réalisés alors que l'application était encore en développement. Six participants, étudiants en Master ou Doctorat, sans expérience en réalité virtuelle, ont utilisé des casques Oculus 2 et Oculus Pro. Deux sessions ont été organisées : une avec les participants P1, P2, P3 et P4 partageant la même expérience, et une autre avec P5 et P6, tous présents dans la même pièce. L'objectif principal était d'évaluer l'interface utilisateur (UI/UX), et non la robustesse ou

la performance de l'application à distance. Les participants devaient accomplir onze tâches. Avant de tester l'application, ils ont été brièvement informés de ses fonctionnalités et des commandes simples à utiliser. Après cette introduction, chaque tâche était annoncée oralement. Nous avons attendu que chaque participant termine sa tâche avant de passer à la suivante. Des notes ont été prises pour enregistrer leurs réactions, et chaque tâche a été évaluée en temps réel par les participants avant de passer à la suivante. Des scores allant de 1 (difficile à accomplir) à 5 (facile à accomplir) ont été attribués après la réalisation de chaque tâche et sont présentés dans la Figure 16. Les résultats détaillés sont disponibles en ligne <fnref n="15" />, nous présentons ici uniquement un résumé.

Le test a impliqué un client supplémentaire : un navigateur web standard avec l'extension "immersive web emulator", permettant de surveiller la session. La plupart des tâches ont été accomplies sans difficulté, et sont devenues encore plus simples une fois que les utilisateurs se sont habitués aux contrôles. Les principales difficultés concernaient le positionnement précis des éléments : P2 a exprimé le souhait de pouvoir faire pivoter les objets autour de l'axe Y. Il a créé un élément à partir d'une autre position et n'a pas pu l'aligner avec les objets précédents. Après un moment, il a découvert qu'il pouvait se déplacer dans le monde virtuel pour obtenir une meilleure position et faciliter le placement des objets. P3 a trouvé un bug lié au plan de défilement lors du déplacement des objets. Au lieu de se déplacer dans le plan X/Y, les mouvements étaient imprévisibles. Après avoir rechargé la page, il a retrouvé la session dans son état initial et a pu continuer. P2 et P6 ont trouvé la détection de collisions entre les participants et les éléments 3D parfois compliquée, ce qui rendait la manipulation des objets difficile. Ils ont suggéré de refaire certains tests sans détection de collisions. P2 aurait aimé pouvoir redimensionner certains objets (comme le séquenceur pas à pas, trop volumineux). P3 aurait préféré que certains objets, comme le séquenceur, apparaissent verticalement plutôt qu'horizontalement, ce qui aurait facilité la sélection des notes. P3 a également mentionné : "Lorsque les objets sont loin, il est parfois difficile de les sélectionner." Tout au long de l'expérience de 40 minutes, aucun problème de fluidité ou de latence n'a été remarqué, et l'expérience s'est déroulée sans accroc, même lorsqu'un des participants a trouvé un bug et a dû recharger la page web de l'application WAM Jam Party pour rejoindre la session en cours. La plupart des problèmes relevés étaient liés à l'absence d'un moyen simple pour faire pivoter les objets, et des gestes à deux mains ont été suggérés comme solution. La détection de collisions a également posé des problèmes (elle interdit à un utilisateur de passer à travers les objets), et il a été suggéré soit d'essayer l'expérience sans cette fonctionnalité, soit de

<footnote n="15">15. https://tinyurl.com/shbry583</footnote>
<table><caption>FIGURE 16 – Résultats des tests utilisateurs (5 = facile, 0 = difficile).</caption><thead><tr><th>Tâche</th><th>Description</th><th>P1</th><th>P2</th><th>P3</th><th>P4</th><th>P5</th><th>P6</th><th>Moyenne</th><th>Deviation</th></tr></thead><tbody><tr><td>1</td><td>Se déplacer et naviguer dans l'univers 3D</td><td>5</td><td>5</td><td>4</td><td>5</td><td>5</td><td>4</td><td>4,7</td><td>0,5</td></tr><tr><td>2</td><td>Afficher et cacher le menu principal.</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5,0</td><td>0,0</td></tr><tr><td>3</td><td>Créer un générateur de notes de type step sequencer.</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5,0</td><td>0,0</td></tr><tr><td>4</td><td>Le positionner dans l'espace par viser/sélectionner/déplacer</td><td>4</td><td>4</td><td>2</td><td>3</td><td>5</td><td>5</td><td>3,8</td><td>1,2</td></tr><tr><td>5</td><td>Ajouter un effet dans l'installation musicale et le connecter au step sequencer.</td><td>3</td><td>3</td><td>2</td><td>4</td><td>5</td><td>4</td><td>3,5</td><td>1,0</td></tr><tr><td>6</td><td>Créer une sortie audio spatialisée, la positionner et connecter l'effet précédent à cette sortie.</td><td>4</td><td>3</td><td>2</td><td>4</td><td>5</td><td>5</td><td>3,8</td><td>1,2</td></tr><tr><td>7</td><td>Modifier les connexions dans le graphe.</td><td>4</td><td>5</td><td>4</td><td>4</td><td>5</td><td>5</td><td>4,5</td><td>0,5</td></tr><tr><td>8</td><td>Ajouter des notes au step sequencer</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5,0</td><td>0,0</td></tr><tr><td>9</td><td>Modifier des valeurs de paramètres des WAMs</td><td>5</td><td>5</td><td>5</td><td>4</td><td>5</td><td>5</td><td>4,8</td><td>0,4</td></tr><tr><td>10</td><td>Ajouter un nouvel élément</td><td>4</td><td>5</td><td>4</td><td>5</td><td>5</td><td>5</td><td>4,7</td><td>0,5</td></tr><tr><td>11</td><td>Se déplacer près de l'installation créer par un autre utilisateur connecté et la modifier.</td><td>5</td><td>5</td><td>3</td><td>5</td><td>5</td><td>5</td><td>4,7</td><td>0,8</td></tr></tbody></table>

mettre en place une manière plus tolérante de gérer les collisions.

## 7. DOMAINES D'AMÉLIORATION, LIMITES, PERSPECTIVES FUTURES

Comme mentionné, le travail présenté est encore un prototype et beaucoup reste à faire. D'après les tests d'utilabilité réalisés, de nouvelles interactions, comme les gestes à deux mains pour certaines tâches (par exemple la rotation des objets), doivent être évaluées. De nouveaux WAMs, pour rendre l'application plus polyvalente, seront ajoutés. De plus, les testeurs ont demandé des environnements visuellement plus attrayants et réalisés, afin de mieux différencier les WAMs. Un éditeur interactif pour créer des interfaces 3D est en développement, permettant de créer semi-automatiquement des GUIs 3D plus complexes, avec des textures et un choix élargi de contrôleurs 3D.

La norme WAM supporte également des extensions, comme l'animation d'objets 3D ou des shaders WebGL réagissant aux sons joués, ou l'utilisation de WAMs modulant les paramètres d'autres WAMs. Ces fonctionnalités offriraient une expérience plus dynamique, renforçant la connexion entre son et visuel, une caractéristique très appréciée dans le Sequencer Party original, comme des orbiters 3D modulant un filtre cutoff.

La collaboration est un autre domaine d'amélioration : les versions futures pourraient introduire des fonctionnalités comme le chat vocal de proximité, pour des interactions plus naturelles entre les collaborateurs, renforçant ainsi la sensation de présence et l'expérience de collaboration [2]. L'ajout de la gestion des comptes utilisateurs, permettant de créer et partager des sessions, serait un changement important, facilitant la collaboration et la présentation des créations dans le "multivers musical". Il est également nécessaire de mesurer la performance, notamment la la-

tence réseau et la charge maximale (combien de WAMs et de paramètres l'application peut-elle gérer avant dégradation). Enfin, bien que les WAMs soient interopérables dans le monde HTML, ce n'est pas encore le cas dans WebXR, car le code de l'interface utilisateur est spécifique à BabylonJS. Nous aimerions collaborer avec d'autres équipes utilisant d'autres frameworks 3D pour repenser la conception des WAMs avec des "adaptateurs WAM" pour différentes plateformes ou définir un code pivot pour décrire des interfaces graphiques 3D abstraites.

## 8. TRAVAUX SIMILAIRES ET CONCLUSION

État actuel de l'application : tous les éléments de base nécessaires pour créer une application immersive multi-participants destinée à la création d'installations musicales électroniques ont été mis en place. Au moment de la rédaction, une dizaine de plugins WAM sont disponibles dans l'application, mais de nouveaux sont ajoutés régulièrement. Par rapport à Sequencer Party, ce premier prototype manque encore de certaines fonctionnalités de "confort", mais il est entièrement fonctionnel. L'univers musical proposé est cohérent entre les participants, chaque modification est propagée et peut être expérimentée sans être perturbée par la latence, car la synchronisation audio est gérée localement. Le monde 3D est encore simple dans ce premier prototype (un plan avec une texture de grille, avec des murs aux frontières), mais il est suffisant pour offrir une bonne sensation d'espace et de profondeur. L'application peut être testée en ligne et est open source<fnref n="16" />.

Un certain nombre de travaux connexes ont été réalisés, basés sur des applications natives (par opposition aux applications web), notamment dans le contexte des instruments et performances VR multi-utilisateurs, tels que celui de Hamilton et al. avec Carillon [12], un environnement de composition musicale et de performance interactive centré autour d'un instrument virtuel contrôlé de manière collaborative et multijoueur avec un suivi gestuel des mains, ou celui de Ciciliani qui a étudié la manière dont les avatars peuvent interagir avec la topologie des mondes virtuels et l'utilisation de l'environnement 3D à la fois comme instrument et partition [13]. Syukur et al. ont conçu Gamelan Land [14], un jeu dans un monde virtuel pour apprendre et jouer de la musique orchestrale, où les règles sont basées sur la présence sociale des participants. Les travaux de Bell avec PatchXR pour l'exploration multi-utilisateurs de grands corpus sonores [15], ou ceux de Bauer et al. sur une plateforme de composition en réalité augmentée permettant de créer des expériences musicales interactives [16], sont également pertinents. Cependant, il n'existe pas beaucoup de travaux comparables utilisant la technologie WebXR pour le Métavers Musical. Dziwis et al. ont proposé Orchestra [17], une boîte à outils open-source pour réaliser des performances musicales pour les environnements immersifs basés-web : diffusion audio et vidéo en direct, live coding dans plusieurs langages de programmation [18], utilisation d'algorithmes génératifs et d'instruments virtuels développés avec PureData [19].

Le travail le plus proche basé sur WebXR que l'on peut comparer avec WAM Jam Party est "Musical Metaverse Playgrounds" de Boem et Turchet [2]. Cependant, WAM Jam Party diffère de celui de Boem et Turchet sur plusieurs points : 1) Les générateurs de notes, instruments virtuels et effets audio sont tous des plugins interopérables basés sur Web Audio Modules. Il existe plus d'une centaine de Web Audio Modules prêts à l'emploi disponibles sur le web, qui peuvent être intégrés rapidement à l'aide d'importations dynamiques JavaScript via leur URI. Créer de nouveaux plugin WAM est relativement simple, en particulier avec l'IDE FAUST [20], qui peut compiler des plugins WAM en WebAssembly et les publier sur un serveur en

<footnote n="16">16. https://musical-metaverse.onrender.com/, code source : https://github.com/Doorii4N/musical-multiverse-vr</footnote>
quelques secondes, les rendant utilisables par toutes les applications hôtes de WAM. 2) Les interfaces graphiques 3D interactives de ces Web Audio Modules sont générées à la volée et ne tentent pas de ressembler à des boutons, curseurs ou interruITEURS 2D existants, recréés en 3D, mais plutôt à des interfaces spécialement adaptées à l'utilisation en VR/XR. 3) L'application peut fonctionner via WebRTC ou WebSockets (il suffit de changer une ligne de code), et les algorithmes de type CRDT utilisés sont particulièrement bien adaptés au partage synchro-nisé des états des objets, offrant une robustesse dans la gestion des connexions/déconnexions (tout est enregistré) et sont bien adaptés à la construction de mondes persistants. 4) L'application est entièrement codée en JavaScript et utilise de nombreuses fonctionnalités de BabylonJS, y compris des éléments provenant du toolkit MRTK des HoloLens. BabylonJS propose de nombreuses interactions (appelés *behaviors* dans la documentation) spécifiques à la VR/XR et permettant des interactions personnalisables avec les éléments (par exemple, déplacer un élément le long d'un plan ou d'un hémisphère prédéfini, redimensionner des objets, etc.). 5) WAM Jam Party permet d'ajouter/retirer interactivement des WAMs 3D dans le monde virtuel proposé, et ces WAMs peuvent être positionnés, orientés, connectés pour former des graphes complexes/installations musicales qui peuvent être manipulés en temps réel par tous les participants. Proposer de nouveaux WAMs consiste à modifier un fichier de configuration JSON, et ils seront disponibles pour tous les participants dans le menu principal.

En conclusion, WAM JAM Party est un outil de construction extensible qui offre une bonne base pour la création et l'expérimentation dans le métavers musical. Son design extensible, basé sur des plugins WAM et permettant la génération d'interfaces graphiques 3D à la volée, ouvre une large gamme de possibilités. La création multi-participants d'installations musicales par l'interconnexion de plugins de haut niveau le distingue des autres travaux existants.

## 9. REMERCIEMENTS

Ce travail a été soutenu par le gouvernement français, à travers le plan d'investissement France 2030 géré par l'Agence Nationale de la Recherche, dans le cadre du projet UCA DS4H, référence ANR-17-EURE-0004.

## 10. REFERENCES

[1] Luca Turchet, "Musical metaverse: vision, opportunities, and challenges," *Personal and Ubiquitous Computing*, vol. 27, no. 5, pp. 1811-1827, 2023.

[2] Alberto Boem and Luca Turchet, "Musical metaverse playgrounds: exploring the design of shared virtual sonic experiences on web browsers," in *2023 4th International Symposium on the Internet of Sounds*. IEEE, 2023, pp. 1-9.

[3] Michel Buffa, Jerome Lebrun, Jari Kleimola, Oliver Larkin, and Stephane Letz, "Towards an open web audio plugin standard," in *Companion Proceedings of the The Web Conference 2018*, 2018, pp. 759-766.

[4] François Déchelle, Riccardo Borghesi, Maurizio De Cecco, Enzo Maggi, Butch Rovan, and Norbert Schnell, "jmax: an environment for real-time musical applications," *Computer Music Journal*, vol. 23, no. 3, pp. 50-58, 1999.

[5] James McCartney, "Rethinking the computer music language: Super collider," *Computer Music Journal*, vol. 26, no. 4, pp. 61-68, 2002.

[6] Miller Puckette, "Fts: A real-time monitor for multiprocessor music synthesis," *Computer music journal*, vol. 15, no. 3, pp. 58-67, 1991.

[7] Hongchan Choi, "Audioworklet: The future of web audio," in *ICMC*, 2018.

[8] Michel Buffa, Jerome Lebrun, Shihong Ren, Stéphane Letz, Yann Orlarey, Romain Michon, and Dominique Fober, "Emerging w3c apis opened up commercial opportunities for computer music applications," in *The Web Conference 2020-DevTrack*, 2020.

[9] Michel Buffa, Pierre Kouyoumdjian, Quentin Beauchet, Yann Forner, and Michael Marynowic, "Making a guitar rack plugin-webaudio modules 2.0," in *Web Audio Conference 2022*, 2022.

[10] Jari Kleimola and Oliver Larkin, "Web audio modules," in *Proc. 12th Sound and Music Computing Conference*, 2015.

[11] Michel Buffa, Shihong Ren, Owen Campbell, Tom Burns, Steven Yi, Jari Kleimola, and Oliver Larkin, "Web audio modules 2.0: An open web audio plugin standard," in *Companion Proceedings of the Web Conference 2022*, 2022, pp. 364-369.

[12] Rob Hamilton and Chris Platz, "Gesture-based collaborative virtual reality performance in carillon," in *Proceedings of the 2016 international computer music conference*, 2016, pp. 337-340.

[13] Marko Ciciliani, "Virtual 3d environments as composition and performance spaces," *Journal of New Music Research*, vol. 49, no. 1, pp. 104-113, 2020.

[14] Abdul Syukur, Pulung Nurtantio Andono, and Arry Maulana Syarif, "A multiplayer virtual reality game for playing gamelan music in a virtual orchestra mode," in *2023 3rd International Conference on Intelligent Cybernetics Technology & Applications (ICICyTA)*. IEEE, 2023, pp. 375-379.

[15] Jonathan Bell, "Networked music performance in patchr and flucoma," in *International Computer Music Conference (ICMC) 2023*, 2023.

[16] Valentin Bauer and Tifanie Bouchara, "First steps towards augmented reality interactive electronic music production," in *2021 IEEE Conference on Virtual Reality and 3D User Interfaces Abstracts and Workshops (VRW)*. IEEE, 2021, pp. 90-93.

[17] Damian Dziwis, Henrik Von Coler, and Christoph Pörschmann, "Orchestra: a toolbox for live music performances in a web-based metaverse," *Journal of the Audio Engineering Society*, vol. 71, no. 11, pp. 802-812, 2023.

[18] Damian Dziwis, Henrik von Coler, and Christoph Pörschmann, "Live coding in the metaverse," in *2023 4th International Symposium on the Internet of Sounds*. IEEE, 2023, pp. 1-8.

[19] Damian Dziwis, "Pdxr-the evolution of pure data into the metaverse," in *Proceeding of the International Computer Music Conference (ICMC)*, 2023, pp. 1-8.

[20] Shihong Ren, Stephane Letz, Yann Orlarey, Romain Michon, Dominique Fober, Michel Buffa, and Jerome Lebrun, "Using faust dsl to develop custom, sample accurate dsp code and audio plugins for the web browser," *Journal of the Audio Engineering Society*, vol. 68, no. 10, pp. 703-716, 2020.

[21] Yann Orlarey, Stéphane Letz, and Dominique Fober, *New Computational Paradigms for Computer Music*, chapter "Faust: an Efficient Functional Approach to DSP Programming", Delatour, Paris, France, 2009.

[22] A. Boem, M. Tomasetti, A. Gabriele, A. Di Scipio, and L. Turchet, "User needs in the musical metaverse: A case study with electroacoustic musicians," in *Proceedings of the International Conference on New Interfaces for Musical Expression (NIME)*, 2024.
[23] Stéphane Letz, Yann Orlarey, and Dominique Fober, “Compiling faust audio dsp code to webassembly,” in *Web Audio Conference*, 2017.

[24] Michel Buffa, Shihong Ren, Tom Burns, Antoine Vidal-Mazuy, and Stéphane Letz, “Evolution of the web audio modules ecosystem,” in *Web Audio Conference 2024. Ze-nodo*, 2024.