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.
channelses el número de canales de audio. Puede ser1o2. 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.frequencyes la frecuencia de muestreo PCM en Hz. El conjunto de frecuencias admitidas es específico de cada puerto/placa.gain_dbes la ganancia del micrófono que se aplicará, en decibelios.highpasses 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.sampleses 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.bufferses 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.overflowcontrola si un desbordamiento de búfer lanzaRuntimeError. Cuando esFalse, se sobrescribe el búfer más antiguo y la transmisión continúa. Disponible en los puertos Alif y RP2.clkdivanula el divisor de reloj del PIO utilizado para controlar el reloj PDM. Cuando es0, 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.
callbackse llama desde el planificador con un único argumentopcmbufcada vez que un nuevo búfer PCM está listo.pcmbufes unbytearrayde muestras PCM de 16 bits con signo, cuya longitud viene determinada por el factor de diezmado, el número de canales y el argumentosamplespasado aaudio.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 conaudio.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
timeoutmilisegundos (0significa esperar indefinidamente). LanzaRuntimeErrorsi la transmisión no está habilitada, si se ha producido un desbordamiento de búfer mientrasoverflowesTrue, 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.bufdebe ser un objetoarray/bytearraycuyo 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
Truesi se ha producido un desbordamiento de búfer desde la última llamada aaudio.start_streaming().Disponible únicamente en el puerto RP2.