跳转至

声学测试应用*

提示

1. 概述*

声学测试 App,用于测试扬声器播报、AEC 回声消除、录音直通等音频通路。通过不同配置文件可切换测试模式,适用于产线或实验室的声学验证场景。

2. 功能特性*

  • THD 测试speak_test.config):播放白噪、单音音频,用于 THD(总谐波失真)测试
  • AEC 测试aec_test.config):播放人声,验证回声消除效果
  • 双声道录音bypass_record.config):mic + ref 双声道录音,无播报
  • 可选集成 VIVA 语音引擎(CONFIG_ENABLE_VIVA

3. 目录结构*

app/acoustic_test_app/
├── acoustic_test_app.c    # 主程序
├── app.mk                  # 编译配置
├── app.name                # Kconfig 选项
├── Kconfig                 # 子配置(空)
└── viva/                   # VIVA 引擎子模块
    ├── viva.c
    ├── viva.h
    └── viva.mk
文件 作用
acoustic_test_app.c 主程序,定义 OVP_APP 结构体并注册
app.mk 编译主程序和 viva 子模块(由 CONFIG_ENABLE_VIVA 控制)
app.name 定义 CONFIG_APP_ACOUSTIC_TEST 选项
viva/ VIVA 语音引擎封装,负责 TTS 播报控制

4. 配置说明*

该 App 无额外的 Kconfig 子配置和宏定义。在 menuconfig 中选择 "Acoustic Test" 即可。

依赖外部配置项 CONFIG_ENABLE_VIVA,启用后才会编译 viva 子模块并支持 TTS 播报。

5. 工作原理*

5.1 初始化流程*

  1. 打印唤醒源信息
  2. 如果启用 CONFIG_ENABLE_VIVA:初始化 VIVA 引擎
  3. 发送 EVENT_POWER_ON_TTS_PLAY 事件,触发首次 TTS 播报

5.2 事件处理*

app_event_response() 仅响应 Audio-in 录音完成事件:

事件 触发时机 处理逻辑
EVENT_AUDIO_IN_RECORD_DONE Audio-in 录音完成(触发时间由 PCM 帧长决定,根据配置自行确定) 检查播放器是否空闲,空闲则重新触发 TTS 播报

当播放器空闲时发送 EVENT_POWER_ON_TTS_PLAY,实现循环播报。

5.3 主循环*

app_task_loop() 中调用 viva_tick() 驱动 VIVA 引擎的周期性任务。

6. 使用方法*

6.1 编译*

配置文件位于 configs/acoustic_test_config/,根据测试需求选择:

配置文件 说明
speak_test.config THD 测试(播放白噪、单音音频)
aec_test.config AEC 测试(播放人声)
bypass_record.config mic + ref 双声道录音,无播报
cp configs/acoustic_test_config/speak_test.config .config
make defconfig
make clean; make

6.2 烧录运行*

cd tools/bootx/
./flash_nor.sh 0 -r 1000000

7. 预期输出*

根据所选配置文件,输出不同:

  • THD 测试:扬声器播放白噪或单音音频
  • AEC 测试:扬声器播放人声,麦克风采集环境音(含扬声器发出的声音),用于回声消除效果验证
  • 双声道录音:mic + ref 双声道持续录音,无播报输出

THD 测试和 AEC 测试需配合声学测试脚本判断是否达标,参考:声学测试用户指南

8. 注意事项*

  1. 依赖 VIVA 引擎:该 App 依赖 CONFIG_ENABLE_VIVA,未启用时无法正常工作
  2. 循环播报:播报会无限循环,不适合长时间运行,仅用于测试场景
  3. 休眠/唤醒未实现:当前 SDK 不支持休眠功能,app_suspend()app_resume() 保持空实现即可