PDA

Ver la versión completa : Tutorial SDL: Sonido by Eskema



Eskema
08/09/2005, 23:09
Buenas, aqui estoy con otro pequeño tutorial sobre la SDL, esta vez vamos a ver como poner sonidos o musica en el juego.
Ale que lo disfruteis con salud XD


#include <sdl.h>
#include <stdio.h>
#include <sdl_mixer.h>

int main (int argc, char *argv[]) {

SDL_Surface *pantalla; //declaramos primero la pantalla base

Mix_Chunk *sonido; //declaramos un sonido para usar
Mix_Music *musica; //declaramos la musica de fondo

int terminar = 0; //salimos de la aplicacion/juego

atexit(SDL_Quit);



if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { //iniciamos la sdl y el audio
exit (-1);
}

pantalla= SDL_SetVideoMode (320,240,16, SDL_HWSURFACE | SDL_DOUBLEBUF);
if(!pantalla)
{

SDL_Quit();
exit(-1);
}

if (Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 4096) < 0)
// iniciamos el audio a la frecuencia 22hz, 16 bits, 2 canales y un buffer de 4096 (segun el //sonido poner mas o menos cantidad de buffer)
{

exit(-1);
}

atexit(Mix_CloseAudio); //supongo que os imaginais para que sirve esto

// cargamos los sonidos

musica = Mix_LoadMUS("sonidos/war.WAV"); //no creo q necesite explicacion
sonido = Mix_LoadWAV("sonidos/pistola.wav");




Mix_PlayMusic(musica, -1) //hacemos sonar la musica, 0 normal -1 infinito
Mix_PlayChannel(-1,sonido,0); //-1 canal donde suena, sonido (pues.... XD) 0 normal -1infinito


while(!terminar) { //mientras no terminamos el programa seguimos dandole cera XD

SDL_PollEvent(NULL);

teclas = SDL_GetKeyState(NULL);

if(teclas[SDLK_ESCAPE]) //si pulsamos escape nos escapamos XD
terminar = 1;
}

Mix_HaltMusic(); //paramos la musica
Mix_FreeChunk (sonido); //liberamos sonido
Mix_FreeMusic(musica); //liberamos la musica

SDL_Quit();
}

anibarro
09/09/2005, 00:08
que bien vienen como plantilla jeje gracias por el curro ;)

the_goulin
09/09/2005, 08:47
Oyo,

eskema tu con que compilas? lo digo para probar tus ejemplos ^_^ q yo con el VC++ no hay manera


Saludillos,
David

Eskema
09/09/2005, 09:15
Yo uso el dev-cpp para win y para la gp pues grrrrrrrr la muy jodia se resiste usando el devkitarm

NeoTeNu
09/09/2005, 10:24
Bastante interesante tio, llevaba tiempo dandole vueltas a este asunto, pero por vagancia ni m pare a mirar como hacer pa la musica y sonidos y demas. Total pa algo ta el winamp y el ordenata no?? :P

Weno a to esto tngo una question, bastante absurda,y si hace alguien el favor claro


musica = Mix_LoadMUS("sonidos/war.WAV");
sonido = Mix_LoadWAV("sonidos/pistola.wav");


Pq cada wav lo cargas con una funcion diferente?? ya se q es una pregunta mu tonta, pero en serio, fijo q d wena mañana tngo la cabeza totalmente obtusa :sobando:

Eskema
09/09/2005, 12:00
Creo q la funcion es bastante clara pero la explico,

musica = Mix_LoadMUS("sonidos/war.WAV");
loadmus sirve para cargar musica q vamos a usar, usea la musica de fondo o banda sonora y solo se carga con loadmus, se pueden cargar los .mod.it y varios formatos mas


sonido = Mix_LoadWAV("sonidos/pistola.wav");
y loadwav sirve solo para sonidos de efectos podriamos decir, por ejemplo la pistola, una explosion,etc,etc.

Saludos,

Eskema
11/09/2005, 12:01
Vaya por dios, resulta q estoy intentando poner los sonidos en el juego, pero para variar el sonido no se escucha, solo se oye un zumbido al iniciar el sonido. ¿Alguien mas con el mismo problema?

anibarro
11/09/2005, 13:15
Eskema a lo mejor los wav que estas usando no estan en el formato que indicas en Mix_OpenAudio, la verdad es q no se que puede pasar :S

anibarro
11/09/2005, 16:43
Eskema yo tengo un ejemplo con un archivito wav a 11025 hz, 8 bits y mono, que te adjunto, y va muy bien.
Solo hay q cambiar la funcion q tienes por:
Mix_OpenAudio(11025, AUDIO_S8, 1, 2048)

y luego ya que el sonido suene cuando hagas algo, por ejemplo al presionar SELECT en la GP:
if(key[SDLK_SPACE]){

Mix_PlayChannel(-1,sonido,0);
}
Ya me diras si ahora oyes algo ;)

A600
24/09/2005, 12:12
@anibarro, ¿puedes subir el código fuente de tu ejemplo con el wav y el makefile incluido? He probado de 1000 maneras y no conseguido hacer que suene un puñetero wav :(

Muchas gracias

anibarro
24/09/2005, 19:58
A600 ahi te va, aunque el codigo es corto, yo me las ingenio para que este todo bien desordenado y cueste entenderlo xD Si no encuentras las lineas que necesitas me lo dices y hago un limpieza para dejar solo lo q interesa ^^ Cuando le das a espacio suena el wav

A600
24/09/2005, 20:36
Muchas gracias. Compilado y funcionando. :brindis: