audio --- وحدة الصوت¶
تُستخدم الوحدة audio لتسجيل عينات صوتية من ميكروفون. تُرشَّح عينات PDM الملتقطة من الميكروفون ويُجرى لها تقليل لمعدل العينات للحصول على عينات PCM التي يمكن تمريرها إلى دالة رد نداء خاصة بالمستخدم أو قراءتها مباشرةً إلى مخزن مؤقت.
الدوال¶
- 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. تتشابك العينات الصوتية عند استخدام أكثر من قناة واحدة. لا يُدعَم الالتقاط متعدد القنوات إلا على اللوحات التي تحتوي على أكثر من ميكروفون واحد.frequencyهو تردد عينات PCM بوحدة Hz. مجموعة الترددات المدعومة خاصة بالمنفذ/اللوحة.gain_dbهو كسب الميكروفون المراد تطبيقه، بوحدة الديسيبل.highpassهو معامل مرشح التمرير العالي (STM32) أو قيمة منطقية تُفعّل مرشح التمرير العالي (Alif). يُتجاهَل على المنافذ التي لا تطبّق مرشح تمرير عالٍ.samplesهو عدد عينات PCM المراد تجميعها لكل دالة رد نداء. إذا ضُبط على-1تُحسب القيمة تلقائياً من عامل تقليل العينات وعدد القنوات. يجب أن يكون من مضاعفات 16. متاح على منفذي STM32 وAlif.buffersهو عدد مخازن PCM الداخلية المؤقتة المستخدمة لإدراج العينات في طابور بين DMA ISR والمستخدم. متاح على منفذي Alif وRP2.overflowيتحكم في ما إذا كان تجاوز سعة المخزن المؤقت يثيرRuntimeError. عند ضبطه علىFalseيُكتب فوق أقدم مخزن مؤقت ويستمر البث. متاح على منفذي Alif وRP2.clkdivيتجاوز مقسّم ساعة PIO المستخدم لتشغيل ساعة PDM. عند ضبطه على0يُحسب المقسّم من التردد المطلوب. متاح على منفذ RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
يبدأ التقاط الصوت.
تُستدعى
callbackمن المجدول مع وسيط واحدpcmbufفي كل مرة يصبح فيها مخزن PCM مؤقت جديد جاهزاً.pcmbufهوbytearrayمن عينات PCM موقّعة بحجم 16 بت يتحدد طولها بعامل تقليل العينات وعدد القنوات والوسيطsamplesالمُمرَّر إلىaudio.init(). في وضع القناة الواحدة يمثل كل عنصر عينة واحدة بحجم 16 بت؛ وفي وضع القناتين تتشابك العينات في أزواج.على المنافذ التي تدعم
audio.get_buffer()(Alif وRP2)، يؤدي تمرير قيمة غير قابلة للاستدعاء (مثلNone) إلى بدء الالتقاط دون دالة رد نداء بحيث يمكن تفريغ المخازن المؤقتة باستخدامaudio.get_buffer()بدلاً من ذلك.
- audio.get_buffer(timeout: int = 0) bytearray¶
يعيد مخزن PCM المؤقت التالي المتاح. يحظر التنفيذ حتى يصبح مخزن مؤقت جاهزاً أو حتى ينقضي
timeoutبالميلي ثانية (0يعني الانتظار إلى الأبد). يثيرRuntimeErrorإذا لم يكن البث ممكّناً، أو إذا حدث تجاوز سعة لمخزن مؤقت بينماoverflowيساويTrue، أو إذا كانت دالة رد نداء للبث مثبّتة.متاح على منفذي Alif وRP2.
- audio.read_pdm(buf: bytearray) None¶
يقرأ عينات PDM الخام من الميكروفون مباشرةً إلى
buf. يجب أن يكونbufكائنarray/bytearrayيطابق حجم عنصره عدد القنوات (بايت واحد للأحادي، بايتان للستيريو).متاح على منفذ STM32 (اللوحات المعتمدة على SAI) فقط.
- audio.samples() int¶
يعيد العدد الإجمالي لعينات PCM الملتقطة منذ آخر استدعاء لـ
audio.start_streaming().متاح على منفذ RP2 فقط.
- audio.overflow() bool¶
يعيد
Trueإذا حدث تجاوز سعة لمخزن مؤقت منذ آخر استدعاء لـaudio.start_streaming().متاح على منفذ RP2 فقط.