【开源项目】用 Rust 重构中文 TTS!kokoroi-rs 高性能语音合成引擎介绍

用 Rust 重构中文 TTS!kokoroi-rs 高性能语音合成引擎介绍

摘要 :kokoroi-rs 是基于 Rust 和 ONNX Runtime 重构的高性能中文 TTS 引擎,支持 CLI 和 HTTP API 两种使用方式,提供 50+ 种多语言发音人,实现零依赖静态编译部署,实时率可达 5-10 倍,是生产级语音合成场景的理想选择。

关键词:Rust TTS、中文语音合成、Kokoro、ONNX Runtime、高性能语音引擎、静态编译、零依赖部署、流式语音合成

写在前面

如果你关注过开源语音合成(TTS)领域,大概对 Kokoro 这个名字不陌生。作为一个轻量级、多语言的 TTS 模型,Kokoro 凭借 82M 参数量和 Apache-2.0 开源协议,在社区里收获了不少关注。不过,Kokoro 的原生实现主要是 Python 生态,依赖 PyTorch 和大量的 Python 运行时------这在生产环境中往往会带来部署体积大、启动慢、并发能力受限等问题。

那么问题来了:能不能把 Kokoro 搬到 Rust 里,跑出更高的效率?

答案就是今天要聊的主角------kokoroi-rs

kokoroi-rs 是 Kokoro TTS 的 Rust 实现,基于 ONNX Runtime 进行推理,提供 CLI 工具和 HTTP API 服务两种使用方式。

简单来说,它把 Kokoro 的 Python 实现用 Rust 重写了一遍,并且通过 ONNX 格式的模型文件来驱动推理。这样做的好处非常直接:更小的部署体积、更快的启动速度、更高的并发吞吐------对于想把 TTS 能力集成到后端服务里的开发者来说,这些优势几乎都是刚需。

为什么是 Rust + ONNX?

在深入介绍功能之前,先聊聊技术选型背后的逻辑。

Kokoro 原生是 Python + PyTorch 的实现,而 kokoroi-rs 选择了 Rust + ONNX Runtime 的组合。这个选择带来了几个核心优势:

  • 零运行时依赖:Rust 编译成静态二进制,不需要装 Python 环境、不需要装 PyTorch、不需要担心版本冲突。尤其是 Linux 下采用 musl 全静态编译,拷过去就能跑。
  • 高性能推理:ONNX Runtime 本身针对 CPU/GPU 推理做了大量优化,配合 Rust 的多线程流水线架构,实时率可以达到 5-10 倍。
  • 内存安全:Rust 的所有权模型保证了在多线程场景下不会出现数据竞争,这对于需要并行处理多个 TTS 请求的服务端来说尤为重要。

核心功能一览

kokoroi-rs 目前提供了两种主要的使用方式:CLI 命令行工具HTTP API 服务

CLI 工具:简单直接的语音合成

如果你只是想快速把一段文字转成语音,CLI 工具是最直接的方式:

bash 复制代码
# 基本用法
./koko --text "你好,欢迎使用 Kokoro 语音合成系统。" -o output.wav

# 从文件读取文本
./koko -i input.txt -o output.wav

# 指定发音人风格
./koko --text "今天天气真好" --style zf_xiaobei -o output.wav

# 调整语速和线程数
./koko --text "大家好" --speed 1.2 --threads 4 -o output.wav

# 直接播放音频(需要 aplay 或 ffplay)
./koko --text "播放测试" --play

对于批量处理、脚本集成等场景,CLI 工具已经足够好用。

HTTP API 服务:为生产环境而生

对于需要把 TTS 能力集成到 Web 应用、小程序、智能助手等场景的开发者来说,HTTP API 服务才是重头戏。

启动服务只需要一行命令:

bash 复制代码
./kokoros-server

默认监听 0.0.0.0:3000,打开浏览器就能看到 Web 演示界面。

服务提供了几个核心 API 端点:

方法 路径 说明
GET / Web 演示页面
GET /health 健康检查
GET /voices 获取所有可用发音人
POST /tts 文本转语音(返回 WAV Base64)
POST /tts/stream 流式文本转语音(SSE)

其中 SSE 流式接口是一个很有意思的设计------音频可以边生成边推送给客户端,特别适合 Web 端低延迟交互场景,比如 AI 对话助手的实时语音回复。

系统架构

下面是 kokoroi-rs 的整体架构图:
flowchart TB subgraph Input"输入层" CLI"CLI 命令行" HTTP"HTTP API 服务" SSE"SSE 流式接口" end subgraph Core"核心处理层" direction TB Router"路由分发" TTS"TTS 引擎核心" G2P"G2P 字素转音素" Splitter"智能文本分片" end subgraph Inference"推理层" ORT"ONNX Runtime" Model"Kokoro ONNX 模型" Voices"发音人数据" end subgraph Output"输出层" WAV"WAV 音频" Stream"流式音频" end CLI --> Router HTTP --> Router SSE --> Router Router --> TTS TTS --> G2P TTS --> Splitter TTS --> ORT ORT --> Model ORT --> Voices ORT --> WAV ORT --> Stream

整个架构分为四层:

  1. 输入层:支持 CLI、HTTP REST API 和 SSE 流式三种接入方式,覆盖从脚本调用到 Web 集成的各种场景。
  2. 核心处理层:包含路由分发、TTS 引擎、G2P(字素转音素)引擎和智能文本分片模块。其中智能分片策略基于音素限制,能在生成速度和自然度之间取得平衡。
  3. 推理层:基于 ONNX Runtime 加载 Kokoro 模型和发音人数据进行推理。多线程流水线架构支持并行生成。
  4. 输出层:支持标准 WAV 格式输出和 SSE 流式输出。

发音人支持:50+ 种选择

kokoroi-rs 继承了 Kokoro 的多语言、多风格发音人体系,总共支持 50+ 种发音人

前缀 语言 示例
zf_, zm_ 中文 zf_xiaobei, zm_yunyang
af_, am_ 英文 af_bella, am_adam
jf_, jm_ 日文 jf_alpha, jm_kumo
bf_, bm_ 英式英文 bf_alice, bm_daniel
ef_, em_ 西班牙文 ef_dora, em_alex
ff_ 法文 ff_siwis
hf_, hm_ 印地文 hf_alpha, hm_omega

中文发音人包括 zf_xiaobeizm_yunyang 等,覆盖了不同的音色风格。对于需要多语言混读的场景(比如中英混输),kokoroi-rs 内置的 G2P 引擎也能较好地处理。

部署友好:多平台静态编译

对于后端开发者来说,部署的便利性往往决定了是否愿意采用某个工具。kokoroi-rs 在这方面做得相当到位:

Linux 平台:采用 musl 全静态编译,生成的可执行文件不依赖任何外部动态库。无论是 x86_64 还是 ARM64 架构,拷过去就能直接运行。

Windows 平台 :采用 MSVC 编译,onnxruntime.dll 已打包在压缩包内,解压即用。

这意味着什么?意味着你不需要在服务器上装 Python、不需要配 PyTorch 环境、不需要担心 CUDA 版本兼容性------一个二进制文件 + 一个模型文件,就搞定了整套 TTS 服务

性能表现

根据项目文档,kokoroi-rs 的多线程流水线架构支持并行生成,实时率可达 5-10 倍。简单来说,生成 1 秒钟的音频,实际耗时只有 0.1-0.2 秒。

这个性能水平意味着:

  • 对于 Web 应用,用户几乎感觉不到等待延迟
  • 对于批量处理任务,可以大幅缩短总耗时
  • 对于流式场景,音频可以边生成边播放,体验更流畅

快速上手

1. 下载二进制文件

从项目的 Releases 页面下载对应平台的编译产物:

平台 文件
x86_64 Linux kokoro-x86_64-unknown-linux-musl.tar.gz
ARM64 Linux kokoro-aarch64-unknown-linux-musl.tar.gz
x86_64 Windows kokoro-x86_64-pc-windows-msvc.zip

2. 下载模型文件

需要准备三个文件:

  • models/kokoro-v1.0.onnx(约 80MB)
  • data/voices-v1.0.bin(约 150MB)
  • config.toml(项目根目录已提供)

模型可以从 Kokoro 官方项目下载,或者运行项目自带的 ./scripts/download_models.sh 脚本自动获取。

3. 开始使用

CLI 模式:

bash 复制代码
./koko --text "你好世界" -o output.wav

实战示例 :使用 curl 调用 HTTP API 生成语音并保存为文件。先确保 kokoros-server 已在后台运行,然后执行以下脚本:

bash 复制代码
#!/bin/bash
# 调用 /tts 接口生成语音并保存为 WAV 文件
curl -X POST http://localhost:3000/tts \
  -H "Content-Type: application/json" \
  -d '{"text": "你好,欢迎使用 kokoroi-rs 语音合成引擎。", "voice": "zf_xiaobei"}' \
  -o response.json

# 从返回的 JSON 中提取 Base64 音频数据并解码为 WAV 文件
python3 -c "
import json, base64
data = json.load(open('response.json'))
wav_bytes = base64.b64decode(data['audio'])
with open('output.wav', 'wb') as f:
    f.write(wav_bytes)
print('语音已保存为 output.wav')
"

服务模式:

bash 复制代码
./kokoros-server
# 访问 http://localhost:3000 即可体验 Web 界面

实战示例 :使用 Python requests 库调用 /tts/tts/stream 接口,展示同步和流式两种调用方式。

python 复制代码
import requests
import base64
import json

# 服务地址
BASE_URL = "http://localhost:3000"

# 1. 同步调用 /tts 接口
def tts_sync(text: str, voice: str = "zf_xiaobei", output_file: str = "sync_output.wav"):
    """调用 /tts 接口生成语音并保存为 WAV 文件"""
    resp = requests.post(
        f"{BASE_URL}/tts",
        json={"text": text, "voice": voice}
    )
    resp.raise_for_status()
    data = resp.json()
    wav_bytes = base64.b64decode(data["audio"])
    with open(output_file, "wb") as f:
        f.write(wav_bytes)
    print(f"同步合成完成,语音已保存至 {output_file}")

# 2. 流式调用 /tts/stream 接口
def tts_stream(text: str, voice: str = "zf_xiaobei", output_file: str = "stream_output.wav"):
    """通过 SSE 流式接口逐块接收音频数据并合并保存"""
    resp = requests.post(
        f"{BASE_URL}/tts/stream",
        json={"text": text, "voice": voice},
        stream=True
    )
    resp.raise_for_status()
    audio_chunks = []
    for line in resp.iter_lines():
        if line:
            decoded = line.decode("utf-8")
            if decoded.startswith("data: "):
                chunk = decoded[6:]  # 去掉 "data: " 前缀
                if chunk == "[DONE]":
                    break
                audio_chunks.append(base64.b64decode(chunk))
    with open(output_file, "wb") as f:
        for chunk in audio_chunks:
            f.write(chunk)
    print(f"流式合成完成,语音已保存至 {output_file}")

# 使用示例
if __name__ == "__main__":
    # 同步合成
    tts_sync("今天天气真好,适合出去走走。", voice="zm_yunyang")

    # 流式合成(适合实时播放场景)
    tts_stream("这是一段流式合成的语音,可以边生成边播放。", voice="zf_xiaobei")

说明

  • 同步接口 /tts 适合一次性生成完整音频,返回 Base64 编码的 WAV 数据。
  • 流式接口 /tts/stream 通过 SSE(Server-Sent Events)逐块推送音频数据,适合需要低延迟播放的场景,如 AI 对话助手的实时语音回复。
  • 运行前请确保 kokoros-server 已在 localhost:3000 启动。

谁适合关注这个项目?

  • 后端开发者:想在服务端集成轻量级 TTS 能力,又不想被 Python 生态的部署问题困扰
  • Rust 爱好者:想看看 Rust 在 AI 推理场景下的实际应用案例
  • AI 应用开发者:需要为智能助手、聊天机器人、有声内容生成等场景添加语音能力
  • 边缘计算/嵌入式开发者:需要小体积、低依赖的 TTS 解决方案

一点思考

kokoroi-rs 这个项目有意思的地方在于,它不仅仅是对 Kokoro 的简单搬运,而是用 Rust 的思维重新思考了 TTS 系统的工程实现------静态编译、零依赖部署、多线程流水线、SSE 流式输出,这些都是生产级服务才会认真考虑的问题。

当然,项目还在持续迭代中。如果你对 Rust + TTS 这个方向感兴趣,不妨去 GitHub 上看看,试试跑起来的效果,也欢迎提交 Issue 和 PR 一起参与共建。

项目地址:https://github.com/doiito/kokoroi-rs

相关推荐
GJGCY1 小时前
财务智能体落地实践:RPA、大模型与规则引擎如何构建业财自动化闭环?
经验分享·ai·自动化·财务·智能体
土星云SaturnCloud2 小时前
边缘计算驱动绿氢生产过程智能寻优:电解槽级实时优化技术解析
服务器·人工智能·ai·边缘计算
铅笔侠_小龙虾2 小时前
Rust 学习目录
开发语言·学习·rust
猫先生Mr.Mao3 小时前
具身智能之 π0.7 详解:可控提示让机器人学会组合——如何把 VLA 推向通用泛化
ai·论文解读·具身智能·vla·机器人基础模型
一颗小行星-5 小时前
我用AI“ vibe“出了一个小程序的记录和感想
ai·vibe coding
衣乌安、6 小时前
归一化与点积在 Embedding 中的作用
ai·embedding
Designerpupu8 小时前
纸巾亚马逊详情页怎么做?3 步用 GPT 生成高转化产品图片
gpt·ai·photoshop·ps·跨境电商·亚马逊·详情页
曦尧8 小时前
开源后台编程 Agent 系统 background-agents:架构拆解与落地判断
ai·自动化
铅笔侠_小龙虾9 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust