25 Rutinas de flujo de sonido

Las rutinas de flujo de sonido son para reproducir sonidos digitales que son demasiado grandes para caber en la estructura SAMPLE, bien porque son ficheros enormes que quiere cargar en trozos según necesita los datos, o porque está haciendo algo inteligente como generar la onde del sonido en tiempo real.


AUDIOSTREAM *play_audio_stream(int len, bits, stereo, freq, vol, pan);
Esta función crea un nuevo flujo de audio y empieza a reproducirlo. El parámetro len es el tamaño de cada búffer de transferencia (en samples), que normalmente debería ser una potencia de 2 y cercana a 1k: búffers más grandes son más eficientes y requieren menos actualizaciones, pero hay un desfase mayor entre los datos que usted porporciona y los que se están reproduciendo actualmente. El parametro bits debe ser 8 o 16, freq es la frecuencia de muestreo de los datos, y los valores vol y pan usan el el mismo rango 0-255, como las funciones normales de reproducción de samples. Si quiere ajustar la frecuencia, el volumen o la panoramización del flujo una vez se esté reproduciendo, puede usar las funciones normales voice_*() con stream->;voice como un parámetro. Los datos del sample estan siempre en formato sin signo, con formas de onda en estéreo que consisten en samples alternativos izquierda/derecha.

Relacionado con: install_sound, get_audio_stream_buffer, stop_audio_stream.
void stop_audio_stream(AUDIOSTREAM *stream);
Destruye un flujo de audio cuando no lo necesite más.
Relacionado con: play_audio_stream.
void *get_audio_stream_buffer(AUDIOSTREAM *stream);
Debe llamar este función a intervalos regulares mientras el flujo de audio está siendo reproducido, para proveer el siguiente buffer de datos del sample (cuanto más pequeño sea el tamaño del buffer del flujo, más frecuentemente debe llamar esta función). Si devuelve NULL, el flujo todavía está reproduciendo los datos y no debe hacer nada. Si devuelve un valor, esa es la localización del próximo buffer a tocar, y debería cargar el número apropiado de samples (tantos como especificó al crear el flujo) a esa dirección, por ejemplo usando un fread() de un fichero. Después de llenar el buffer con datos, llame free_audio_stream_buffer() para indicar que los datos nuevos ahora son válidos. Fíjese que esta función no debería ser llamada desde una función de temporizador.
Relacionado con: play_audio_stream, free_audio_stream_buffer.
void free_audio_stream_buffer(AUDIOSTREAM *stream);
Llame esta función después de que get_audio_stream_buffer() devuelva una dirección que no sea NULL, para indicar que ya ha cargado un nuevo bloque de samples en esa dirección y que los datos están listos para ser reproducidos.
Relacionado con: get_audio_stream_buffer.

Volver al Indice