[ebook]Programacion de videojuegos con SDL
[ebook]Programacion de videojuegos con SDL
[ebook]Programacion de videojuegos con SDL
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