audio — מודול אודיו

המודול audio משמש להקלטת דגימות אודיו ממיקרופון. דגימות PDM שנלכדות מהמיקרופון מסוננות ומדוללות לדגימות PCM שניתן להעביר לפונקציית callback של המשתמש או לקרוא ישירות אל תוך חוצץ (buffer).

פונקציות

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

מאתחל את מודול האודיו. חייב להיקרא ראשון לפני השימוש במודול האודיו.

channels הוא מספר ערוצי האודיו. יכול להיות 1 או 2. דגימות האודיו משולבות (interleaved) כאשר נעשה שימוש ביותר מערוץ אחד. לכידה רב-ערוצית נתמכת רק בלוחות עם יותר ממיקרופון אחד.

frequency הוא תדר דגימת ה-PCM ב-Hz. קבוצת התדרים הנתמכים תלויה ב-port/בלוח.

gain_db הוא הגבר (gain) המיקרופון שיש להחיל, ביחידות דציבל.

highpass הוא מקדם המסנן מעביר-גבוהים (STM32) או ערך בוליאני המפעיל את המסנן מעביר-גבוהים (Alif). מתעלמים ממנו ב-port שאינו מממש מסנן מעביר-גבוהים.

samples הוא מספר דגימות ה-PCM לצבור בכל callback. אם נקבע ל--1, הערך מחושב אוטומטית מגורם הדילול ומספר הערוצים. חייב להיות כפולה של 16. זמין ב-port של STM32 ושל Alif.

buffers הוא מספר חוצצי ה-PCM הפנימיים המשמשים לתור דגימות בין ה-DMA ISR למשתמש. זמין ב-port של Alif ושל RP2.

overflow קובע האם גלישת חוצץ (buffer) מעלה RuntimeError. כאשר הערך False החוצץ הישן ביותר נדרס וההזרמה ממשיכה. זמין ב-port של Alif ושל RP2.

clkdiv עוקף את מחלק שעון ה-PIO המשמש להנעת שעון ה-PDM. כאשר הערך 0 המחלק מחושב מהתדר המבוקש. זמין ב-port של RP2.

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

מתחיל לכידת אודיו.

callback נקראת מהמתזמן עם ארגומנט יחיד pcmbuf בכל פעם שחוצץ PCM חדש מוכן. pcmbuf הוא bytearray של דגימות PCM מסוג 16-bit עם סימן, שאורכו נקבע על ידי גורם הדילול, מספר הערוצים והארגומנט samples שהועבר אל audio.init(). במצב חד-ערוצי כל איבר הוא דגימה אחת של 16-bit; במצב דו-ערוצי הדגימות משולבות בזוגות.

ב-port שתומכים ב-audio.get_buffer() (Alif ו-RP2), העברת ערך שאינו ניתן לקריאה כפונקציה (למשל None) מתחילה לכידה ללא callback כך שניתן לרוקן את החוצצים באמצעות audio.get_buffer() במקום זאת.

audio.stop_streaming() None

עוצר את לכידת האודיו ומנקה כל callback מותקן.

audio.get_buffer(timeout: int = 0) bytearray

מחזיר את חוצץ ה-PCM הזמין הבא. חוסם עד שחוצץ מוכן או עד שחלפו timeout אלפיות שנייה (0 משמעו המתנה לנצח). מעלה RuntimeError אם ההזרמה אינה מופעלת, אם אירעה גלישת חוצץ בעוד overflow הוא True, או אם מותקן callback של הזרמה.

זמין ב-port של Alif ושל RP2.

audio.read_pdm(buf: bytearray) None

קורא דגימות PDM גולמיות מהמיקרופון ישירות אל תוך buf. buf חייב להיות array/bytearray שגודל האיבר שלו תואם את מספר הערוצים (1 בית למונו, 2 בתים לסטריאו).

זמין ב-port של STM32 (לוחות מבוססי SAI) בלבד.

audio.samples() int

מחזיר את המספר הכולל של דגימות PCM שנלכדו מאז הקריאה האחרונה אל audio.start_streaming().

זמין ב-port של RP2 בלבד.

audio.overflow() bool

מחזיר True אם אירעה גלישת חוצץ מאז הקריאה האחרונה אל audio.start_streaming().

זמין ב-port של RP2 בלבד.