Tone 本地音频打包工具
本工具用于生成 app_player 的本地音频二进制文件,将多个音频文件打包成 tone.bin 和 tone.h 文件,供嵌入式设备使用。
功能说明
该工具可以:
处理音频文件(裁剪静音、格式转换)
将多个音频文件打包成二进制文件
tone.bin生成头文件
tone.h,包含音频 ID 枚举定义
音频文件要求
原始音频文件需满足以下格式要求:
采样率: 16 kHz
位深度: 16 bit
格式: MP3 或 PCM
存放位置: ring/ 目录下
使用方法
快速使用
将符合要求的音频文件放入 ring/ 目录,然后执行:
./run.sh
执行后会在 ring/ 目录下生成:
tone.bin- 音频二进制数据文件tone.h- C 头文件,包含音频 ID 定义
高级用法
使用 proc.sh 脚本可以进行更精细的控制:
# 1. 仅打包路径下的音频文件(不处理静音)
./proc.sh -p ./ring
# 2. 处理并打包路径下的音频文件(裁剪静音 + 打包)
./proc.sh -d ./ring
# 3. 处理指定的单个音频文件
./proc.sh -f ./ring/test.mp3
参数说明:
-p, --pack <目录>- 仅打包目录下的音频文件-d, --dir <目录>- 处理并打包目录下的所有音频文件-f, --file <文件>- 处理指定的单个音频文件-h, --help- 显示帮助信息
音频命名规范
音频文件名应使用数字前缀进行排序,例如:
000_greeting.mp3
001_network_suc.mp3
002_network_fail.mp3
003_no_intention.mp3
...
工具会按文件名排序后生成对应的 TONE_ID_0, TONE_ID_1 等枚举值。
生成文件说明
tone.h
头文件包含音频 ID 枚举定义,示例:
#ifndef __LISTENAI_TONE_PACKAGE_H__
#define __LISTENAI_TONE_PACKAGE_H__
enum {
TONE_ID_0 = 0, // 000_greeting.mp3
TONE_ID_1 = 1, // 001_network_suc.mp3
TONE_ID_2 = 2, // 002_network_fail.mp3
...
};
#endif
tone.bin
二进制打包文件,包含所有音频数据,需要烧录到设备的 Flash 中。
代码使用示例
在代码中通过 app_tone_get_url() 函数获取本地音频 URL:
#include "app_tone.h"
#include "ring/tone.h"
// 初始化音频系统
app_tone_default_init();
// 获取音频 URL
char *url = app_tone_get_url(TONE_ID_0);
// 使用 URL 播放音频
// ...
更多 API 说明请参考 components/app_player/tone/app_tone.h。
配置说明
工具的配置文件为 config.sh,可以配置:
工具路径配置
FFMPEG_EXE- FFmpeg 工具路径(默认:cmd/ffmpeg-64)TONETOOL_EXE- 音频打包工具路径(默认:cmd/tone_tool)ID3TAG_EXE- ID3 标签移除工具(默认:id3v2,需安装)
静音裁剪配置
MUTE_THRESHOLD- 静音检测阈值(默认:-50dB)MUTE_SAVE_PREFIX_TIME- 音频开头保留的静音时长(默认:0.01秒)MUTE_SAVE_SUFFIX_TIME- 音频结尾保留的静音时长(默认:0.01秒)MUTE_AUDIO_RATE- 裁剪后的音频码率(默认:24k)
输出路径配置
PACK_TONE_OUT_BINARY- 二进制文件输出路径(默认为空,生成在 ring 目录)PACK_TONE_OUT_HEADER- 头文件输出路径(默认为空,生成在 ring 目录)
环境依赖
Linux 系统(x86-64 架构)
id3v2工具(用于移除 MP3 的 ID3 标签)
安装依赖:
sudo apt-get install id3v2
工作流程
将音频文件复制到处理
使用 FFmpeg 裁剪音频首尾静音
转换音频格式为 16kHz, 单声道, MP3
移除 MP3 的 ID3 标签
使用 tone_tool 打包所有音频为 tone.bin
生成包含音频 ID 枚举的 tone.h 头文件