audio --- Mô-đun Âm thanh

Mô-đun audio được dùng để ghi lại các mẫu âm thanh từ microphone. Các mẫu PDM thu được từ microphone sẽ được lọc và giảm tần số xuống thành các mẫu PCM, có thể được truyền tới hàm gọi lại của người dùng hoặc đọc trực tiếp vào một bộ đệm.

Hàm

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

Khởi tạo mô-đun âm thanh. Phải được gọi trước tiên trước khi sử dụng mô-đun âm thanh.

channels là số kênh âm thanh. Có thể là 1 hoặc 2. Các mẫu âm thanh được xen kẽ khi sử dụng nhiều hơn một kênh. Chụp đa kênh chỉ được hỗ trợ trên các board có nhiều hơn một microphone.

frequency là tần số mẫu PCM tính bằng Hz. Tập hợp các tần số được hỗ trợ phụ thuộc vào cổng/board cụ thể.

gain_db là độ khuếch đại microphone cần áp dụng, tính bằng decibel.

highpass là hệ số bộ lọc thông cao (STM32) hoặc một giá trị boolean bật bộ lọc thông cao (Alif). Bị bỏ qua trên các cổng không triển khai bộ lọc thông cao.

samples là số mẫu PCM tích lũy cho mỗi lần gọi lại. Nếu đặt thành -1, giá trị sẽ được tính tự động từ hệ số giảm tần và số kênh. Phải là bội số của 16. Có sẵn trên cổng STM32 và Alif.

buffers là số bộ đệm PCM nội bộ được dùng để xếp hàng các mẫu giữa DMA ISR và người dùng. Có sẵn trên cổng Alif và RP2.

overflow kiểm soát liệu tràn bộ đệm có gây ra RuntimeError hay không. Khi là False, bộ đệm cũ nhất sẽ bị ghi đè và việc phát trực tuyến tiếp tục. Có sẵn trên cổng Alif và RP2.

clkdiv ghi đè bộ chia xung nhịp PIO được dùng để điều khiển xung nhịp PDM. Khi là 0, bộ chia sẽ được tính từ tần số yêu cầu. Có sẵn trên cổng RP2.

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

Bắt đầu thu âm thanh.

callback được gọi từ bộ lập lịch với một đối số duy nhất là pcmbuf mỗi khi có bộ đệm PCM mới sẵn sàng. pcmbuf là một bytearray 16-bit có dấu của các mẫu PCM với độ dài được xác định bởi hệ số giảm tần, số kênh và đối số samples được truyền cho audio.init(). Ở chế độ một kênh, mỗi phần tử là một mẫu 16-bit; ở chế độ hai kênh, các mẫu được xen kẽ theo từng cặp.

Trên các cổng hỗ trợ audio.get_buffer() (Alif và RP2), việc truyền một giá trị không thể gọi (ví dụ: None) sẽ bắt đầu thu mà không có hàm gọi lại, do đó bộ đệm có thể được lấy ra bằng audio.get_buffer() thay thế.

audio.stop_streaming() None

Dừng thu âm thanh và xóa bất kỳ hàm gọi lại đã cài đặt nào.

audio.get_buffer(timeout: int = 0) bytearray

Trả về bộ đệm PCM tiếp theo có sẵn. Chặn cho đến khi có bộ đệm sẵn sàng hoặc đến khi timeout mili giây đã trôi qua (0 có nghĩa là đợi mãi mãi). Gây ra RuntimeError nếu phát trực tuyến chưa được bật, nếu xảy ra tràn bộ đệm trong khi overflowTrue, hoặc nếu đã cài đặt hàm gọi lại phát trực tuyến.

Có sẵn trên cổng Alif và RP2.

audio.read_pdm(buf: bytearray) None

Đọc các mẫu PDM thô từ microphone trực tiếp vào buf. buf phải là một array/bytearray có kích thước phần tử phù hợp với số kênh (1 byte cho mono, 2 byte cho stereo).

Chỉ có sẵn trên cổng STM32 (các board dựa trên SAI).

audio.samples() int

Trả về tổng số mẫu PCM đã thu kể từ lần gọi cuối cùng tới audio.start_streaming().

Chỉ có sẵn trên cổng RP2.

audio.overflow() bool

Trả về True nếu đã xảy ra tràn bộ đệm kể từ lần gọi cuối cùng tới audio.start_streaming().

Chỉ có sẵn trên cổng RP2.