Una guida completa per sviluppatori sul calcolo e l'implementazione dell'audio spaziale 3D in WebXR usando la Web Audio API, dai concetti base alle tecniche avanzate.
Il Suono della Presenza: Un'Analisi Approfondita dell'Audio Spaziale WebXR e del Calcolo della Posizione 3D
Nel panorama in rapida evoluzione delle tecnologie immersive, la fedeltà visiva spesso ruba la scena. Ci meravigliamo di display ad alta risoluzione, shader realistici e modelli 3D complessi. Tuttavia, uno degli strumenti più potenti per creare una vera presenza e credibilità in un mondo virtuale o aumentato viene spesso trascurato: l'audio. Non un audio qualsiasi, ma un suono completamente spazializzato e tridimensionale che convince il nostro cervello di essere veramente lì.
Benvenuti nel mondo dell'audio spaziale WebXR. È la differenza tra sentire un suono 'nell'orecchio sinistro' e sentirlo provenire da un punto specifico nello spazio: sopra di te, dietro un muro o sfrecciare vicino alla tua testa. Questa tecnologia è la chiave per sbloccare il livello successivo di immersione, trasformando esperienze passive in mondi interattivi e profondamente coinvolgenti, accessibili direttamente tramite un browser web.
Questa guida completa è pensata per sviluppatori, ingegneri del suono e appassionati di tecnologia di tutto il mondo. Demistificheremo i concetti e i calcoli fondamentali alla base del posizionamento del suono 3D in WebXR. Esploreremo la fondamentale Web Audio API, analizzeremo la matematica del posizionamento e forniremo spunti pratici per aiutarvi a integrare l'audio spaziale ad alta fedeltà nei vostri progetti. Preparatevi ad andare oltre lo stereo e a imparare come costruire mondi che non solo sembrano reali, ma suonano reali.
Perché l'Audio Spaziale è una Svolta per WebXR
Prima di addentrarci nei dettagli tecnici, è fondamentale capire perché l'audio spaziale è così fondamentale per l'esperienza XR. I nostri cervelli sono programmati per interpretare i suoni al fine di comprendere l'ambiente circostante. Questo sistema primordiale ci fornisce un flusso costante di informazioni su ciò che ci circonda, anche per le cose al di fuori del nostro campo visivo. Replicando questo in un contesto virtuale, creiamo un'esperienza più intuitiva e credibile.
Oltre lo Stereo: Il Salto verso Paesaggi Sonori Immersivi
Per decenni, l'audio digitale è stato dominato dal suono stereo. Lo stereo è efficace nel creare un senso di destra e sinistra, ma è fondamentalmente un piano sonoro bidimensionale esteso tra due altoparlanti o cuffie. Non può rappresentare accuratamente l'altezza, la profondità o la posizione precisa di una sorgente sonora nello spazio 3D.
L'audio spaziale, d'altra parte, è un modello computazionale di come il suono si comporta in un ambiente tridimensionale. Simula come le onde sonore viaggiano da una sorgente, interagiscono con la testa e le orecchie dell'ascoltatore e arrivano ai timpani. Il risultato è un paesaggio sonoro in cui ogni suono ha un punto di origine distinto nello spazio, muovendosi e cambiando realisticamente mentre l'utente muove la testa e il corpo.
Vantaggi Chiave nelle Applicazioni XR
L'impatto di un audio spaziale ben implementato è profondo e si estende a tutti i tipi di applicazioni XR:
- Realismo e Presenza Migliorati: Quando un uccello virtuale canta da un ramo sopra di te, o dei passi si avvicinano da un corridoio specifico, il mondo sembra più solido e reale. Questa congruenza tra segnali visivi e uditivi è una pietra miliare per creare la 'presenza', la sensazione psicologica di trovarsi nell'ambiente virtuale.
- Migliore Guida e Consapevolezza per l'Utente: L'audio può essere un modo potente e non invadente per dirigere l'attenzione di un utente. Un sottile segnale sonoro proveniente dalla direzione di un oggetto chiave può guidare lo sguardo di un utente in modo più naturale di una freccia lampeggiante. Aumenta anche la consapevolezza situazionale, avvisando gli utenti di eventi che accadono al di fuori della loro vista immediata.
- Maggiore Accessibilità: Per gli utenti con disabilità visive, l'audio spaziale può essere uno strumento trasformativo. Fornisce un ricco strato di informazioni sulla disposizione di uno spazio virtuale, la posizione degli oggetti e la presenza di altri utenti, consentendo una navigazione e un'interazione più sicure.
- Impatto Emotivo Più Profondo: Nei giochi, nella formazione e nello storytelling, il sound design è fondamentale per creare l'atmosfera. Un suono distante ed echeggiante può creare un senso di vastità e solitudine, mentre un suono improvviso e vicino può evocare sorpresa o pericolo. La spazializzazione amplifica immensamente questo toolkit emotivo.
I Componenti Fondamentali: Comprendere la Web Audio API
La magia dell'audio spaziale nel browser è resa possibile dalla Web Audio API. Questa potente API JavaScript di alto livello è integrata direttamente nei browser moderni e fornisce un sistema completo per il controllo e la sintesi dell'audio. Non serve solo per riprodurre file audio; è un framework modulare per creare grafi complessi di elaborazione audio.
L'AudioContext: Il Tuo Universo Sonoro
Nella Web Audio API, tutto avviene all'interno di un AudioContext
. Puoi pensarlo come il contenitore o lo spazio di lavoro per la tua intera scena audio. Gestisce l'hardware audio, la temporizzazione e le connessioni tra tutti i componenti sonori.
Crearne uno è il primo passo in qualsiasi applicazione Web Audio:
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
Nodi Audio: I Mattoni del Suono
La Web Audio API opera su un concetto di routing. Si creano vari nodi audio e li si collega insieme per formare un grafo di elaborazione. Il suono fluisce da un nodo sorgente, passa attraverso uno o più nodi di elaborazione e infine raggiunge un nodo di destinazione (solitamente gli altoparlanti dell'utente).
- Nodi Sorgente (Source Nodes): Questi nodi generano il suono. Uno comune è l'
AudioBufferSourceNode
, che riproduce una risorsa audio in memoria (come un file MP3 o WAV decodificato). - Nodi di Elaborazione (Processing Nodes): Questi nodi modificano il suono. Un
GainNode
cambia il volume, unBiquadFilterNode
può agire come equalizzatore e, cosa più importante per i nostri scopi, unPannerNode
posiziona il suono nello spazio 3D. - Nodo di Destinazione (Destination Node): Questa è l'uscita finale, rappresentata da
audioContext.destination
. Tutti i grafi audio attivi devono infine connettersi a questo nodo per essere ascoltati.
Il PannerNode: Il Cuore della Spazializzazione
Il PannerNode
è il componente centrale per l'audio spaziale 3D nella Web Audio API. Quando si instrada una sorgente sonora attraverso un `PannerNode`, si ottiene il controllo sulla sua posizione percepita nello spazio 3D rispetto a un ascoltatore. Prende un input a canale singolo (mono) e restituisce un segnale stereo che simula come quel suono verrebbe percepito dalle due orecchie dell'ascoltatore, in base alla sua posizione calcolata.
Il PannerNode
ha proprietà per controllare la sua posizione (positionX
, positionY
, positionZ
) e il suo orientamento (orientationX
, orientationY
, orientationZ
), che esploreremo in dettaglio.
La Matematica del Suono 3D: Calcolo di Posizione e Orientamento
Per posizionare accuratamente il suono in un ambiente virtuale, abbiamo bisogno di un quadro di riferimento condiviso. È qui che entrano in gioco i sistemi di coordinate e un po' di algebra vettoriale. Fortunatamente, i concetti sono molto intuitivi e si allineano perfettamente con il modo in cui la grafica 3D viene gestita in WebGL e in framework popolari come THREE.js o Babylon.js.
Stabilire un Sistema di Coordinate
WebXR e la Web Audio API utilizzano un sistema di coordinate cartesiane destrorso. Immagina di trovarti al centro del tuo spazio fisico:
- L'asse X si estende orizzontalmente (positivo alla tua destra, negativo alla tua sinistra).
- L'asse Y si estende verticalmente (positivo verso l'alto, negativo verso il basso).
- L'asse Z si estende in profondità (positivo dietro di te, negativo di fronte a te).
Questa è una convenzione cruciale. Ogni oggetto nella tua scena, inclusi l'ascoltatore e ogni sorgente sonora, avrà la sua posizione definita da coordinate (x, y, z) all'interno di questo sistema.
L'Ascoltatore (Listener): Le Tue Orecchie nel Mondo Virtuale
La Web Audio API ha bisogno di sapere dove si trovano le "orecchie" dell'utente e in che direzione sono rivolte. Questo è gestito da un oggetto speciale sull'AudioContext
chiamato listener
.
const listener = audioContext.listener;
Il listener
ha diverse proprietà che definiscono il suo stato nello spazio 3D:
- Posizione:
listener.positionX
,listener.positionY
,listener.positionZ
. Queste rappresentano le coordinate (x, y, z) del punto centrale tra le orecchie dell'ascoltatore. - Orientamento: La direzione in cui l'ascoltatore è rivolto è definita da due vettori: un vettore "forward" (avanti) e un vettore "up" (su). Questi sono controllati dalle proprietà
listener.forwardX/Y/Z
elistener.upX/Y/Z
.
Per un utente che guarda dritto davanti a sé lungo l'asse Z negativo, l'orientamento predefinito è:
- Forward (Avanti): (0, 0, -1)
- Up (Sopra): (0, 1, 0)
Fondamentalmente, in una sessione WebXR, non si impostano questi valori manualmente. Il browser aggiorna automaticamente la posizione e l'orientamento del listener ad ogni frame in base ai dati di tracciamento fisico del visore VR/AR. Il tuo compito è posizionare le sorgenti sonore.
La Sorgente Sonora: Posizionare il PannerNode
Ogni suono che si vuole spazializzare viene instradato attraverso il proprio PannerNode
. La posizione del panner è impostata nello stesso sistema di coordinate globali del listener.
const panner = audioContext.createPanner();
Per posizionare un suono, si imposta il valore delle sue proprietà di posizione. Ad esempio, per posizionare un suono 5 metri direttamente di fronte all'origine (0,0,0):
panner.positionX.value = 0;
panner.positionY.value = 0;
panner.positionZ.value = -5;
Il motore interno della Web Audio API eseguirà quindi i calcoli necessari. Determina il vettore dalla posizione del listener a quella del panner, considera l'orientamento del listener e calcola l'elaborazione audio appropriata (volume, ritardo, filtraggio) per far sembrare che il suono provenga da quella posizione.
Un Esempio Pratico: Collegare la Posizione di un Oggetto a un PannerNode
In una scena XR dinamica, gli oggetti (e quindi le sorgenti sonore) si muovono. È necessario aggiornare continuamente la posizione del PannerNode
all'interno del ciclo di rendering della tua applicazione (la funzione chiamata da requestAnimationFrame
).
Immaginiamo di utilizzare una libreria 3D come THREE.js. Avresti un oggetto 3D nella tua scena e vorresti che il suono associato lo seguisse.
// Si presume che 'audioContext' e 'panner' siano già stati creati. // Si presume che 'virtualObject' sia un oggetto della scena 3D (es. un THREE.Mesh). // Questa funzione viene chiamata ad ogni frame. function renderLoop() { // 1. Ottieni la posizione globale del tuo oggetto virtuale. // La maggior parte delle librerie 3D fornisce un metodo per questo. const objectWorldPosition = new THREE.Vector3(); virtualObject.getWorldPosition(objectWorldPosition); // 2. Ottieni il tempo corrente dall'AudioContext per una pianificazione precisa. const now = audioContext.currentTime; // 3. Aggiorna la posizione del panner affinché corrisponda a quella dell'oggetto. // È preferibile usare setValueAtTime per transizioni fluide. panner.positionX.setValueAtTime(objectWorldPosition.x, now); panner.positionY.setValueAtTime(objectWorldPosition.y, now); panner.positionZ.setValueAtTime(objectWorldPosition.z, now); // 4. Richiedi il frame successivo per continuare il loop. requestAnimationFrame(renderLoop); }
Eseguendo questa operazione ad ogni frame, il motore audio ricalcola costantemente la spazializzazione e il suono sembrerà perfettamente ancorato all'oggetto virtuale in movimento.
Oltre la Posizione: Tecniche di Spazializzazione Avanzate
Conoscere semplicemente la posizione dell'ascoltatore e della sorgente è solo l'inizio. Per creare un audio veramente convincente, la Web Audio API simula diversi altri fenomeni acustici del mondo reale.
Head-Related Transfer Function (HRTF): La Chiave per un Audio 3D Realistico
Come fa il cervello a sapere se un suono proviene da davanti, da dietro o dall'alto? È perché le onde sonore vengono sottilmente modificate dalla forma fisica della testa, del busto e delle orecchie esterne (i padiglioni auricolari). Questi cambiamenti — minuscoli ritardi, riflessioni e smorzamenti di frequenza — sono unici per la direzione da cui proviene il suono. Questo complesso filtraggio è noto come Head-Related Transfer Function (HRTF).
Il PannerNode
può simulare questo effetto. Per abilitarlo, è necessario impostare la sua proprietà panningModel
su 'HRTF'
. Questo è il gold standard per una spazializzazione immersiva e di alta qualità, specialmente per le cuffie.
panner.panningModel = 'HRTF';
L'alternativa, 'equalpower'
, fornisce un panning sinistra-destra più semplice, adatto per altoparlanti stereo, ma manca della verticalità e della distinzione fronte-retro dell'HRTF. Per WebXR, HRTF è quasi sempre la scelta corretta per l'audio posizionale.
Attenuazione della Distanza: Come il Suono Svanisce con la Lontananza
Nel mondo reale, i suoni diventano più deboli man mano che si allontanano. Il PannerNode
modella questo comportamento con la sua proprietà distanceModel
e diversi parametri correlati.
distanceModel
: Definisce l'algoritmo utilizzato per ridurre il volume del suono con la distanza. Il modello fisicamente più accurato è'inverse'
(basato sulla legge dell'inverso del quadrato), ma sono disponibili anche i modelli'linear'
ed'exponential'
per un controllo più artistico.refDistance
: Imposta la distanza di riferimento (in metri) alla quale il volume del suono è al 100%. Prima di questa distanza, il volume non aumenta. Dopo questa distanza, inizia ad attenuarsi secondo il modello scelto. Il valore predefinito è 1.rolloffFactor
: Controlla la rapidità con cui il volume diminuisce. Un valore più alto significa che il suono si attenua più rapidamente man mano che l'ascoltatore si allontana. Il valore predefinito è 1.maxDistance
: Una distanza oltre la quale il volume del suono non verrà più attenuato. Il valore predefinito è 10000.
Regolando questi parametri, è possibile controllare con precisione come si comportano i suoni a distanza. Un uccello lontano potrebbe avere un refDistance
elevato e un rolloffFactor
lieve, mentre un sussurro a bassa voce potrebbe avere un refDistance
molto breve e un rolloffFactor
ripido per garantire che sia udibile solo da vicino.
Coni Sonori: Sorgenti Audio Direzionali
Non tutti i suoni si irradiano uniformemente in tutte le direzioni. Pensa a una persona che parla, a un televisore o a un megafono: il suono è più forte direttamente di fronte e più debole ai lati e dietro. Il PannerNode
può simulare questo con un modello a cono sonoro.
Per usarlo, devi prima definire l'orientamento del panner usando le proprietà orientationX/Y/Z
. Questo è un vettore che punta nella direzione in cui il suono è "rivolto". Quindi, puoi definire la forma del cono:
coneInnerAngle
: L'angolo (in gradi, da 0 a 360) di un cono che si estende dalla sorgente. All'interno di questo cono, il volume è al massimo (non influenzato dalle impostazioni del cono). Il valore predefinito è 360 (omnidirezionale).coneOuterAngle
: L'angolo di un cono esterno più grande. Tra il cono interno e quello esterno, il volume passa gradualmente dal suo livello normale alconeOuterGain
. Il valore predefinito è 360.coneOuterGain
: Il moltiplicatore di volume applicato al suono quando l'ascoltatore si trova al di fuori delconeOuterAngle
. Un valore di 0 significa che è silenzioso, mentre 0.5 significa che è a metà volume. Il valore predefinito è 0.
Questo è uno strumento incredibilmente potente. Puoi fare in modo che il suono di un televisore virtuale emani realisticamente dai suoi altoparlanti o che le voci dei personaggi si proiettino nella direzione in cui sono rivolti, aggiungendo un altro livello di realismo dinamico alla tua scena.
Integrazione con WebXR: Mettere Tutto Insieme
Ora, colleghiamo i punti tra la WebXR Device API, che fornisce la posa della testa dell'utente, e il listener della Web Audio API, che ha bisogno di tali informazioni.
La WebXR Device API e il Render Loop
Quando avvii una sessione WebXR, hai accesso a una speciale callback requestAnimationFrame
. Questa funzione è sincronizzata con la frequenza di aggiornamento del display del visore e riceve due argomenti ad ogni frame: un timestamp
e un oggetto xrFrame
.
L'oggetto xrFrame
è la nostra fonte di verità per la posizione e l'orientamento dell'utente. Possiamo chiamare xrFrame.getViewerPose(referenceSpace)
per ottenere un oggetto XRViewerPose
, che contiene le informazioni di cui abbiamo bisogno per aggiornare il nostro AudioListener
.
Aggiornare l'AudioListener
dalla Posa XR
L'oggetto XRViewerPose
contiene una proprietà transform
, che è un XRRigidTransform
. Questa trasformazione contiene sia la posizione che l'orientamento della testa dell'utente nel mondo virtuale. Ecco come usarla per aggiornare il listener ad ogni frame.
// Nota: Questo esempio presuppone una configurazione di base in cui 'audioContext' e 'referenceSpace' esistono. // Spesso utilizza una libreria come THREE.js per la matematica di vettori/quaternioni per chiarezza, // poiché farlo con la matematica pura può essere prolisso. function onXRFrame(time, frame) { const session = frame.session; session.requestAnimationFrame(onXRFrame); const pose = frame.getViewerPose(referenceSpace); if (pose) { // Ottieni la trasformazione dalla posa dello spettatore const transform = pose.transform; const position = transform.position; const orientation = transform.orientation; // Questo è un Quaternione const listener = audioContext.listener; const now = audioContext.currentTime; // 1. AGGIORNA LA POSIZIONE DEL LISTENER // La posizione è direttamente disponibile come DOMPointReadOnly (con proprietà x, y, z) listener.positionX.setValueAtTime(position.x, now); listener.positionY.setValueAtTime(position.y, now); listener.positionZ.setValueAtTime(position.z, now); // 2. AGGIORNA L'ORIENTAMENTO DEL LISTENER // Dobbiamo derivare i vettori 'forward' e 'up' dal quaternione di orientamento. // Una libreria di matematica 3D è il modo più semplice per farlo. // Crea un vettore 'forward' (0, 0, -1) e ruotalo secondo l'orientamento del visore. const forwardVector = new THREE.Vector3(0, 0, -1); forwardVector.applyQuaternion(new THREE.Quaternion(orientation.x, orientation.y, orientation.z, orientation.w)); // Crea un vettore 'up' (0, 1, 0) e ruotalo secondo lo stesso orientamento. const upVector = new THREE.Vector3(0, 1, 0); upVector.applyQuaternion(new THREE.Quaternion(orientation.x, orientation.y, orientation.z, orientation.w)); // Imposta i vettori di orientamento del listener. listener.forwardX.setValueAtTime(forwardVector.x, now); listener.forwardY.setValueAtTime(forwardVector.y, now); listener.forwardZ.setValueAtTime(forwardVector.z, now); listener.upX.setValueAtTime(upVector.x, now); listener.upY.setValueAtTime(upVector.y, now); listener.upZ.setValueAtTime(upVector.z, now); } // ... resto del tuo codice di rendering ... }
Questo blocco di codice è il collegamento essenziale tra il movimento fisico della testa dell'utente e il motore audio virtuale. Con questo in esecuzione, mentre l'utente gira la testa, l'intero paesaggio sonoro 3D rimarrà stabile e corretto, proprio come accadrebbe nel mondo reale.
Considerazioni sulle Prestazioni e Best Practice
L'implementazione di una ricca esperienza audio spaziale richiede un'attenta gestione delle risorse per garantire un'applicazione fluida e ad alte prestazioni.
Gestione delle Risorse Audio
Il caricamento e la decodifica dell'audio possono richiedere molte risorse. Precarica e decodifica sempre le tue risorse audio prima che l'esperienza XR inizi. Utilizza formati audio moderni e compressi come Opus o AAC invece di file WAV non compressi per ridurre i tempi di download e l'utilizzo della memoria. L'API fetch
combinata con audioContext.decodeAudioData
è l'approccio standard e moderno per questo.
Il Costo della Spazializzazione
Sebbene potente, la spazializzazione basata su HRTF è la parte più dispendiosa dal punto di vista computazionale del PannerNode
. Non è necessario spazializzare ogni singolo suono nella tua scena. Sviluppa una strategia audio:
- Usa
PannerNode
con HRTF per: Sorgenti sonore chiave la cui posizione è importante per il gameplay o l'immersione (es. personaggi, oggetti interattivi, segnali sonori importanti). - Usa stereo o mono semplici per: Suoni non diegetici come feedback dell'interfaccia utente, musica di sottofondo o tappeti sonori ambientali che non hanno un punto di origine specifico. Questi possono essere riprodotti tramite un semplice
GainNode
invece di unPannerNode
.
Ottimizzare gli Aggiornamenti nel Render Loop
Usa sempre setValueAtTime()
o altre modifiche di parametri pianificate (linearRampToValueAtTime
, ecc.) invece di impostare direttamente la proprietà .value
sui parametri audio come la posizione. L'impostazione diretta può causare clic o pop udibili, mentre le modifiche pianificate garantiscono transizioni fluide e precise al campione.
Per i suoni molto lontani, potresti considerare di limitare la frequenza di aggiornamento della loro posizione. Un suono a 100 metri di distanza probabilmente non ha bisogno che la sua posizione venga aggiornata 90 volte al secondo. Potresti aggiornarlo ogni 5 o 10 frame per risparmiare una piccola quantità di tempo CPU sul thread principale.
Garbage Collection e Gestione delle Risorse
L'AudioContext
e i suoi nodi non vengono raccolti automaticamente dal garbage collector del browser finché sono connessi e in esecuzione. Quando un suono finisce di essere riprodotto o un oggetto viene rimosso dalla scena, assicurati di fermare esplicitamente il nodo sorgente (source.stop()
) e di disconnetterlo (source.disconnect()
). Ciò libera le risorse affinché il browser possa recuperarle, prevenendo perdite di memoria in applicazioni a lunga esecuzione.
Il Futuro dell'Audio WebXR
Sebbene l'attuale Web Audio API fornisca una base solida, il mondo dell'audio in tempo reale è in continua evoluzione. Il futuro promette un realismo ancora maggiore e un'implementazione più semplice.
Effetti Ambientali in Tempo Reale: Riverbero e Occlusione
La prossima frontiera è simulare come il suono interagisce con l'ambiente. Ciò include:
- Riverbero: Simulare gli echi e le riflessioni del suono in uno spazio. Un suono in una grande cattedrale dovrebbe suonare diverso da uno in una piccola stanza con moquette. Il
ConvolverNode
può essere usato per applicare il riverbero usando risposte all'impulso, ma la modellazione ambientale dinamica e in tempo reale è un'area di ricerca attiva. - Occlusione e Ostruzione: Simulare come il suono viene attutito quando passa attraverso un oggetto solido (occlusione) o deviato quando lo aggira (ostruzione). Questo è un problema computazionale complesso che gli organi di standardizzazione e gli autori di librerie stanno cercando di risolvere in modo performante per il web.
L'Ecosistema in Crescita
La gestione manuale dei PannerNodes
e l'aggiornamento delle posizioni possono essere complessi. Fortunatamente, l'ecosistema degli strumenti WebXR sta maturando. I principali framework 3D come THREE.js (con il suo helper PositionalAudio
), Babylon.js e framework dichiarativi come A-Frame forniscono astrazioni di livello superiore che gestiscono gran parte della Web Audio API e della matematica vettoriale sottostante per te. Sfruttare questi strumenti può accelerare significativamente lo sviluppo e ridurre il codice ripetitivo.
Conclusione: Creare Mondi Credibili con il Suono
L'audio spaziale non è una funzionalità di lusso in WebXR; è un pilastro fondamentale dell'immersione. Comprendendo e sfruttando la potenza della Web Audio API, puoi trasformare una scena 3D silenziosa e sterile in un mondo vivo e pulsante che cattura e convince l'utente a un livello subconscio.
Abbiamo viaggiato dai concetti di base del suono 3D ai calcoli specifici e alle chiamate API necessarie per dargli vita. Abbiamo visto come il PannerNode
agisce come nostra sorgente sonora virtuale, come l'AudioListener
rappresenta le orecchie dell'utente e come la WebXR Device API fornisce i dati di tracciamento critici per collegarli insieme. Padroneggiando questi strumenti e applicando le migliori pratiche per prestazioni e design, sei attrezzato per costruire la prossima generazione di esperienze web immersive, esperienze che non vengono solo viste, ma veramente ascoltate.