10.07.2015 Views

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M A C I Ó N D E V I D E O J U E G O S C O N S D LSonidosTe estarás preguntando que es eso <strong>de</strong> un chunk. Básicamente un chunk es un sonidoo efecto sonoro. <strong>SDL</strong>_mixer hace una abstracción y almacena cada efecto en un chunk.No vamos a entrar en <strong>de</strong>talles innecesarios, baste <strong>de</strong>cir que la estructura <strong>de</strong> datos paraalmecenar estos chunks se llama Mix_Chunk. Una vez cargado un sonido en un chunk,la reproducción <strong>de</strong>l sonido se llevará a cabo mediante un canal <strong>de</strong> audio, el cual,podremos especificar manualmente o <strong>de</strong>jar que <strong>SDL</strong>_mixer lo seleccioneautomáticamente. Cada canal pue<strong>de</strong> reproducir simultáneamente un sólo sonido.Afortunadamente se soporta la reproducción <strong>de</strong> múltiples canales simultáneos, o lo quees lo mismo, <strong>de</strong> múltiples sonidos simultáneos.Sin más preámbulos veamos esta bonita función:Mix_Chunk *Mix_LoadWAV(char *file)Sólo hay que indicarle a la función el archivo que queremos cargar. Si hubo algúnerror, la función <strong>de</strong>volverá NULL y en caso <strong>con</strong>trario tendremos un puntero a un tipoMix_Chunk.Cuando ya no necesitemos el sonido, es buena práctica liberar los recursos que utiliza.Lo hacemos <strong>con</strong>:void Mix_FreeChunk(Mix_Chunk *chunk)Basta <strong>con</strong> pasar como parámetro el chunk a liberar.Respecto a los chunks, nos falta por ver una función.int Mix_VolumeChunk(Mix_Chunk *chunk, int volume)Efectivamente, esta función establece el volumen <strong>de</strong> reproducción <strong>de</strong>l sonido. El volumenestá <strong>de</strong>ntro <strong>de</strong>l rango <strong>de</strong> 0 a 128.Ahora que tenemos el sonido cargado en un chunk, po<strong>de</strong>mos reproducirlo mediante uncanal <strong>de</strong> audio. La función encargada <strong>de</strong> tal menester es:int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops)Esta función reproduce el sonido apuntado por el puntero chunk en el canal señaladopor el parámetro channel. El parámetro loops indica cuántas veces ha <strong>de</strong> repetirse elsonido. Si sólo queremos reproducirlo una vez, pasamos 0 como valor. Con –1 sereproducirá in<strong>de</strong>finidamente. Si queremos que <strong>SDL</strong>_mixer selecciones el canal <strong>de</strong> formaautomática (es lo mejor, a no ser que quieras utilizar grupos <strong>de</strong> canales) hay que pasar –1 como valor para el canal. Es <strong>con</strong>veniente informar a <strong>SDL</strong>_mixer <strong>de</strong> cuántos canalesqueremos utilizar. Lo hacemos <strong>con</strong>:int Mix_AllocateChannels(int numchannels)Lo normal es que le pasemos tantos canales como sonidos simultáneos queramospo<strong>de</strong>r reproducir. Te a<strong>con</strong>sejo que no te que<strong>de</strong>s corto. Por otro lado, mientras máscanales, más recursos requeríra el audio.A<strong>de</strong>más <strong>de</strong> Mix_PlayChannel, disponemos <strong>de</strong> tres funciones más para reproducirsonidos.int Mix_PlayChannelTimed(int channel, Mix_Chunk *chunk, int loops, intticks)70

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!