25 Rutinas de grabación de sonido



int install_sound_input(int digi_card, int midi_card);
Inicializa el módulo de grabación de sonido, devolviendo cero si no hubo problemas. Debe instalar el sistema normal de reproducción de sonido antes de llamar esta rutina. Los dos parámetros de tarjetas deben ser los mismos que en install_sound(), incluyendo DIGI_NONE y MIDI_NONE para desactivar partes del módulo, o DIGI_AUTODETECT y MIDI_AUTODETECT para adivinar el hardware.

void remove_sound_input();
Desactiva el módulo cuando haya acabado de usarlo. Normalmente no debe llamar esta función, porque remove_sound() y/o allegro_exit() lo harán por usted.

int get_sound_input_cap_bits();
Comprueba qué formatos de sonido son soportados por el controlador de entrada de audio, devolviendo uno de los valores del campo de bits:

0 = entrada de audio no soportada
8 = entrada de audio de ocho bits soportada
16 = entrada de audio de dieciséis bits soportada
24 = entrada de audio de ocho y dieciséis bits soportada

int get_sound_input_cap_stereo();
Comprueba si el controlador de entrada de audio actual es capaz de grabar en estéreo.

int get_sound_input_cap_rate(int bits, int stereo);
Devuelve la frecuencia de grabación de samples máxima posible en el formato especificado, o cero si los ajustes no son soportados.

int get_sound_input_cap_parm(int rate, int bits, int stereo);
Comprueba si la frecuencia de grabación especificada, número de bits y mono/estéreo es soportado por el controlador de audio actual, devolviendo uno de los siguientes valores:

0 = es imposible grabar en este formato
1 = grabar es posible, pero la salida de audio será suspendida
2 = es posible grabar y reproducir sonidos a la vez
-n = razón de muestreo no soportada, pero la razón 'n' puede funcionar

int set_sound_input_source(int source);
Selecciona la fuente de la entrada de audio, devolviendo cero si no hubo problemas o -1 si el hardware no proporciona un registro de selección de entrada. El parámetro debe ser uno de los valores:

SOUND_INPUT_MIC
SOUND_INPUT_LINE
SOUND_INPUT_CD

int start_sound_input(int rate, int bits, int stereo);
Comienza a grabar en el formato especificado, suspendiendo la reproducción de sonidos si es necesario (esto sucederá siempre con los controladores actuales). Devuelve el tamaño del buffer en bytes si hubo éxito, o cero si hubo algún error.

void stop_sound_input();
Para la grabación, ajustando la tarjeta de vuelta al modo normal de reproducción.

int read_sound_input(void *buffer);
Recupera el buffer de audio grabado más reciente en el lugar especificado, devolviendo no-cero si el buffer ha sido copiado, o cero si todavía no hay nuevos datos disponibles. El tamaño del buffer puede ser obtenido comprobando el valor de retorno de start_sound_input(). Debe llamar esta función a intervalos regulares durante la grabación (típicamente unas 100 veces por segundo), o podría perder datos. Si no puede hacer esto lo suficientemente rápido, use la función callback digi_recorder() para almacenar la onda de sonido en un buffer más grande que haya creado antes. Nota: muchas tarjetas de sonido reproducen un click o sonido raro cuando alternan entre los modos de grabación y reproducción, por lo que es buena idea descartar el primer buffer después de comenzar la grabación. La onda siempre se almacena en formato sin signo, con los datos estéreo siendo samples alternados izquierda/derecha.

extern void (*digi_recorder)();
Si está activada, esta función es llamada por el controlador de entrada de sonido siempre que un nuevo buffer de sonido está disponible, momento en el que puede usar read_sound_input() para copiar los datos a un lugar permanente. Esta rutina se ejecuta en contexto de interrupción, por lo que debe ejecutarse muy rápidamente, el código y la memoria que modifica debe estar fijada (locked), y no puede llamar desde ella rutinas de sistema o acceder a ficheros del disco.

extern void (*midi_recorder)(unsigned char data);
Si está activada, esta función es llamada por el controlador de entrada MIDI siempre que un nuevo byte de datos MIDI esté disponible. Se ejecuta en contexto de interrupción, por lo que debe ser muy rápida y su código/datos deben estar fijados.




Volver al Indice