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.

channels adalah jumlah saluran audio. Nilainya dapat berupa 1 atau 2. Sampel audio disusun selang-seling jika lebih dari satu saluran digunakan. Pengambilan multi-saluran hanya didukung pada papan yang memiliki lebih dari satu mikrofon.

frequency adalah frekuensi sampel PCM dalam Hz. Kumpulan frekuensi yang didukung bersifat spesifik untuk port/papan tertentu.

gain_db adalah gain mikrofon yang diterapkan, dalam desibel.

highpass adalah koefisien filter lolos tinggi (STM32) atau nilai boolean yang mengaktifkan filter lolos tinggi (Alif). Diabaikan pada port yang tidak mengimplementasikan filter lolos tinggi.

samples adalah 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.

buffers adalah jumlah buffer PCM internal yang digunakan untuk mengantrekan sampel antara DMA ISR dan pengguna. Tersedia pada port Alif dan RP2.

overflow mengontrol apakah buffer overflow memunculkan RuntimeError. Jika False, buffer terlama ditimpa dan streaming berlanjut. Tersedia pada port Alif dan RP2.

clkdiv mengganti pembagi clock PIO yang digunakan untuk menggerakkan clock PDM. Jika 0, pembagi dihitung dari frekuensi yang diminta. Tersedia pada port RP2.

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

Memulai pengambilan audio.

callback dipanggil dari scheduler dengan satu argumen pcmbuf setiap kali buffer PCM baru siap. pcmbuf adalah bytearray bertanda 16-bit dari sampel PCM yang panjangnya ditentukan oleh faktor desimasi, jumlah saluran, dan argumen samples yang diteruskan ke audio.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 dengan audio.get_buffer().

audio.stop_streaming() None

Menghentikan pengambilan audio dan menghapus callback yang terpasang.

audio.get_buffer(timeout: int = 0) bytearray

Mengembalikan buffer PCM berikutnya yang tersedia. Memblokir hingga buffer siap atau hingga timeout milidetik telah berlalu (0 berarti tunggu selamanya). Memunculkan RuntimeError jika streaming tidak diaktifkan, jika buffer overflow telah terjadi saat overflow adalah True, 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. buf harus berupa array/bytearray yang 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 True jika buffer overflow telah terjadi sejak panggilan terakhir ke audio.start_streaming().

Tersedia hanya pada port RP2.