1 // --------------------------------------------------------
3 // --------------------------------------------------------
4 // Copyright (c) Kronoman
5 // En memoria de mi querido padre
6 // --------------------------------------------------------
7 // Modulo de sonido y musica
8 // --------------------------------------------------------
14 #include <aldumb.h> /* DUMB: libreria de sonido */
20 /* player para la musica */
21 static AL_DUH_PLAYER
*musica_dp
= NULL
;
25 Esta peque~a rutina toca un sonido
27 El paneo stereo es calculado de acuerdo a la posicion del objeto
29 x = posicion x del objeto que emite el sonido (para hacer el panning correcto)
30 spl = puntero al sample a tocar
32 freq = frecuencia (velocidad, 1000 = 1, 2000 = 2, etc)
35 void tocar_sonido_paneado(int x
, SAMPLE
*spl
, int vol
, int freq
)
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
)
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
)
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,
92 if (musica_dp
== NULL
) return -1;
97 /* Rutina para parar DEFINITIVAMENTE de tocar la musica */
100 if (musica_dp
== NULL
) return;
102 al_stop_duh(musica_dp
);
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
114 void reajustar_volumen_musica()
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 */
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
);