audio — Módulo de Áudio¶
O módulo audio é usado para gravar amostras de áudio de um microfone. As amostras PDM capturadas do microfone são filtradas e decimadas em amostras PCM, que podem ser passadas para um callback do usuário ou lidas diretamente em um buffer.
Funções¶
- 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 o módulo de áudio. Deve ser chamado primeiro, antes de usar o módulo de áudio.
channelsé o número de canais de áudio. Pode ser1ou2. As amostras de áudio são intercaladas quando mais de um canal é usado. A captura multicanal só é suportada em placas com mais de um microfone.frequencyé a frequência de amostragem PCM em Hz. O conjunto de frequências suportadas é específico de cada port/placa.gain_dbé o ganho do microfone a ser aplicado, em decibéis.highpassé o coeficiente do filtro passa-alta (STM32) ou um booleano que habilita o filtro passa-alta (Alif). Ignorado em ports que não implementam um filtro passa-alta.samplesé o número de amostras PCM a acumular por callback. Se definido como-1, o valor é calculado automaticamente a partir do fator de decimação e do número de canais. Deve ser um múltiplo de 16. Disponível nos ports STM32 e Alif.buffersé o número de buffers PCM internos usados para enfileirar amostras entre a ISR do DMA e o usuário. Disponível nos ports Alif e RP2.overflowcontrola se um overflow de buffer geraRuntimeError. QuandoFalse, o buffer mais antigo é sobrescrito e o streaming continua. Disponível nos ports Alif e RP2.clkdivsobrepõe o divisor de clock do PIO usado para gerar o clock PDM. Quando0, o divisor é calculado a partir da frequência solicitada. Disponível no port RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Inicia a captura de áudio.
callbacké chamado pelo agendador com um único argumentopcmbufcada vez que um novo buffer PCM está pronto.pcmbufé umbytearrayde 16 bits com sinal de amostras PCM cujo comprimento é determinado pelo fator de decimação, pelo número de canais e pelo argumentosamplespassado paraaudio.init(). No modo de canal único, cada entrada é uma amostra de 16 bits; no modo de canal duplo, as amostras são intercaladas em pares.Em ports que suportam
audio.get_buffer()(Alif e RP2), passar um valor não chamável (por exemplo,None) inicia a captura sem um callback, de modo que os buffers possam ser drenados comaudio.get_buffer().
- audio.get_buffer(timeout: int = 0) bytearray¶
Retorna o próximo buffer PCM disponível. Bloqueia até que um buffer esteja pronto ou até que
timeoutmilissegundos tenham decorrido (0significa esperar indefinidamente). GeraRuntimeErrorse o streaming não estiver habilitado, se ocorreu um overflow de buffer enquantooverflowéTrue, ou se um callback de streaming estiver instalado.Disponível nos ports Alif e RP2.
- audio.read_pdm(buf: bytearray) None¶
Lê amostras PDM brutas do microfone diretamente em
buf.bufdeve ser umarray/bytearraycujo tamanho de elemento corresponda ao número de canais (1 byte para mono, 2 bytes para estéreo).Disponível apenas no port STM32 (placas baseadas em SAI).
- audio.samples() int¶
Retorna o número total de amostras PCM capturadas desde a última chamada de
audio.start_streaming().Disponível apenas no port RP2.
- audio.overflow() bool¶
Retorna
Truese ocorreu um overflow de buffer desde a última chamada deaudio.start_streaming().Disponível apenas no port RP2.