miércoles, 16 de mayo de 2012

Sonidos

Aquí tenemos un ejemplo, donde se muestra el funcionamiento del audio en Allegro.

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:

10 comentarios:

  1. gracias koday lo voy a estudiar :)

    ResponderEliminar
  2. amigo 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

    ResponderEliminar
  3. genial 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?

    ResponderEliminar
    Respuestas
    1. para poder ayudarte tendría que ver como lo hiciste.

      Eliminar
  4. mm bueno aqui dejo la parte del codigo

    // 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);


    }

    ResponderEliminar
    Respuestas
    1. mejor que entres en este foro ...
      http://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.

      Eliminar
  5. bien gracias aunque estube un tiempo buscando informacion sobre esto
    y 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

    ResponderEliminar
  6. muchas gracias, me sirvio de mucho :D

    ResponderEliminar
  7. Hola. Podrias decirme como pausar los samples? Es que quiero reproducir una música de fondo y al convertir a MIDI sale un desastre.

    ResponderEliminar
    Respuestas
    1. Hola, 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.
      http://es.tldp.org/Allegro-es/web/online/allegro.html

      Eliminar

Antes de publicar un comentario

Todos los comentarios que se realicen en el blog son moderados.

Debido a esto es muy probable que tu comentario no aparezca de inmediato ya que previamente debe ser revisado para evitar un mal uso (SPAM).

Podrán realizar comentario cualquiera que tenga una cuenta de Google.

Related Posts Plugin for WordPress, Blogger...