En el allegro debemos inicializar el audio antes de poder utilizarlo.
install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);
Como se muestra en la imagen, en el ejemplo cambiamos de música pulsando 1 o 2, reproducimos un sonido con los números 3 y 4. Con la tecla espacio se podrá pausar la música de fondo o reanudar. Y para finalizar la ejecución pulsamos la tecla ESC.
/******************************************** Audio Web: http://devcpp-allegro.blogspot.com/ Fecha: 16 Mayo 2012 ********************************************* Funcionamiento basico del audio en allegro *********************************************/ #include <allegro.h> #define ancho 320 #define alto 240 int main() { allegro_init(); install_keyboard(); int pausa; // incializa el audio en allegro if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) { allegro_message("Error: inicializando sistema de sonido\n%s\n", allegro_error); return 1; } // ajustamos el volumen set_volume(230, 200); // definimos el audio del programa MIDI *musica1 = load_midi("flourish.mid"); MIDI *musica2 = load_midi("seal.mid"); SAMPLE *sonido1 = load_wav("ding.wav"); SAMPLE *sonido2 = load_wav("notify.wav"); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, ancho, alto, 0, 0); BITMAP *buffer = create_bitmap(ancho, alto); pausa = 0; while ( !key[KEY_ESC] ) { clear_to_color(buffer, 0x333333); if ( key[KEY_SPACE] ) { if ( pausa == 0) { midi_pause(); pausa = 1; }else{ midi_resume(); pausa = 0; } } if ( key[KEY_1] ) { play_midi(musica1,1); } if ( key[KEY_2] ) { play_midi(musica2,1); } if ( key[KEY_3] ) { play_sample(sonido1,200,150,1000,0); } if ( key[KEY_4] ) { play_sample(sonido2,200,150,1000,0); } rectfill(buffer, 2, 2, ancho-4, alto-4, 0xDF1680); rectfill(buffer, 30, 30, ancho-30, alto-30, 0x000000); textout_centre_ex(buffer, font, "ESC para Salir", ancho/2, 10, 0xFFFFFF, 0xDF1680); textout_centre_ex(buffer, font, "1.- Inicia Musica 1", ancho/2, 70, 0xFFFFFF, 0x333333); textout_centre_ex(buffer, font, "2.- Inicia Musica 2", ancho/2, 90, 0xFFFFFF, 0x333333); textout_centre_ex(buffer, font, "3.- Reproduce Sonido 1", ancho/2, 110, 0xFFFFFF, 0x333333); textout_centre_ex(buffer, font, "4.- Reproduce Sonido 2", ancho/2, 130, 0xFFFFFF, 0x333333); textout_centre_ex(buffer, font, "Barra espaciadora detiene musica", ancho/2, 200, 0xFFFFFF, 0x333333); textout_centre_ex(buffer, font, "http://devcpp-allegro.blogspot.com/", ancho/2, alto-20, 0xFFFFFF, 0xDF1680); blit(buffer, screen, 0, 0, 0, 0, ancho, alto); } // liberamos memoria destroy_midi(musica1); destroy_midi(musica2); destroy_sample(sonido1); destroy_sample(sonido2); destroy_bitmap(buffer); return 0; } END_OF_MAIN();
En el ejemplo tenemos dos tipos de audio, la música de fondo en la cual se utiliza un archivo MIDI, y los sonidos que están en formato WAV.
MIDI *musica1 = load_midi("flourish.mid");
SAMPLE *sonido1 = load_wav("ding.wav");
Para reproducir los sonidos, hay los siguientes comandos:
play_midi(musica1, 1);
play_sample(sonido1, 200, 150, 1000, 0);
play_sample(const SAMPLE *spl, int vol, int pan, int freq, int loop);
El primer parámetro es el sonido a reproducir, el segundo el volumen que va de 0 a 255, el tercero pan es hacia que lado quieres que suene el sonido, el 0 es izquierda y 255 derecha y 127 sería el centro exacto. El siguiente parámetro es la frecuencia, por decirlo de alguna manera la velocidad de reproduccion, para reproducirlo a una velocidad normal se debe poner 1000, si lo queremos mas lento inferior a 1000 y si es superior a 1000 se acelera, y finalmente loop pues indica si queremos que se repita el sonido o no con el cero.
Cuando se esta reproduciendo la música de fondo, se puede pausar, con el comando midi_pause() , y para reanudar el audio pausado se utiliza el comando midi_resume().
Para finalizar con el uso del audio, debemos liberar la memoria con los siguientes comandos :
destroy_midi(musica1);
destroy_sample(sonido1);
Si desea mas información sobre el tema visita los siguientes enlaces:
gracias koday lo voy a estudiar :)
ResponderEliminaramigo muchas gracias sabes estoy haciendo un juego de pacman como proyecto para la universidad me preguntaba si me podrias ayudar a mejorar mi codigo o ayudarme de alguna forma te lo agradeceria mucho
ResponderEliminargenial amigo gracias :D solo que yo intente colocar una cancion de 4 minutos pero en el minuto 3 se pega y cierra el programa existe forma de arreglar eso?
ResponderEliminarpara poder ayudarte tendría que ver como lo hiciste.
Eliminarmm bueno aqui dejo la parte del codigo
ResponderEliminar// incializa el audio en allegro
if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) {
allegro_message("Error: inicializando sistema de sonido\n%s\n", allegro_error);
return 1;
}
// ajustamos el volumen
set_volume(230, 200);
// definimos el audio del programa
SAMPLE *sonido1 = load_wav("Rin y Len(Sub espaol).wav");
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, ancho, alto, 0, 0);
fondo = load_bitmap("fd1.bmp",NULL);
fondo2 = load_bitmap("fd2.bmp",NULL);
BITMAP *buffer = create_bitmap(ancho, alto);
pausa = 0;
while ( !key[KEY_ESC] )
{
clear_to_color(buffer, 0x333333);
if ( key[KEY_3] )
{ play_sample(sonido1,200,150,1000,0);
blit(fondo2, screen, 0, 0, 0, 0, 640, 460);
rest(100);
blit(fondo, screen, 0, 0, 0, 0, 640, 460);
rest(240000);
}
mejor que entres en este foro ...
Eliminarhttp://creatusjuegosdecero.webege.com/
y alli pon tu duda, añadiendo el codigo completo, ya que con lo que me has puesto aqui el comando lo utilizas bien, pero el programa no lo veo del todo correcto, hay muchas cosas que no tienen sentido.
bien gracias aunque estube un tiempo buscando informacion sobre esto
ResponderEliminary encontre en una pagina que estaba en ingles y decia que era posible que ese tiempo fuera el limite para los archivos .wav :S
bueno igualmente gracias amigo
muchas gracias, me sirvio de mucho :D
ResponderEliminarHola. Podrias decirme como pausar los samples? Es que quiero reproducir una música de fondo y al convertir a MIDI sale un desastre.
ResponderEliminarHola, con respecto a los samples en la version 4 del Allegro solo se puede reproducir y parar un sample. Con respecto a los MIDI si es posible pausar y reanudar. Para mas información puedes consultar el manual de Allegro.
Eliminarhttp://es.tldp.org/Allegro-es/web/online/allegro.html