跳转至

音频录制示例*

提示

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 初始化流程*

  1. 配置 UART0:921600 波特率,DMA 发送模式
  2. 初始化音频输出通路(硬回采参考,可注释掉以禁用)
  3. 配置 SDM/DAC 音频播放参数
  4. 如果启用外部 PA:切换引脚复用和音量映射表
  5. 如果启用静音控制:配置 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. 注意事项*

  1. 数据源选择:默认发送原始麦克风音频,如需 AEC 处理后的数据,修改 app_event_response() 中的 vpa_get_mic_framevpa_get_ref_frame
  2. 硬回采通路:如需硬回采分析,保持 audio_out_init() 调用;如果不需要可注释掉以减少干扰
  3. 外部 PAAPP_ENABLE_EXTERNAL_PA 设为 1 时会修改引脚复用和音量映射,需根据实际硬件配置
  4. UART 参数:固定使用 UART0、921600 波特率,PC 端需匹配
  5. 休眠/唤醒未实现:当前 SDK 不支持休眠功能,app_suspend()app_resume() 保持空实现即可