Les librairies JavaScript

Mes recherches d’une librairie JavaScript d’intégration audio en 3D m’ont mené vers trois outils, qui fournissent une implantation en format ambisonique :

JSAmbisonics

Liens vers les ressources : Répertoire GitHub Démonstrations

Développée par David Poirier-Quinot et Archontis Politis, elle est la plus ancienne des trois, et utilise l’API Web Audio native pour le rendu via le navigateur. Les dernières mises à jour datent de 2021, et les premiers téléchargements du code vers GitHub de 2016. Un ensemble de méthodes (des outils) sont mises à disposition pour des traitements ambisoniques jusqu’au 3ᵉ ordre :

Objet (description) Objet (code) Propriétés
Encodeur mono → ambisonique monoEncoder encoder.azim (azimuth)
encoder.elev (élévation)
Rotation dynamique sur les trois axes sceneRotator
sceneMirror rotator.yaw (axe Z)
rotator.pitch (axe Y)
rotator.roll (axe X)
Microphone virtuel ambisonique (1ᵉʳ à 3ᵉ ordre) virtualMix vmic.azim (azimuth)
vmic.elev (élévation)
Décodeur binaural binDecoder
Convertisseur ACN / N3D / SN3D / FuMA converters.A2B
Convolution multicanal convolver
Analyseurs (intensité acoustique, distribution spatiale, valeurs RMS) intensityAnalyser
powermapAnalyser
rmsAnalyser

Omnitone

Liens vers les ressources : Site web Répertoire GitHub Démonstrations

La librairie Omnitone est publiée par Google depuis 2016, et la dernière mise à jour date de 2019. Les fonctionnalités sont plus ou moins les mêmes, mais elle offre un outil supplémentaire : la possibilité d’associer le renderer (FOA ou HOA) à une matrice. Plus concrètement, cette matrice qui comporte des données de position et de rotation peut être celle de la caméra de Three.js, ce qui permet directement d’associer la spatialisation sonore à cette caméra, contrôlée par l’utilisateur.

Resonance Audio

Liens vers les ressources : Site web Répertoire GitHub

La librairie Resonance Audio SDK, auparavant appelée Songbird, est aussi développée par Google. Elle est disponible depuis 2017 et la dernière mise à jour date de la même année. Celle-ci est construite à partir d’Omnitone, et ajoute des fonctionnalités supplémentaires. D’abord, elle est disponible pour le Web en JavaScript, mais également pour Unity, Unreal Engine, FMOD, Wwise, Android et IOS, et en VST.

Les plateformes disponibles dans la documentation.

Les plateformes disponibles dans la documentation.

Surtout, elle ajoute des fonctionnalités très utiles :

Fonction (description) Fonction (code) Paramètres
Paramétrage de l’acoustique de la pièce (dimensions et matériaux) ;
la liste des matériaux disponibles setRoomProperties dimensions
materials
Vitesse du son setSpeedOfSound
Distance minimale (gain maximum) et maximale (atténuation totale) de la source (par rapport au listener) setMinDistance
setMaxDistance
Position et orientation de la source : autant par rapport à la pièce virtuelle (dont on a donné les paramètres acoustiques) que par rapport à la scène Three.js setOrientation
setPosition forwardX, forwardY, forwardZ, upX, upY, upZ
x, y, z
Directivité de la source sonore setDirectivityPattern alpha (directivité entre 0 et 1)
sharpness (coefficient entre 1 et +infini)
Largeur de la source sonore (0 → source ponctuelle ; 360° → source omnidirectionnelle) setSourceWidth
Rolloff (linéaire, logarithmique ou nul) setRolloff

Ces nouvelles fonctionnalités permettent de créer une pièce, et donc une ambiance sonore, infiniment plus personnelle et immersive. Les propriétés acoustiques (dimensions et matériaux) associées au placement des sources, peuvent être associées aux propriétés visuelles de la pièce construite avec Three.js ; ou même, de manière loufoque composer un paysage sonore intriguant, narratif, spécial. En personnalisant l’outil, on peut aussi modifier les coefficients de réflexion, fréquence de coupure, distances minimale et maximale, durée de la réverbération... Voici la liste de toutes les propriétés qui peuvent être modifiées.

L’intégration audio en WebGL

Le chargement des fichiers audio peut être réalisé de différentes façons. En termes de méthodes, plusieurs variations sont possibles, mais là n’est pas le sujet. L’intérêt ici, est de discuter les deux moyens de chargement des sources sonores.