24 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 curva del sonido en tiempo real.

AUDIOSTREAM *play_audio_stream(int len, bits, freq, vol, pan);
Esta funci�n crea un nuevo flujo de audio y comienza a reproducirlo. len es el tama�o de cada buffer de transferencia (en samples), que deber�a ser de al menos 2k: buffers m�s grandes son m�s eficientes y requieren menos actualizaciones, pero resultan en un desfase mayor entre los datos que suministras y los que realmente est�n siendo reproducidos. El par�metro bits debe ser 8 o 16, freq es la frecuencia de los datos, y vol y pan son los mismos valores 0-255 que en las funciones regulares de reproducci�n de samples. Su quiere modificar la frecuencia, el volumen, o la panoramizaci�n del flujo una vez est� siendo reproducido, puede usar las funciones normales voice_*() con stream->voice como par�metro. Los datos siempre est�n en formato sin signo, siendo las ondas est�reo una alternaci�n cont�nua de samples para los canales izquierda/derecha.

void stop_audio_stream(AUDIOSTREAM *stream);
Destruye un flujo de audio cuando no lo necesite m�s.

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.

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.




Volver al Indice