• Non ci sono risultati.

3. Strumenti di sviluppo software per l’audio 3D

3.2 DirectSound

3.2.3 Sound buffer

Il Sound Buffer è una zona di memoria destinata a contenere i dati che rappresentano il suono da eseguire, codificato in una serie di campioni. Ogni campione è un valore numerico che indica l’ampiezza dell’onda sonora in uno specifico momento. Altri attributi del buffer sonoro includono il numero di canali, il sample rate, e il numero di bit per campione.

Il numero di canali di un buffer sonoro indica quanti canali sono usati per quel suono (1 per suono mono, 2 per suono stereo, meno frequentemente sono possibili più di 2 canali).

Il sample rate di un buffer sonoro indica il numero di campioni per secondo che sono stati memorizzati quando il suono è stato campionato, cioè il numero di volte per secondo in cui è stata campionata l’ampiezza dell’onda. Tipicamente il valore del sample rate è di 11.025, 22.050 o 44.100 Hz.

Il numero di bit per campione di un buffer sonoro indica il numero di bit che vengono usati per memorizzare ogni campione, tipicamente pari a 8 o 16 bit. Il suono ad 8 bit soffre di problemi di qualità, perché l’ampiezza può assumere solo 256 valori. Il suono a 16 bit invece ha una qualità molto elevata ma richiede il doppio dello spazio.

I campioni del buffer sonoro sono memorizzati in un formato non compresso conosciuto come Pulse Code Modulation (PCM). Per un suono PCM mono, i campioni sono memorizzati in ordine, dal primo all’ultimo. Per quelli stereo o con più canali, i dati sonori sono intervallati (ad esempio viene memorizzato prima il primo campione del canale uno, poi il primo del canale 2, poi il secondo campione del canale 1, e il secondo campione del canale 2 e via dicendo).

Un buffer sonoro può essere memorizzato nella memoria di sistema o nell’hardware sonoro, se questo dispone di una memoria dedicata. Generalmente le schede audio odierne dispongono di almeno 8 MB di memoria dedicata. Il vantaggio di memorizzare i dati direttamente sulla scheda sonora è dato dal fatto che la gestione dell’audio è velocizzata, dato che la scheda hardware può lavorare direttamente sui dati senza doverne fare richiesta alla CPU.

DirectSound ha tre distinti tipi di buffer sonoro: primary sound buffer, secondary sound buffer, e sound-capture buffer. Il primary sound buffer è unico e contiene i dati correntemente in esecuzione. I secondary sound buffer servono per

memorizzare i vari clip sonori, che potranno successivamente essere mixati e quindi riprodotti nel primary sound buffer. Il sound-capture buffer è utilizzato per memorizzare un suono che viene catturato da un dispositivo di input audio, come ad esempio un microfono.

3.2.3.1 I Primary Sound Buffer (Ascoltatore o Listener)

DirectSound utilizza sempre un solo buffer primario, che rappresenta il suono “globale” che arriva all'ascoltatore, e più buffer secondari, ognuno dei quali rappresenta una sorgente sonora.

Normalmente il buffer primario, dato che costituisce una rappresentazione di ciò che viene percepito dell'ascoltatore, non viene mai alimentato direttamente con i dati della forma d'onda, perchè ciò che arriva all'ascoltatore è un mix di tutte le sorgenti sonore presenti nell'ambiente, a valle di tutte le possibili modifiche posizionali e ambientali. DirectSound effettua questo mix agendo sui parametri della sorgente sonora, ad esempio alzandone/abbassandone il volume (per evidenziare se una sorgente è più vicina di un'altra) o aggiungendo un effetto doppler [paragrafo 2.7.3.4] se questa è in movimento. Inoltre, visto che rappresenta l'ascoltatore in un ambiente 3D, disporrà anche dei parametri sullo stato dell'ascoltatore, come la sua posizione, la velocità, se in movimento, e il suo orientamento. Un'applicazione, quindi, raramente scrive direttamente sul buffer primario, che è sempre sotto il controllo di DirectSound; se lo dovesse fare, dovrà prendersi il compito di gestire anche tutto il mixaggio e interagire con la scheda audio per mandare il risultato all'esterno.

3.2.3.2 Secondary Sound Buffer (Sorgente Sonora o Sound Source)

Diversamente dal buffer primario possono esistere più buffer secondari, ognuno dei quali rappresenta una sorgente sonora. Ogni buffer secondario, oltre a mantenere una tabella dei dati della forma d'onda da eseguire, deve contenere anche delle proprietà che lo identifichino in un ambiente 3D, come ad esempio posizione, velocità, se in movimento, orientamento, una minima e massima distanza ed un cono fonico.

DirectSound usa la posizione della sorgente sonora 3D rispetto al Listener per calcolare l’intensità di volume del suono emesso. Il calcolo però non è del tutto accurato, perché DirectSound non tiene conto della geometria dell’ambiente. La riflessione delle onde sonore sugli oggetti presenti nell’ambiente, per esempio,

aggiungerebbe distanza al suono e introdurrebbe eco e distorsione. L’effetto della distanza è simulato da DirectSound attraverso la gestione di un rolloff factor, che determina automaticamente il grado di attenuazione da applicare al suono. Alcuni hardware sonori, come la scheda Soundblaster Live!, supportano anche effetti ambientali come il riverbero. Anche se DirectSound non supporta tali effetti, esso permette comunque di interfacciarsi direttamente con l’hardware sonoro, così da poter utilizzare come estensioni le eventuali funzionalità aggiuntive offerte dalle schede.

DirectSound usa la velocità della sorgente sonora 3D per calcolare l’effetto doppler secondo parametri realistici che possono però essere alterati dall’utente mediante la modifica del parametro doppler effect factor.

La minima e la massima distanza per una sorgente sonora 3D indicano i limiti rispettivamente per il massimo e il minimo volume del suono di quella sorgente. La minima distanza è il più piccolo valore di spazio che DirectSound ammette tra l’ascoltatore e la sorgente sonora. Se la sorgente sonora è più vicina all’ascoltatore di tale distanza, DirectSound, al fine di calcolare l’intensità del suono, considererà la sorgente come posta alla minima distanza e non a quella reale. Questa funzionalità pone così un limite superiore all’intensità di volume applicata al suono prodotto.

Quando invece la distanza tra l’ascoltatore e la sorgente sonora è più grande della massima distanza, DirectSound considererà la sorgente posta alla massima distanza in modo che l’intensità del suono non diminuisca ulteriormente al crescere della distanza.

Una sorgente sonora 3D può emettere un suono uniformemente in tutte le direzioni, o solo in un determinato intervallo continuo di direzioni. L’orientamento della sorgente sonora 3D è specificato da 2 coni fonici. Un ascoltatore che si trovi dentro il cono fonico interno ascolta il suono al suo massimo volume, un ascoltatore che si trova al di fuori del cono fonico esterno sente il suono al volume minimo, mentre se si trova tra i due coni lo sente sempre più basso man mano che si avvicina all’esterno. (fig. 3.1 )

Fig. 3.1 : Cono fonico

Documenti correlati