麦克风(mic)
该模块用于控制 PDM 麦克风的采集,基于 I2S_PDM 驱动,支持初始化、数据读取、释放、以及简单的音频统计分析功能。
方法列表
1. mic.init(sample_rate, bit_width, slot_mode, buff_size)
功能: 初始化麦克风采集,固定使用 GPIO40(时钟)和 GPIO41(数据输入)。
参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| sample_rate | int | 采样率(如 16000、44100 等) |
| bit_width | int | 位宽(通常为 16) |
| slot_mode | int | 槽位模式(单声道或双声道配置,与你的驱动定义一致) |
| buff_size | int | 缓冲区大小(单位:字节) |
示例:
import mic
mic.init(16000, 16, 1, 4096)
2. mic.read_data(buffer) -> int
功能: 从 PDM 读取音频数据并写入传入的 buffer 中。
参数:
buffer:需提前分配好足够大小的 bytearray,长度不小于 buff_size。
返回值:
- 实际读取到的字节数(int)
注意:
- 需保证 buffer 长度大于等于初始化时设置的 buff_size。
- 未初始化时调用将抛出异常。
示例:
import mic
buffer = bytearray(4096)
bytes_read = mic.read_data(buffer)
print("读取了", bytes_read, "字节")
3. mic.release()
功能: 释放麦克风资源,关闭 I2S PDM。
示例:
mic.release()
4. mic.calculate_stats() -> dict
功能: 自动从 PDM 读取一帧数据,并计算其最大值、最小值、平均值。
返回值:
- 字典对象,包含:
max:最大采样值(int16)min:最小采样值(int16)avg:平均采样值(int16)
示例:
stats = mic.calculate_stats()
print("最大值:", stats['max'])
print("最小值:", stats['min'])
print("平均值:", stats['avg'])
注意:
- 内部自动分配并释放缓冲区;
- 未初始化时调用将抛出异常。
用法示例
import mic
# 初始化
mic.init(16000, 16, 1, 4096)
# 读取数据
buffer = bytearray(4096)
mic.read_data(buffer)
# 计算统计数据
stats = mic.calculate_stats()
print(stats)
# 释放资源
mic.release()
⚠ 注意事项
- 初始化时 GPIO 已固定:
- 时钟 CLK_IO = 40
- 数据 DIN_IO = 41
- 每次初始化会覆盖之前的配置;
- 必须先调用
mic.init(),再调用其他方法; calculate_stats()适合做简单音量检测、声音能量分析。