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 :
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 |
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.
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.
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.
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.