Imported contents: kraptor_final_apr_03_2004.tar.gz
[kraptor.git] / src / sonido.c
blobc5eb7468d0faef8597c169f6b339ef5382bb95e0
1 // --------------------------------------------------------
2 // sonido.c
3 // --------------------------------------------------------
4 // Copyright (c) Kronoman
5 // En memoria de mi querido padre
6 // --------------------------------------------------------
7 // Modulo de sonido y musica
8 // --------------------------------------------------------
9 #ifndef SONIDO_C
10 #define SONIDO_C
12 #include <allegro.h>
14 #include <aldumb.h> /* DUMB: libreria de sonido */
16 #include "sonido.h"
17 #include "global.h"
18 #include "kfbuffer.h"
20 /* player para la musica */
21 static AL_DUH_PLAYER *musica_dp = NULL;
25 Esta peque~a rutina toca un sonido
26 Pasarle el volumen
27 El paneo stereo es calculado de acuerdo a la posicion del objeto
28 parametros:
29 x = posicion x del objeto que emite el sonido (para hacer el panning correcto)
30 spl = puntero al sample a tocar
31 vol = volumen
32 freq = frecuencia (velocidad, 1000 = 1, 2000 = 2, etc)
35 void tocar_sonido_paneado(int x, SAMPLE *spl, int vol, int freq)
37 int pan = 0;
39 if (!(quiere_snd && driver_de_sonido)) return; /* no esta usando el sonido */
40 if (spl == NULL) return; /* evito errores */
42 pan = ( x * 255 ) / ANCHO_FB;
44 tocar_sonido(spl, vol, pan, freq);
49 Esta funcion toca un sonido, es equivalente a play_sample,
50 pero ajusta el volumen de manera relativa a la variable global
51 llamada 'volumen_sonido'.
52 NOTA: se deberia USAR SIEMPRE esta funcion para enviar un sonido
53 a la placa de sonido, de esa manera, se respetan los settings del usuario
55 void tocar_sonido(SAMPLE *spl, int vol, int pan, int freq)
57 int vol2 = 255;
59 if (!(quiere_snd && driver_de_sonido)) return; /* no esta usando el sonido */
60 if (spl == NULL) return; /* evito errores */
62 vol2 = (vol * volumen_sonido) / 255;
63 if (vol2 > 0) play_sample(spl, vol2, pan, freq, 0);
68 /* Rutina para comenzar a tocar un archivo de DUMB
69 pasarle el puntero al archivo
70 devuelve 0 si todo OK, -1 si falla
72 int musica_play(DUH *duh)
74 float vol = 1.0;
76 if (duh == NULL) return -1;
78 if (musica_dp != NULL) musica_stop();
80 if (!quiere_musica) return 0;
82 vol = (float)volumen_musica / 255.0;
84 /* ajusta el stereo y los khz de acuerdo al nivel de detalle */
85 musica_dp = al_start_duh(duh,
86 (nivel_detalle > 5) ? 2 : 1,
88 vol,
89 2048,
90 11025);
92 if (musica_dp == NULL) return -1;
94 return 0;
97 /* Rutina para parar DEFINITIVAMENTE de tocar la musica */
98 void musica_stop()
100 if (musica_dp == NULL) return;
102 al_stop_duh(musica_dp);
103 musica_dp = NULL;
106 /* Llamar a esta funcion MUY seguido, para que la musica se escuche! */
107 void ejecutar_poll_musica()
109 if (musica_dp != NULL) al_poll_duh(musica_dp);
112 /* Llamar a esta funcion luego de cambiar el volumen
113 de la musica */
114 void reajustar_volumen_musica()
116 float vol = 1.0;
118 if (musica_dp == NULL) return;
120 vol = (float)volumen_musica / 255.0;
122 al_duh_set_volume(musica_dp, vol);
125 /* Esta funcion pausa la musica */
126 void pausar_musica()
128 if (!quiere_musica)
130 musica_stop();
131 return;
134 if (musica_dp == NULL) return;
136 al_pause_duh(musica_dp);
139 /* Esta funcion continua la musica */
140 void continuar_musica()
142 if (!quiere_musica) return;
144 if (musica_dp == NULL) return;
146 al_resume_duh(musica_dp);
149 #endif