麦克风
类: Mic_Class(来自 M5Unified)
访问: M5Cardputer.Mic
麦克风支持基于 I2S 的音频录音,可配置采样率和位深度。
生命周期
bool begin(); // 初始化 I2S 并启动后台录音任务
void end(); // 停止并释放 I2S
bool isRunning(); // 后台任务是否正在运行
bool isEnabled(); // 麦克风引脚是否已配置
录音
8 位无符号
bool record(uint8_t* rec_data, size_t array_len);
bool record(uint8_t* rec_data, size_t array_len, uint32_t sample_rate, bool stereo = false);
16 位有符号
bool record(int16_t* rec_data, size_t array_len);
bool record(int16_t* rec_data, size_t array_len, uint32_t sample_rate, bool stereo = false);
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
rec_data |
uint8_t* 或 int16_t* |
— | 接收音频采样的缓冲区 |
array_len |
size_t |
— | 要录制的采样数 |
sample_rate |
uint32_t |
来自配置 | 采样率 (Hz,默认: 16000) |
stereo |
bool |
false |
立体声模式 |
录音请求成功加入队列则返回 true。
配置
采样率也可通过 m5::Mic_Class::config_t 在 begin() 期间设置,但 setSampleRate() 是在调用 record() 前调整的最简单方式。
录音状态
快速示例
// 以 8kHz 录制 4096 个采样
const int samples = 4096;
uint8_t buffer[samples];
M5Cardputer.Mic.setSampleRate(8000);
M5Cardputer.Mic.record(buffer, samples);
// 等待录音完成
while (M5Cardputer.Mic.isRecording()) {
M5Cardputer.update();
delay(1);
}
// 处理录制的采样数据
for (int i = 0; i < samples; i++) {
// buffer[i] 包含 0–255 的音频幅值
int32_t y = map(buffer[i], 0, 255, 240, 0); // 映射到屏幕坐标
M5Cardputer.Display.drawPixel(i / 4, y, TFT_GREEN);
}
非阻塞
record() 是非阻塞的——它将请求排队到后台 I2S 任务。使用 isRecording() 轮询完成状态。
录制 WAV 到 SD 卡
参见 mic_wav_record 示例获取完整的 WAV 录音流程(含 SD 卡支持)。