22 Rutinas de samples digitales



SAMPLE *load_sample(char *filename);
Carga un sample de un fichero, devolviendo un puntero a �l, o NULL si hay error. Actualmente, esta funci�n soporta ficheros WAV mono o est�reo y ficheros VOC mono, tanto de 8 como 16 bits.

SAMPLE *load_wav(char *filename);
Carga un sample de un fichero RIFF WAV.

SAMPLE *load_voc(char *filename);
Carga un sample de un fichero VOC de Creative Labs.

SAMPLE *create_sample(int bits, int stereo, int freq, int len);
Construye una nueva estructura de samples del tipo especificado. El campo data apunta a un bloque de datos de onda: lee la definici�n de la estructura en allegro.h para m�s detalles.

void destroy_sample(SAMPLE *spl);
Destruye una estructura de sample cuando no la necesita. Es seguro llamar esto incluso cuando el sample est� siendo reproducido, porque lo comprueba y apaga si est� activo.

int play_sample(SAMPLE *spl, int vol, int pan, int freq, int loop);
Reproduce un sample con el volumen, panoramizaci�n y frecuencia especificados. El volumen y panoramizaci�n van de 0 (min/izquierda) a 255 (m�x/derecha). La frecuencia no es absoluta, es relativa: 1000 representa la frecuencia a la que el sample fue grabado, 2000 es el doble, etc. Si el biestable de repetici�n est� activado, el sample ser� repetido hasta que llame stop_sample(), y puede ser manipulado mientras es reproducido llamando adjust_sample().

void adjust_sample(SAMPLE *spl, int vol, int pan, int freq, int loop);
Altera los par�metros de un sample mientras es reproducido (�til para manipular sonidos con repetici�n). Puede alterar el volumen, la panoramizaci�n y frecuencia, y tambi�n puede eliminar el biestable de repetici�n, lo que parar� el sample cuando llegue al final del loop. Si hay varias copias del mismo sample activas, esto ajustar� el primero que vaya a ser reproducido. Si el sample no est� siendo reproducido, esto no tiene efecto.

void stop_sample(SAMPLE *spl);
Mata un sample, algo necesario si tiene uno en modo repetici�n. Si hay varias copias del sample, todas ser�n paradas.


Si necesita controlar los samples con m�s detalle, puede usar las funciones de voz de bajo nivel en vez de llamar play_sample(). Esto conlleva m�s trabajo, porque debe reservar y liberar las voces expl�citamente, ya que �stas no se liberan solas al acabar la reproducci�n, pero esto le permite especificar precisamente lo que quiere hacer con el sonido. Incluso puede modificar algunos campos de la estructura sample:

   int priority;
      De 0 a 255 (por defecto 255), esto indica c�mo las voces se reservan
      si intenta reproducir m�s de las que controla el controlador. Esto
      puede ser usado para asegurarse de que los sonidos secundarios son
      recortados mientras que los importantes son reproducidos.

unsigned long loop_start; unsigned long loop_end; Posiciones de repetici�n en unidades de sample, por defecto ajustadas al comienzo y final del sample.

int allocate_voice(SAMPLE *spl);
Reserva una voz de la tarjeta y la prepara para reproducir el sample especificado, ajustando par�metros por defecto (volumen m�ximo, panoramizaci�n central, sin cambio de frecuencia, sin loop). Cuando acabe de usar la voz, debe liberarla llamando deallocate_voice() o release_voice(). Devuelve el n�mero de voz, o -1 si no hay voces libres.

void deallocate_voice(int voice);
Libera una voz de la tarjeta, parando su sonido y liberando los recursos que estuviese utilizando.

void reallocate_voice(int voice, SAMPLE *spl);
Ajusta una voz previamente reservada para usar un sample diferente. Llamar reallocate_voice(voice, sample) es equivalente a:

      deallocate_voice(voice);
      voice = allocate_voice(sample);

void release_voice(int voice);
Libera una voz, indicando que ya no est� interesado en su manipulaci�n. El sonido seguir� siendo reproducido, y los recursos que usa ser�n liberados autom�ticamente cuando acabe la reproducci�n. Esto es esencialmente lo mismo que deallocate_voice(), pero espera a que los sonidos acaben para hacer efecto.

void voice_start(int voice);
Activa una voz, usando los par�metros que le haya ajustado.

void voice_stop(int voice);
Para una voz, almacenando la posici�n actual y estado para que luego pueda continuar la reproducci�n llamando voice_start().

void voice_set_priority(int voice, int priority);
Ajusta la prioridad de una voz (rango 0-255). Esto es usado para decidir qu� voces ser�n recortadas si intenta usar m�s de las que puede soportar el controlador de la tarjeta de sonido.

SAMPLE *voice_check(int voice);
Comprueba si una voz est� activa, devolviendo el sample que est� siendo reproducido, o NULL si la voz est� inactiva.

int voice_get_position(int voice);
Devuelve la posici�n actual de la voz, en unidades de sample, o -1 si ha finalizado la reproducci�n.

void voice_set_position(int voice, int position);
Ajusta la posici�n de una voz, en unidades de sample.

void voice_set_playmode(int voice, int playmode);
Ajusta el estado de repetici�n de una voz. Esto puede hacerse mientras se reproduce la voz, por lo que puede reproducir un sample con repetici�n (teniendo el comienzo y final del loop ajustados correctamente), y entonces borre el biestable de repetici�n cuando quiera finalizar el sonido, lo que har� que �ste llegue al final del loop, contin�e con la siguiente parte del sample, y acabe de modo normal. El par�metro mode es un campo de bits que contiene los siguientes valores.

int voice_get_volume(int voice);
Devuelve el volumen de la voz, en el rango 0-255.

void voice_set_volume(int voice, int volume);
Ajusta el volumen de la voz, en el rango 0-255.

void voice_ramp_volume(int voice, int time, int endvol);
Comienza un cambio de volumen (crescendo o diminuendo) desde el volumen actual al volumen final, especificando time en milisegundos.

void voice_stop_volumeramp(int voice);
Interrumpe una operaci�n de cambio de volumen.

int voice_get_frequency(int voice);
Devuelve la frecuencia actual en Hz.

void voice_set_frequency(int voice, int frequency);
Ajusta la frecuencia de la voz en Hz.

void voice_sweep_frequency(int voice, int time, int endfreq);
Comienza un cambio de frecuencia (glissando) desde la frecuencia actual hasta la frecuencia final, especificando time en milisegundos.

void voice_stop_frequency_sweep(int voice);
Interrumpe una operaci�n de cambio de frecuencia.

int voice_get_pan(int voice);
Devuelve la panoramizaci�n actual, desde 0 (izquierda) hasta 255 (derecha).

void voice_set_pan(int voice, int pan);
Ajusta la panoramizaci�n, desde 0 (izquierda) hasta 255 (derecho).

void voice_sweep_pan(int voice, int time, int endpan);
Comienza una panoramizaci�n (movimiento izquierda <-> derecha) desde la posici�n actual hasta la posici�n endpan, especificando time en milisegundos.

void voice_stop_pan_sweep(int voice);
Interrumpe una panoramizaci�n.

void voice_set_echo(int voice, int strength, int delay);
Ajusta el par�metro de eco para una voz (no implementado actualmente).

void voice_set_tremolo(int voice, int rate, int depth);
Ajusta el par�metro de tr�molo para una voz (no implementado actualmente).

void voice_set_vibrato(int voice, int rate, int depth);
Ajusta el par�metro de vibrado para una voz (no implementado actualmente).




Volver al Indice