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.