audio — Módulo de Áudio¶
O módulo audio é utilizado para gravar amostras de áudio a partir de um microfone. As amostras PDM captadas pelo microfone são filtradas e decimadas para amostras PCM, que podem ser passadas a um callback do utilizador ou lidas diretamente para 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 antes de utilizar o módulo de áudio.
channelsé o número de canais de áudio. Pode ser1ou2. As amostras de áudio são intercaladas quando se utiliza mais de um canal. A captura multicanal só é suportada em placas com mais de um microfone.frequencyé a frequência das amostras PCM em Hz. O conjunto de frequências suportadas é específico de cada porta/placa.gain_dbé o ganho do microfone a aplicar, em decibéis.highpassé o coeficiente do filtro passa-alto (STM32) ou um booleano que ativa o filtro passa-alto (Alif). Ignorado em portas que não implementam um filtro passa-alto.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 nas portas STM32 e Alif.buffersé o número de buffers PCM internos utilizados para colocar amostras em fila entre o DMA ISR e o utilizador. Disponível nas portas Alif e RP2.overflowcontrola se um overflow de buffer lançaRuntimeError. QuandoFalse, o buffer mais antigo é sobrescrito e a transmissão continua. Disponível nas portas Alif e RP2.clkdivsubstitui o divisor de relógio PIO utilizado para acionar o relógio PDM. Quando0, o divisor é calculado a partir da frequência solicitada. Disponível na porta RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Inicia a captura de áudio.
callbacké chamado a partir do agendador com um único argumentopcmbufcada vez que um novo buffer PCM fica disponível.pcmbufé umbytearraycom sinal de 16 bits de amostras PCM cujo comprimento é determinado pelo fator de decimação, pelo número de canais e pelo argumentosamplespassado aaudio.init(). No modo de canal único, cada entrada é uma amostra de 16 bits; no modo de canal duplo, as amostras são intercaladas aos pares.Em portas que suportam
audio.get_buffer()(Alif e RP2), passar um valor não chamável (por exemplo,None) inicia a captura sem callback, para 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 aguardar indefinidamente). LançaRuntimeErrorse a transmissão não estiver ativa, se tiver ocorrido um overflow de buffer enquantooverflowéTrue, ou se existir um callback de transmissão instalado.Disponível nas portas Alif e RP2.
- audio.read_pdm(buf: bytearray) None¶
Lê amostras PDM brutas do microfone diretamente para
buf.bufdeve ser umarray/bytearraycujo tamanho de elemento corresponde ao número de canais (1 byte para mono, 2 bytes para estéreo).Disponível apenas na porta STM32 (placas baseadas em SAI).
- audio.samples() int¶
Retorna o número total de amostras PCM captadas desde a última chamada a
audio.start_streaming().Disponível apenas na porta RP2.
- audio.overflow() bool¶
Retorna
Truese tiver ocorrido um overflow de buffer desde a última chamada aaudio.start_streaming().Disponível apenas na porta RP2.