audio — Module Audio¶
Le module audio permet d’enregistrer des échantillons audio depuis un microphone. Les échantillons PDM capturés par le microphone sont filtrés et décimés en échantillons PCM, qui peuvent être transmis à une fonction de rappel utilisateur ou lus directement dans un tampon.
Fonctions¶
- 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¶
Initialise le module audio. Doit être appelée en premier avant d’utiliser le module audio.
channelsest le nombre de canaux audio. Peut valoir1ou2. Les échantillons audio sont entrelacés lorsque plusieurs canaux sont utilisés. La capture multicanal n’est prise en charge que sur les cartes équipées de plus d’un microphone.frequencyest la fréquence d’échantillonnage PCM en Hz. L’ensemble des fréquences prises en charge dépend du port et de la carte.gain_dbest le gain du microphone à appliquer, en décibels.highpassest le coefficient du filtre passe-haut (STM32) ou un booléen activant le filtre passe-haut (Alif). Ignoré sur les ports qui n’implémentent pas de filtre passe-haut.samplesest le nombre d’échantillons PCM à accumuler par appel de la fonction de rappel. S’il est réglé à-1, la valeur est calculée automatiquement à partir du facteur de décimation et du nombre de canaux. Doit être un multiple de 16. Disponible sur les ports STM32 et Alif.buffersest le nombre de tampons PCM internes utilisés pour mettre en file d’attente les échantillons entre l’ISR du DMA et l’utilisateur. Disponible sur les ports Alif et RP2.overflowdétermine si un débordement de tampon déclenche uneRuntimeError. Lorsqu’il vautFalse, le tampon le plus ancien est écrasé et le flux continue. Disponible sur les ports Alif et RP2.clkdivremplace le diviseur d’horloge PIO utilisé pour piloter l’horloge PDM. Lorsqu’il vaut0, le diviseur est calculé à partir de la fréquence demandée. Disponible sur le port RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Démarre la capture audio.
callbackest appelée par l’ordonnanceur avec un unique argumentpcmbufchaque fois qu’un nouveau tampon PCM est prêt.pcmbufest unbytearrayd’échantillons PCM signés sur 16 bits dont la longueur est déterminée par le facteur de décimation, le nombre de canaux et l’argumentsamplespassé àaudio.init(). En mode monocanal, chaque entrée correspond à un échantillon de 16 bits ; en mode bicanal, les échantillons sont entrelacés par paires.Sur les ports qui prennent en charge
audio.get_buffer()(Alif et RP2), passer une valeur non appelable (par exempleNone) démarre la capture sans fonction de rappel, de sorte que les tampons puissent être vidés avecaudio.get_buffer()à la place.
- audio.stop_streaming() None¶
Arrête la capture audio et supprime toute fonction de rappel installée.
- audio.get_buffer(timeout: int = 0) bytearray¶
Renvoie le prochain tampon PCM disponible. Bloque jusqu’à ce qu’un tampon soit prêt ou jusqu’à ce que
timeoutmillisecondes se soient écoulées (0signifie attendre indéfiniment). Déclenche uneRuntimeErrorsi le flux n’est pas activé, si un débordement de tampon s’est produit alors queoverflowvautTrue, ou si une fonction de rappel de flux est installée.Disponible sur les ports Alif et RP2.
- audio.read_pdm(buf: bytearray) None¶
Lit les échantillons PDM bruts du microphone directement dans
buf.bufdoit être unarray/bytearraydont la taille des éléments correspond au nombre de canaux (1 octet pour le mono, 2 octets pour le stéréo).Disponible uniquement sur le port STM32 (cartes basées sur SAI).
- audio.samples() int¶
Renvoie le nombre total d’échantillons PCM capturés depuis le dernier appel à
audio.start_streaming().Disponible uniquement sur le port RP2.
- audio.overflow() bool¶
Renvoie
Truesi un débordement de tampon s’est produit depuis le dernier appel àaudio.start_streaming().Disponible uniquement sur le port RP2.