Files
arcs/arcs-sdk/tools/tone_tool/README.md
2026-08-13 16:50:52 +08:00

155 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tone 本地音频打包工具
本工具用于生成 app_player 的本地音频二进制文件,将多个音频文件打包成 `tone.bin``tone.h` 文件,供嵌入式设备使用。
## 功能说明
该工具可以:
1. 处理音频文件(裁剪静音、格式转换)
2. 将多个音频文件打包成二进制文件 `tone.bin`
3. 生成头文件 `tone.h`,包含音频 ID 枚举定义
## 音频文件要求
原始音频文件需满足以下格式要求:
- **采样率**: 16 kHz
- **位深度**: 16 bit
- **格式**: MP3 或 PCM
- **存放位置**: [ring/](ring/) 目录下
## 使用方法
### 快速使用
将符合要求的音频文件放入 [ring/](ring/) 目录,然后执行:
```shell
./run.sh
```
执行后会在 [ring/](ring/) 目录下生成:
- `tone.bin` - 音频二进制数据文件
- `tone.h` - C 头文件,包含音频 ID 定义
### 高级用法
使用 [proc.sh](proc.sh) 脚本可以进行更精细的控制:
```shell
# 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 枚举定义,示例:
```c
#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
```c
#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](../../components/app_player/tone/app_tone.h)。
## 配置说明
工具的配置文件为 [config.sh](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 标签)
安装依赖:
```shell
sudo apt-get install id3v2
```
## 工作流程
1. 将音频文件复制到处理
2. 使用 FFmpeg 裁剪音频首尾静音
3. 转换音频格式为 16kHz, 单声道, MP3
4. 移除 MP3 的 ID3 标签
5. 使用 tone_tool 打包所有音频为 tone.bin
6. 生成包含音频 ID 枚举的 tone.h 头文件
## 注意事项
- 音频文件名中的数字前缀决定了音频 ID 的顺序
- 如需支持其他平台,请从 [FFmpeg官网](https://ffbinaries.com/downloads) 下载对应平台的 FFmpeg 工具,并修改 [config.sh](config.sh) 中的 `FFMPEG_EXE` 配置
- 生成的 `tone.bin` 需要烧录到设备 Flash 的指定位置,具体地址由应用代码中的 `app_tone_init()` 参数决定