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