XTTS 算法示例
源码位置: samples/algorithms/xtts 查看源码
功能说明
本示例演示 ARCS 双核架构下 XTTS 的完整调用链路。CP 侧 sample 通过 acomp_xtts 向 AP 侧算法服务发送文本合成请求,AP 侧完成资源加载与语音合成后,将 24kHz/16bit/单声道 PCM 数据通过流通道回传给 CP 侧,最终由 CP 侧本地 audio0 设备播放。
本示例同时覆盖以下关键能力:
CP 侧 XTTS 控制命令下发
AP/CP 间 IPC 与 PCM stream 回传
XTTS Flash/eMMC 资源布局与烧录
AP 侧运行时资源占用评估
硬件连接
无需额外连接 AP/CP,两核均运行在同一颗芯片内部
audio0:用于播放 AP 回传的 PCM 数据,请按开发板默认音频输出路径连接耳机、喇叭或功放sdmmc0:用于访问 eMMC/SD 存储上的algo_emmc.bin资源镜像调试串口:默认查看 AP、CP 两侧日志
示例内容
CP 侧初始化
ic_messageCP 侧获取
sdmmc0并执行lisa_sdmmc_probe(),确保后续disk_mem可正常访问 eMMC 资源CP 侧启动
disk_mem服务、acomp框架和本地音频播放设备CP 侧调用
acomp_xtts_do_prepare(),将 XTTS 资源描述发送到 AP 侧AP 侧 XTTS 服务根据资源描述从 Flash/eMMC 加载前端词典、后端音色和 NHV 数据
CP 侧设置速度、音量、发音人,并调用
acomp_xtts_synth_text()发起文本合成AP 侧完成合成后持续回传 PCM 数据,CP 侧实时取流并播放
AP/CP 分工
核心 |
主要职责 |
|---|---|
AP 侧 |
运行 XTTS 算法服务、加载 Flash/eMMC 模型资源、执行文本合成、回传 PCM stream |
CP 侧 |
初始化 |
AP 侧配套说明
配套 AP 固件镜像为
res/ap.binAP 侧 XTTS 服务负责模块为
xtts/xtts_algo如需联调 AP 侧源码,请参考配套
remote-ap工程中的acomp/xtts/xtts.c与acomp/xtts/xtts_algo.c
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在 SDK 根目录执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
本示例需要同时准备 Boot、AP 固件、Flash 算法资源、CP 固件以及 eMMC 资源镜像。请按下表地址烧录:
镜像 |
介质 |
烧录地址 |
说明 |
|---|---|---|---|
|
Flash |
|
Boot 固件 |
|
Flash |
|
AP 固件 |
|
Flash |
|
Flash 常驻算法资源 |
|
Flash |
|
本 sample 生成的 CP 固件 |
|
eMMC |
|
eMMC 资源镜像,地址为基于 |
地址信息与 res_info.md 保持一致。
烧录顺序建议
烧录
boot.bin烧录
ap.bin烧录
algo.bin烧录
arcs.bin烧录
algo_emmc.bin
预期输出
CP 侧日志
I/main CP=======! Hard ID: 1
I/main ic_message_init done!
I/main sdmmc probe success
I/main disk_mem_urpc_init done!
I/xtts_res prepare ret:0
I/xtts_res start ret:0
I/app_xtts xtts pcm begin
I/app_xtts xtts pcm end
I/app_xtts xtts sample finished: 0
AP 侧日志
AP Hard ID: 0
boot cp from address: 0x308d0000
I/xtts xtts_prepare enter
I/xtts_algo xtts_lib_initialize: role=0
I/xtts_algo loading REAR from eMMC ...
I/xtts_algo loading REAR_NHV from eMMC ...
I/xtts_algo synthesis done, pcm_count=...
核心 API
API |
说明 |
|---|---|
|
获取 SDMMC 设备实例 |
|
初始化 |
|
启动 CP 侧 |
|
初始化 XTTS、建立 PCM RX 通道并同步资源描述 |
|
设置合成语速 |
|
设置合成音量 |
|
设置发音人 |
|
下发待合成文本 |
|
获取 AP 回传的 PCM 数据 |
|
释放已消费的 PCM 缓冲 |
功能详解
XTTS 资源布局
本示例使用两类 XTTS 资源:
Flash 常驻资源:由
algo.bin提供,随系统镜像烧录到 FlasheMMC 大资源:由
algo_emmc.bin提供,按固定偏移从 eMMC 按需读取
XTTS 当前使用的 eMMC 资源如下:
资源 |
偏移地址 |
大小(字节) |
|---|---|---|
|
|
3082688 |
|
|
3166858 |
|
|
2470275 |
|
|
7791842 |
|
|
4273824 |
|
|
284992 |
XTTS 当前使用的 eMMC 资源总量为 21070479 字节,约 20.10 MiB。
AP 侧算法资源占用
AP 侧 XTTS 算法在运行时主要占用 PSRAM。配套 AP 工程中的关键配置和计算如下:
项目 |
大小(字节) |
说明 |
|---|---|---|
|
8349696 |
AP 侧总 PSRAM heap |
|
7618560 |
AP 侧算法资源缓冲池上限 |
|
1843200 |
XTTS 内部 heap |
|
4274176 |
后端音色资源运行时拷贝 |
|
285184 |
NHV 资源运行时拷贝 |
保护余量 |
1024 |
固定保留空间 |
XTTS 工作缓冲峰值 |
6403584 |
|
eMMC 读取缓存 |
204800 |
|
XTTS 峰值占用 |
6608384 |
工作缓冲峰值 + eMMC 读取缓存 |
按当前配置,AP 侧 XTTS 峰值占用低于 CONFIG_ALGO_RESOURCE_PSRAM_BUFFER,仍保留约 1010176 字节缓冲余量。
镜像文件占用
res/ 目录下当前配套镜像大小如下:
文件 |
大小(字节) |
说明 |
|---|---|---|
|
136780 |
Boot 固件 |
|
1216864 |
AP 固件 |
|
4860443 |
Flash 算法资源 |
|
214958080 |
eMMC 资源镜像 |
关键代码
CP 侧启动顺序
ic_message_init();
sdmmc = lisa_device_get("sdmmc0");
ret = lisa_sdmmc_probe(sdmmc);
disk_mem_urpc_init();
acomp_init();
app_xtts_init();
XTTS 合成流程
xtts_audio_out_init();
acomp_xtts_do_prepare(xtts_event_handler, NULL);
acomp_xtts_set_speed(50);
acomp_xtts_set_volume(50);
acomp_xtts_set_role(0);
acomp_xtts_synth_text(text, strlen(text));
PCM 拉流播放
buffer = acomp_xtts_stream_rx_buffer_get(0, &len, &desc_idx);
if (buffer != NULL && len > 0) {
xtts_audio_out_write(buffer, len);
acomp_xtts_stream_rx_buffer_release(0, desc_idx, len, buffer);
}
配置说明
本示例的关键配置位于 prj.conf:
配置项 |
说明 |
|---|---|
|
编入 |
|
开启 |
|
在 CP 侧启用 |
|
开启磁盘驱动与 SDMMC 后端 |
|
开启 XTTS |
|
固定 XTTS eMMC 资源地址和大小 |
|
不生成 AP 启动 CP 的 boot 合并镜像 |
注意事项
algo_emmc.bin必须正确烧录到 eMMC;若未烧录或内容不匹配,XTTS 会在 AP 侧资源加载阶段卡住或失败disk_mem访问 eMMC 之前,CP 侧必须先完成lisa_sdmmc_probe();否则会出现Disk device not initialized本 sample 当前只编译 CP 固件,AP 侧默认使用
res/ap.binAP 和 CP 固件、
algo.bin、algo_emmc.bin需要来自同一套资源版本,避免地址、大小或模型内容不匹配默认文本为英文句子,默认发音人为
role=0,默认语速和音量均为50CP 侧等待 XTTS 完成的超时时间为
120000 ms,便于区分“资源未准备好”和“算法正在执行”
相关文档
res_info.md:镜像烧录地址说明
app_xtts.c:CP 侧 XTTS 控制逻辑
main.c:CP 侧启动与
sdmmc0/disk_mem初始化入口