\\ Home : Articoli : Stampa
DirectSound - Effetti Audio
Di RobyDx (del 28/10/2007 @ 14:17:17, in DirectX9, linkato 2901 volte)

Durante lo sviluppo di giochi potrebbe capitare di voler inserire effetti audio particolari come ad esempio un eco, una distorsione etc. Ad esempio se un personaggio si dovesse trovare in una grotta non sarebbe male che producesse suoni con eco. Le possibilità di ottenere questo sono due: utilizzare suoni differenti a secondo degli ambienti (quindi moltissimi wav) o modificarli direttamente con DirectX.
Ovviamente faremo quest'ultima. DirectSound offre numerosi effetti

ChorusEffect
CompressorEffect
DistortionEffect
EchoEffect
FlangerEffect
GargleEffect
Interactive3DLevel2ReverbEffect
ParamEqEffect
WavesReverbEffect

Ben 9 effetti totalmente personalizzabili. Quello che dovete fare è semplicemente caricare un wave e prima di eseguirlo inserire uno o più effetti: ebbene sì è possibile inserire più effetti contemporaneamente e gestirli come meglio si vuole.
Esistono 2 modi per caricare gli effetti: effetti standard e personalizzabili.
In entrambi dovete dichirare un array di effetti

Dim fx As EffectDescription()
ReDim fx(0)

dovete ridimensionarlo a secondo del numero di effetti che volete usare.
ora nell'indice che volete usare inserite l'effetto (ad esempio il chorus)

fx(0).GuidEffectClass = DSoundHelper.StandardChorusGuid

infine

suono.SetEffects(fx)

con quest'ultima inserite l'effetto nel suono. Con questo metodo imposterete l'effetto nel suono che avete caricato. All'esecuzione il suono avrà un effetto diverso (il chorus appunto).
Il tipo di effetto dipende dalla guida

DSoundHelper.StandardChorusGuid

Gli altri 8 sono quelli presenti nella lista, tutti inclusi nella classe DSoundHelper.
Dopo che avete inserito un effetto standard potete personalizzarlo tramite alcune classi specifiche. Se ad esempio avete inserito l'effetto Echo nell'indice zero dell'array

Dim echoFx As EchoEffect
Dim echoParams As EffectsEcho
echoFx = suono.GetEffects(0)
echoParams = echoFx.AllParameters
echoParams.Feedback = numero
echoFx.AllParameters = echoParams

In questo esempio ho definito due strutture: la classe EchoEffect in cui viene caricato il puntatore all'effetto sonoro. Nella struttura echoParams inserite i valori da modificare (nel mio esempio ho modificato il valore di feedback). Infine inseriamo i parametri nell'echoEffect. Nel momento in cui questo accade il suono viene modificato ed inizierà ad essere riprodotto con le caratteristiche specificate. Ricordo però che dovete aver inserito l'effetto standard nel soundbuffer o verrà generato un errore!!! La procedura per l'effetto con parametri può invece essere modificata in ogni momento.

I parametri variano a secondo dell'effetto. Per usare gli altri effetti dovete usare altre classi

(nome effetto)Effect

Effect(nomeEffetto).

Dove nome effetto è l'effetto che desiderate.

Ognuno degli effetti ha delle proprietà diverse dagli altri che sia per il loro elevato numero, sia per la scarsa documentazione al momento disponibile che per la mia ignoranza di alcuni concetti non vi spiegherò.

Notate che alcuni effetti richiedono wave particolari (ad esempio in 8 bit o mono). Vi consiglio di fare prove e prove per capire ogni effetto. In attesa che esca una SDK completa potete approfondire sulla SDK per C++.

Vi lascio all'esempio che inserisce alcuni effetti standard (non quelli completamente personalizzabili).

Esempio VB.Net