audio_afe

Example of the component jason-mao/av_processor v0.6.0
# Audio AFE 示例

## 简介

本示例演示如何在内置 AFE frontend 模式下使用 `av_processor` 组件。它实现了一个带唤醒提示音的麦克风到扬声器回环流程:`audio_recorder` 先经过 AFE 处理采集音频,再由 `audio_feeder` 将处理后的音频实时播放出来;当检测到唤醒词后,会通过独立的 `prompt player` 播放 SPIFFS 中的提示音。

## 硬件要求

本示例基于 **ESP32-S3-KORVO2-V3** 开发板实现,该板子集成了麦克风阵列和扬声器,适合测试 AEC、NS、VAD、AGC 等 AFE 能力。

## 功能说明

### audio_processor 组件

`audio_processor` 提供了统一的音频处理接口,主要包括以下功能模块:

- **audio_recorder(录音器)**:负责从麦克风采集音频数据,并运行内置 `ai_afe` 前端
- **audio_feeder(播放器)**:负责将处理后的音频送入播放管道,实现实时播放
- **prompt player(提示音播放器)**:负责在唤醒开始事件到来时播放提示音文件
- **AFE frontend**:在 esp-sr 前端路径中启用唤醒、AEC、NS、VAD、AGC 等集成能力

### AFE 回环流程

本示例主要用于演示内置 AFE 唤醒路径:

1. **录音**:通过 `audio_recorder` 从麦克风采集音频数据
2. **AFE 处理**:在输出编码数据前先经过内置 `ai_afe` 前端,并启用 wakeup/AEC/NS/VAD/AGC
3. **唤醒提示音**:检测到 `WAKEUP_START` 事件后,通过 `prompt player` 播放 `/spiffs/lai_lo.mp3`
4. **播放**:将处理后的 PCM 数据送入 `audio_feeder` 实时回放

实现流程:

- 初始化板级音频通路,并注册基于回调的录音/播放 I/O
- 挂载 `spiffs_data` 分区,并从 `/spiffs` 提供提示音文件访问
- 使用 `DEFAULT_AV_PROCESSOR_AFE_CONFIG()` 配置录音器
- 在 AFE wakeup mode 下启用 AEC、NS、VAD、AGC
- 打开 recorder、playback、prompt player 和 feeder 模块
- 在 `ESP_GMF_AFE_EVT_WAKEUP_START` 事件中触发提示音播放
- 在主循环中持续读取处理后的音频数据并送入 feeder

## 使用说明

1. 执行 `. ./prebuild.sh` 脚本,根据提示选择开发板型号
2. 使用 `idf.py flash monitor -p` 命令完成烧录并运行程序
3. 构建时会将 [spiffs](/home/xutao/workspace-20/av_processor_v2/examples/audio_afe/spiffs) 目录中的 `lai_lo.mp3` 打包到 `spiffs_data` 分区
4. 运行后,对着麦克风说出唤醒词,设备会先播放提示音
5. 随后可以继续对着麦克风说话,并从扬声器中监听经过 AFE 处理后的回环音频

## 配置参数

- 采样率:16000 Hz
- 位深度:16 bit 录音输出 / 播放数据
- 声道数:1
- 帧时长:20 ms
- 提示音文件:`file://spiffs/lai_lo.mp3`

To create a project from this example, run:

idf.py create-project-from-example "jason-mao/av_processor=0.6.0:audio_afe"

or download archive (~3.75 MB)