audio — Módulo de audio

El módulo audio se utiliza para grabar muestras de audio desde un micrófono. Las muestras PDM capturadas desde el micrófono se filtran y se diezman a muestras PCM, que pueden pasarse a una función de retorno (callback) del usuario o leerse directamente en un búfer.

Funciones

audio.init(channels: int = 1, frequency: int = 16000, gain_db: int = 24, highpass: float | bool = 0.9883, samples: int = -1, buffers: int = 16, overflow: bool = True, clkdiv: int = 0) None

Inicializa el módulo de audio. Debe llamarse primero, antes de usar el módulo de audio.

channels es el número de canales de audio. Puede ser 1 o 2. Las muestras de audio se entrelazan cuando se usa más de un canal. La captura multicanal solo se admite en placas con más de un micrófono.

frequency es la frecuencia de muestreo PCM en Hz. El conjunto de frecuencias admitidas es específico de cada puerto/placa.

gain_db es la ganancia del micrófono que se aplicará, en decibelios.

highpass es el coeficiente del filtro paso alto (STM32) o un valor booleano que habilita el filtro paso alto (Alif). Se ignora en los puertos que no implementan un filtro paso alto.

samples es el número de muestras PCM que se acumulan por cada función de retorno (callback). Si se establece en -1, el valor se calcula automáticamente a partir del factor de diezmado y el número de canales. Debe ser múltiplo de 16. Disponible en los puertos STM32 y Alif.

buffers es el número de búferes PCM internos utilizados para encolar muestras entre la ISR del DMA y el usuario. Disponible en los puertos Alif y RP2.

overflow controla si un desbordamiento de búfer lanza RuntimeError. Cuando es False, se sobrescribe el búfer más antiguo y la transmisión continúa. Disponible en los puertos Alif y RP2.

clkdiv anula el divisor de reloj del PIO utilizado para controlar el reloj PDM. Cuando es 0, el divisor se calcula a partir de la frecuencia solicitada. Disponible en el puerto RP2.

audio.start_streaming(callback: Callable[[bytearray], None] | None) None

Inicia la captura de audio.

callback se llama desde el planificador con un único argumento pcmbuf cada vez que un nuevo búfer PCM está listo. pcmbuf es un bytearray de muestras PCM de 16 bits con signo, cuya longitud viene determinada por el factor de diezmado, el número de canales y el argumento samples pasado a audio.init(). En el modo de un solo canal, cada entrada es una muestra de 16 bits; en el modo de doble canal, las muestras se entrelazan por pares.

En los puertos que admiten audio.get_buffer() (Alif y RP2), pasar un valor no invocable (p. ej. None) inicia la captura sin una función de retorno (callback), de modo que los búferes puedan vaciarse con audio.get_buffer() en su lugar.

audio.stop_streaming() None

Detiene la captura de audio y borra cualquier función de retorno (callback) instalada.

audio.get_buffer(timeout: int = 0) bytearray

Devuelve el siguiente búfer PCM disponible. Se bloquea hasta que un búfer esté listo o hasta que hayan transcurrido timeout milisegundos (0 significa esperar indefinidamente). Lanza RuntimeError si la transmisión no está habilitada, si se ha producido un desbordamiento de búfer mientras overflow es True, o si hay una función de retorno (callback) de transmisión instalada.

Disponible en los puertos Alif y RP2.

audio.read_pdm(buf: bytearray) None

Lee muestras PDM en bruto desde el micrófono directamente en buf. buf debe ser un objeto array/bytearray cuyo tamaño de elemento coincida con el número de canales (1 byte para mono, 2 bytes para estéreo).

Disponible únicamente en el puerto STM32 (placas basadas en SAI).

audio.samples() int

Devuelve el número total de muestras PCM capturadas desde la última llamada a audio.start_streaming().

Disponible únicamente en el puerto RP2.

audio.overflow() bool

Devuelve True si se ha producido un desbordamiento de búfer desde la última llamada a audio.start_streaming().

Disponible únicamente en el puerto RP2.