音频录制示例*
提示
- SDK 路径: http://gitlab.nationalchip.com/nationalchip/voice-wifi-solution/ovp_aiot
- App 路径: SDK 路径下 app/audio_record_sample_app/
- 适用芯片 8005/8006
1. 概述*
音频录制示例 App,演示如何捕获麦克风音频并通过 UART DMA 将 PCM 数据流式传输到 PC 端。支持获取原始麦克风音频和 AEC(回声消除)处理后的音频。配套 tools.zip 提供 PC 端接收程序源码。
2. 功能特性*
- 麦克风音频采集,支持原始和 AEC 处理后的两种数据源
- 通过 UART0(921600 波特率)DMA 高速传输音频数据
- 自定义帧协议:5 字节头 + 1280 字节 PCM 数据
- 支持外部 PA(功放)模式
- 静音检测与自动 MUTE 控制
- 可选硬回采通路(同时播放音频,用于回声消除参考)
3. 目录结构*
app/audio_record_sample_app/
├── audio_record_sample_app.c # 主程序
├── app.mk # 编译配置
├── app.name # Kconfig 选项
├── test_wav.h # 测试 PCM 数据(回采参考)
└── tools.zip # PC 端串口接收程序源码(Windows + Linux)
| 文件 | 作用 |
|---|---|
audio_record_sample_app.c |
音频采集、UART 传输、协议打包 |
app.mk |
编译 audio_record_sample_app.c |
app.name |
定义 CONFIG_APP_AUDIO_RECORD 选项 |
tools.zip |
PC 端配套串口接收程序源码(含 Windows 和 Linux 版本) |
4. 配置说明*
4.1 宏定义*
#define AUDIO_OUT_BUFFER_LEN 8192 // 播放 DMA 缓冲区大小
#define APP_ENABLE_EXTERNAL_PA 1 // 外部 PA 支持(1: 启用, 0: 禁用)
#define APP_ENABLE_MUTE_CONTROL 1 // 静音控制(1: 启用, 0: 禁用)
#define APP_ENABLE_MUTE_PIN 7 // 静音控制 GPIO 引脚
#define FRAM 1280 // 每帧音频数据字节数
4.2 发送协议*
UART 帧格式(5 字节头 + 数据):
| 字段 | 长度 | 值 |
|---|---|---|
| 同步头 | 4 字节 | 0x11 0x22 0x33 0x44 |
| 类型 | 1 字节 | 0x01(音频数据) |
| PCM 数据 | 1280 字节 | 麦克风音频数据 |
5. 工作原理*
5.1 初始化流程*
- 配置 UART0:921600 波特率,DMA 发送模式
- 初始化音频输出通路(硬回采参考,可注释掉以禁用)
- 配置 SDM/DAC 音频播放参数
- 如果启用外部 PA:切换引脚复用和音量映射表
- 如果启用静音控制:配置 GPIO 7 为输出
5.2 事件处理*
app_event_response() 响应 Audio-in 录音完成事件:
| 事件 | 触发时机 | 处理逻辑 |
|---|---|---|
EVENT_AUDIO_IN_RECORD_DONE |
Audio-in 录音完成(触发时间由 PCM 帧长决定,根据配置自行确定) | 获取 VPA 上下文,提取麦克风帧,封装协议头,通过 UART DMA 发送 |
数据源切换(代码中注释说明):
// 原始麦克风音频
vpa_get_mic_frame(context, &src_addr, &src_len);
// AEC 处理后的音频
vpa_get_ref_frame(context, &src_addr, &src_len);
5.3 静音检测*
连续 30 帧静音时自动 MUTE 输出,检测到语音后取消 MUTE。
5.4 主循环*
app_task_loop() 为空实现。
6. 使用方法*
6.1 编译*
cp configs/example/app/8006_audio_record_sample_app.config .config
make defconfig
make clean; make
或通过 menuconfig 选择:
make menuconfig
# OVP Application Settings → Applications Selection → Audio Record Sample
6.2 烧录运行*
cd tools/bootx/
./flash_nor.sh 0 -r 1000000
6.3 PC 端接收*
解压 tools.zip,参考其中的 PC 端源码编译运行接收程序。UART 参数:921600 波特率。
7. 预期输出*
PC 端接收程序持续收到带协议头的 PCM 音频帧。
8. 注意事项*
- 数据源选择:默认发送原始麦克风音频,如需 AEC 处理后的数据,修改
app_event_response()中的vpa_get_mic_frame为vpa_get_ref_frame - 硬回采通路:如需硬回采分析,保持
audio_out_init()调用;如果不需要可注释掉以减少干扰 - 外部 PA:
APP_ENABLE_EXTERNAL_PA设为 1 时会修改引脚复用和音量映射,需根据实际硬件配置 - UART 参数:固定使用 UART0、921600 波特率,PC 端需匹配
- 休眠/唤醒未实现:当前 SDK 不支持休眠功能,
app_suspend()和app_resume()保持空实现即可