跳转到内容

语音合成(本地引擎)

TomoriBot 把语音当作一种自定义端点功能来处理。本地引擎在 bot 之外以 HTTP 服务器的方式运行,并实现 POST /synthesize;克隆类引擎会收到文本以及已配置的参考音频样本,而支持 VoiceDesign 的引擎还能收到自然语言指令。

可用引擎

设置流程

  1. 从上面的卡片里挑一个引擎,按 servers/tts/ 里的说明把它的封装程序搭起来。
  2. /providers 里选择添加新自定义端点,并把 API 兼容性设为 tts-clone
  3. 选中已保存的端点,用它的模型下拉菜单添加语音合成模型、语音来源模式与脚本标记风格。
  4. 打开 /config > 模型 > 切换模型,选中已注册的语音合成模型。

人格语音流程

对克隆类引擎,每个人格都要上传并指定一个语音样本:

  1. 准备一段干净的音轨,10 到 20 秒,只有一个人说话,没有背景音乐。
  2. 打开 /config,进入模型 > TTS 参数与语音,上传样本。音频格式不限,TomoriBot 会把它转成单声道 WAV。
  3. 如果引擎用得上参考文本,就再提供一份对应的文本。Fish S2 Pro 会把保存的参考文本一起放进克隆请求,VoxCPM2 则用它做保真度更高的 Ultimate Cloning。
  4. 打开 /config,进入人格 > 语音,然后选择人格与语音样本。

对 Qwen3-TTS、MOSS-VoiceGenerator、IrodoriTTS 或 VoxCPM2 的 VoiceDesign,可以跳过音频样本,直接在 /config 的人格 > 语音里为这个人格保存一段自然语言的声音描述。CosyVoice 3 使用带参考样本的克隆模式,并可通过 voice_instructions 接受一次性的表达方式指令。

用 ElevenLabs 的话,在 /providers 里选择添加新提供方ElevenLabs,它会一并注册语音与转写端点。

合成之前,TomoriBot 会从生成的语音脚本里去掉 :pepega:<:pepega:123456789012345678> 这类 Discord 自定义 emoji 写法。除非语音端点使用 emoji 标记(这是给 IrodoriTTS 用的),否则 Unicode emoji 也会被去掉。对 Chatterbox Turbo、Fish S2 Pro 这类端点,当它们的脚本标记风格设为 Bracket Tags 时,方括号标签会被保留。

VoxCPM2 使用 Plain 脚本标记风格。它的语音设计与说话风格控制通过 TomoriBot 的 instruct 字段传递,再由 VoxCPM2 的封装程序转换成模型原生的、用圆括号包起来的自然语言控制语法。

CosyVoice 3 也使用 Plain 脚本标记风格。它把带参考文本的参考音频映射到零样本克隆,把不带参考文本的参考音频映射到跨语言克隆,并把 voice_instructions 映射到自身的指令条件路径。行内的方括号标签会被去掉,因为 CosyVoice 的指令作用于整段话。

引擎对比

想查看并排的实测延迟基准、音频样本播放,以及对比所有受支持边车(sidecar)的详细功能矩阵,请看 TTS 引擎对比