相关链接:
AI语音智能体开发日记(一)如何为"小智"服务器启用并调试 License 功能-CSDN博客
AI语音智能体开发日记(二)解决 Wi-Fi 配网小程序的兼容性问题-CSDN博客
AI语音智能体开发日记(三)解决小程序配网中的蓝牙命名与MAC地址获取问题-CSDN博客
AI语音智能体开发日记(四)在FreeRTOS中构建线程安全的UART2通信模块-CSDN博客
AI语音智能体开发日记(五)为智能设备注入"灵魂"------详解MCP工具的注册与使用-CSDN博客
AI语音智能体开发日记(六)为智能体注入旋律------七牛云音乐服务的接入与避坑指南-CSDN博客
AI语音智能体开发日记(七)搞定功放控制------详解GX8006平台Mute电平配置-CSDN博客
AI语音智能体开发日记(八)LVGL 8.4.0 移植实战------从零构建嵌入式GUI-CSDN博客
AI语音智能体开发日记(九)LVGL 8.4.0 中文字体配置全攻略-CSDN博客
AI语音智能体开发日记(十)LVGL 图标字体实战------从 FontAwesome 到屏幕显示-CSDN博客
AI语音智能体开发日记(十一)为智能设备"声"临其境------详解音频资源自动化生成流程-CSDN博客
AI语音智能体开发日记(十二)GX8006 固件定制指南------从双唤醒词到 UART 音频传输-CSDN博客
AI语音智能体开发日记(十三)一次由寄存器溢出引发的串口波特率"玄学"问题排查-CSDN博客
推荐链接:
AI语音智能体架构解析(二)大模型(AI 的大脑)-CSDN博客
AI语音智能体架构解析(三)智控台(指挥中心)-CSDN博客
AI语音智能体架构解析(四)AI 语音终端(执行器官)-CSDN博客
AI语音智能体架构解析(五)小程序/APP(遥控器)-CSDN博客
推荐链接:
AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客
AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手程序 -CSDN博客
开发手记:为智能设备"声"临其境------详解音频资源自动化生成流程
在智能硬件开发中,丰富且恰当的音效与语音提示是提升用户体验的关键一环。然而,手动管理成百上千个音频文件,并将其转换为代码可用的格式,无疑是一项繁琐且易错的工作。
今天,我将详细记录我们项目中一套高效的音频资源自动化生成流程。这套流程通过一个 config.xlsx 配置文件和一套 Python 脚本,实现了从音频源文件到 C 语言头文件的"一键式"生成,极大地提升了开发效率和可维护性。
第一步:准备工作与音频格式规范
在开始之前,我们需要明确系统对原始音频文件的硬性要求。这是保证音频能被正确播放的基础。
根据项目中的 wav_to_opus.py 脚本校验规则,所有输入的 .wav 文件必须满足以下三个条件:

| 参数 | 要求 | 不符合会怎样 |
|---|---|---|
| 采样率 | 必须是 16000 Hz | 直接报错退出 |
| 声道 | 必须是单声道 (Mono) | 直接报错退出 |
| 位深 | 必须是 16-bit PCM | 直接报错退出 |
如果你的原始音频不符合这些规范,可以使用 ffmpeg 工具在 Linux 下进行快速转换。例如,将一个名为 水滴音效.wav 的文件转换为标准格式:
ffmpeg -i 水滴音效.wav -ar 16000 -ac 1 -sample_fmt s16 水滴音效_16k.wav
第二步:编辑配置文件 (config.xlsx)
这是整个流程的核心。我们不再直接修改代码,而是通过编辑 config.xlsx 表格来管理所有音频资源。
表格的每一行代表一个音频事件,主要包含以下几列:
- 事件ID: 音频的唯一数字标识。
- 音频文本: 如果是语音提示,这里填写需要合成的文字内容。
- 是否生成音频: 标记为"是"表示该音频文本需要发送到云端进行语音合成;标记为"否"则表示使用本地已有的音频文件。
- 音频路径: 当"是否生成音频"为"否"时,这里填写本地音频文件的路径。
举个例子 :
假设我们要添加一个新的"水滴提示音"。我们可以在表格末尾新增一行:
- 事件ID :
13 - 音频文本 :
水滴提示音 - 是否生成音频 :
否 - 音频路径 :
./audio_data/水滴音效.wav
通过这种方式,无论是新增云端合成的语音,还是引入本地的音效,都变得非常直观和简单。
第三步:运行自动化生成脚本
需要用到的命令
cd /home/zrh/LN882/qiniu_ota/Dog/HN2506044_V0.7_260721/tools/sbot_audio_gen
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
.venv/bin/python3 -m pip install soundfile numpy openpyxl pandas opuslib requests
.venv/bin/pip install -r requirements.txt

配置好 config.xlsx 后,接下来就是见证奇迹的时刻。我们只需运行一个脚本,剩下的工作就全部自动化完成了。
-
进入脚本目录
cd tools/sbot_audio_gen -
执行生成脚本
bash start_sbot_audio.sh
这个 start_sbot_audio.sh 脚本会自动帮你完成以下所有步骤:
- 环境准备 :检测并创建 Python 虚拟环境(
.venv)。 - 依赖安装 :自动安装
requirements.txt中列出的所有依赖库,如opuslib(用于 Opus 编码)、openpyxl(用于读取 Excel)、soundfile等。 - 核心处理 :调用
python src/main.py config.xlsx,开始处理音频。
脚本运行后,终端会输出详细的日志信息,例如:

1INFO - Excel解析完成, 共解析20条音频配置
2INFO - 开始生成音频文件
3INFO - 成功生成C头文件: output/include/audio_data.h
4INFO - 所有文件生成完成!
生成文件并替换后,可以直接进行定义

第四步:集成生成的音频资源
脚本成功执行后,会在 output/include/ 目录下生成一个全新的 audio_data.h 文件。这个文件就是音频资源的最终形态。
打开 audio_data.h,你会看到所有音频文件都被转换成了一个巨大的二进制数组:

这个数组包含了项目中所有音频的二进制数据。
最后,我们需要将这个新生成的 audio_data.h 文件拷贝到项目源码目录中,替换掉旧文件:
project/ln_model_public/app/servers/qiniu/mcp_server/mcp_tools/smart_toilet/audio_data.h
第五步:在代码中使用音频
资源集成完毕后,我们就可以在代码中通过枚举值来方便地调用它们了。这些枚举定义在 smartbot_audio_res.h 文件中。

在业务逻辑代码中,只需要传入对应的枚举值,系统就能播放指定的音效或语音,实现了数据与逻辑的完美解耦。
总结
通过这套"Excel 配置 + 脚本生成"的自动化流程,我们成功地将音频资源管理从繁琐的手工劳动中解放出来。其核心优势在于:
- 集中管理:所有音频资源及其元数据都在一个 Excel 表格中清晰可见。
- 自动化处理:一键完成格式校验、云端合成、编码转换和 C 数组生成。
- 高效迭代:新增或修改音频提示时,只需修改表格并重新运行脚本,无需触碰核心业务代码。
这套流程不仅适用于音频,其设计思想也可以推广到其他需要批量处理资源文件的场景中,是提升嵌入式开发效率的利器