llama.cpp 发布了新构建版本,支持按名称选择 Pocket TTS 模型预置的音色。为应用添加语音合成(将文字转换为语音)功能的开发者,可在服务器端查看可选音色。转换模型时,还可通过日志检查音色信息与权重(模型学习到的数值信息)的匹配程度。

1. 按名称选择预置音色

b12061 支持的是 kyutai/pocket-tts-without-voice-cloning 权重,不具备语音克隆(模仿参考声音生成语音)功能。预设音色以处理语音提示(向模型输入参考音频)后留在模型内部的状态信息,即模型处理过程中保存的值存在。转换器这一模型格式转换工具会将其还原为可重新输入模型的表示并保存,同时排除值为 0 的语音编码器,即将语音转换为模型输入的组件。

在服务器请求的 voice 字段或命令行工具的 --tts-voice 选项中填入音色名称。这种方式不是从单独的录音中提取声音,而是选择模型自带的一种音色。向没有语音编码器的模型发送说话人参考音频(用于模仿声音的基准音频),请求会被拒绝。

2. 按音色记录转换状态差异

据发布说明,Kyutai 提供的音色状态可能与该软件包的权重使用相同提示生成的状态存在差异。意大利语、德语和西班牙语的状态在 bf16(一种降低小数精度的 16 位数值格式)的舍入误差范围内一致。而 english_2026-04 的差异为 2%,french 为 20%。法语状态的第 0 层来自其他权重。

这不是音质评分,而是所提供的音色信息与利用权重重新生成的信息之间的差异。发布说明称,参考实现(作为行为基准的程序)即使直接加载所提供的状态,听起来仍是同一种声音。

新转换器会使用恢复的输入重新运行模型,然后比较完整状态,按音色记录差异。差异超过 5% 时发出警告,并跳过与该权重完全不匹配的状态。这一处理也使 kyutai/pocket-tts 软件包能够进行转换。

3. 查询列表与处理错误名称

如果模型有预设音色,可在服务器 GET /props 响应的 voices 项中查看名称列表。

C API 新增了提供音色数量的 n_voices 和名称查询函数 mtmd_gen_audio_voice_name()。发布说明称,此次调整将音色视为音频生成模型的功能,而不再视为某个特定模型专属的功能。

向具有预设音色的模型发送不存在的名称时,服务器会将错误响应从 500 改为 400,并在响应中包含该音色名称。这一变化将原本看似服务器自身问题的失败,明确提示为请求名称的问题。没有音色列表的模型会忽略 voice 输入并发出警告。

此次还新增了默认选择。发布说明称,这类模型在没有语音提示时几乎只输出静音。因此,同时省略音色和说话人参考音频时,会选择第一个音色,并在 llama-tts 和服务器日志中记录这一选择。

4. 名称比较方式与使用变化

LFM3-Audio 聊天模板(将对话转换为模型输入格式的规则)会将音色名称转为小写后处理。音色查询也相应改为不区分大小写,使 Male 这类含大写字母的名称也能匹配对应音色。这样,即使用户填写的名称与模板处理后的名称大小写不同,也能找到同一音色。

通过列表查询和默认音色选择,用户更容易构造请求。相应地,转换过程增加了重新运行模型、比较完整状态以及按音色记录日志的工作。选择过程变得更简单,而检查权重与音色信息是否匹配的工作,则在转换阶段得到更明确的处理。

服务器集成代码值得检查针对错误音色名称的错误处理路径。同样的请求错误,如今会在 400 而非 500 响应中包含名称,因此可用于提示用户需要修改哪个名称。

b12061 支持按名称选择 Pocket TTS 的内置音色,并改进了转换日志,使用户能够查看权重与音色状态之间的差异。