audio --- Modul Audio¶
Modul audio digunakan untuk merekam sampel audio dari mikrofon. Sampel PDM yang ditangkap dari mikrofon difilter dan didesampling menjadi sampel PCM yang dapat diteruskan ke callback pengguna atau dibaca langsung ke dalam buffer.
Fungsi¶
- 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¶
Menginisialisasi modul audio. Harus dipanggil terlebih dahulu sebelum menggunakan modul audio.
channelsadalah jumlah saluran audio. Nilainya dapat berupa1atau2. Sampel audio disusun selang-seling jika lebih dari satu saluran digunakan. Pengambilan multi-saluran hanya didukung pada papan yang memiliki lebih dari satu mikrofon.frequencyadalah frekuensi sampel PCM dalam Hz. Kumpulan frekuensi yang didukung bersifat spesifik untuk port/papan tertentu.gain_dbadalah gain mikrofon yang diterapkan, dalam desibel.highpassadalah koefisien filter lolos tinggi (STM32) atau nilai boolean yang mengaktifkan filter lolos tinggi (Alif). Diabaikan pada port yang tidak mengimplementasikan filter lolos tinggi.samplesadalah jumlah sampel PCM yang dikumpulkan per callback. Jika diatur ke-1, nilai dihitung secara otomatis dari faktor desimasi dan jumlah saluran. Harus merupakan kelipatan 16. Tersedia pada port STM32 dan Alif.buffersadalah jumlah buffer PCM internal yang digunakan untuk mengantrekan sampel antara DMA ISR dan pengguna. Tersedia pada port Alif dan RP2.overflowmengontrol apakah buffer overflow memunculkanRuntimeError. JikaFalse, buffer terlama ditimpa dan streaming berlanjut. Tersedia pada port Alif dan RP2.clkdivmengganti pembagi clock PIO yang digunakan untuk menggerakkan clock PDM. Jika0, pembagi dihitung dari frekuensi yang diminta. Tersedia pada port RP2.
- audio.start_streaming(callback: Callable[[bytearray], None] | None) None¶
Memulai pengambilan audio.
callbackdipanggil dari scheduler dengan satu argumenpcmbufsetiap kali buffer PCM baru siap.pcmbufadalahbytearraybertanda 16-bit dari sampel PCM yang panjangnya ditentukan oleh faktor desimasi, jumlah saluran, dan argumensamplesyang diteruskan keaudio.init(). Dalam mode saluran tunggal, setiap entri adalah satu sampel 16-bit; dalam mode dual-saluran, sampel disusun selang-seling berpasangan.Pada port yang mendukung
audio.get_buffer()(Alif dan RP2), meneruskan nilai non-callable (mis.None) memulai pengambilan tanpa callback sehingga buffer dapat dikosongkan denganaudio.get_buffer().
- audio.get_buffer(timeout: int = 0) bytearray¶
Mengembalikan buffer PCM berikutnya yang tersedia. Memblokir hingga buffer siap atau hingga
timeoutmilidetik telah berlalu (0berarti tunggu selamanya). MemunculkanRuntimeErrorjika streaming tidak diaktifkan, jika buffer overflow telah terjadi saatoverflowadalahTrue, atau jika callback streaming terpasang.Tersedia pada port Alif dan RP2.
- audio.read_pdm(buf: bytearray) None¶
Membaca sampel PDM mentah dari mikrofon langsung ke
buf.bufharus berupaarray/bytearrayyang ukuran elemennya sesuai dengan jumlah saluran (1 byte untuk mono, 2 byte untuk stereo).Tersedia hanya pada port STM32 (papan berbasis SAI).
- audio.samples() int¶
Mengembalikan total jumlah sampel PCM yang ditangkap sejak panggilan terakhir ke
audio.start_streaming().Tersedia hanya pada port RP2.
- audio.overflow() bool¶
Mengembalikan
Truejika buffer overflow telah terjadi sejak panggilan terakhir keaudio.start_streaming().Tersedia hanya pada port RP2.