跳到正文

sherpa-tts-server (Rust) ​

基于 sherpa-onnx SDK 的现代化纯 Rust HTTP TTS 服务,与原有 C++ 服务架构及 HTTP 契约完全对齐。 支持普通 WAV 合成与实时流式播放(原生 PCM16 裸流与 MP3 流)。普通链路使用 POST /tts 并从 /wav/* 获取音频;流式链路使用 POST /tts-stream 创建播放 URL,支持原生 HTTP Chunked PCM16 裸流(format: "pcm",由 FreeSWITCH mod_audio_fork 驱动,零编解码与极速起播)或 MP3 流(由 FreeSWITCH mod_shout 拉取 audio/mpeg)。

特性亮点 ​

  • 高性能异步架构:基于 Tokio 与 Axum 0.8 构建纯异步 HTTP 服务,零阻塞 I/O。
  • 线程池隔离与背压:固定大小 OfflineTtsPool 管理 C 绑定的 sherpa-onnx 模型实例,队列打满时 503 快速失败。
  • 并发请求去重(Inflight Deduplication):基于 tokio::sync::broadcast 合并同文本/音色/语速并发请求,避免重复推理。
  • 带活跃读租约(ReadLease)保护的 LRU 缓存:保护正在推流或下载的文件不被淘汰删除。
  • 原生 HTTP Chunked PCM16 与 MP3 流式双驱动:支持 format: "pcm" 输出裸 PCM16 流(配合 audio_fork:// 消除 ffmpeg 转码延迟,首包延迟再降 200~300ms);实时 MP3 流式管道对齐 FreeSWITCH mod_shout 混音时钟(起播预缓冲 Stream Prebuffering),消除首包空音打断。

目录结构 ​

text
sherpa-tts-server/
├── src/                    # Rust 源码 (cache, config, ffmpeg, http, streaming, tts, types)
├── config.toml             # 运行时配置
├── scripts/                # 测试与联调客户端脚本
│   ├── request-tts.ts      # 普通 TTS 请求测试客户端
│   └── request-tts-stream.ts # 流式 TTS 压测与生命周期回归脚本
├── run-server.ts           # 本地自包含调试启动入口
├── build.ps1 / build.sh    # Windows (PowerShell 7) / Linux 构建脚本
└── dist/                   # 自包含交付目录 (win_x64 / linux_x64)

构建 ​

Windows x64 (PowerShell 7) ​

powershell
pwsh .\build.ps1

脚本将自动执行 cargo build --release,并将二进制 sherpa_tts_server.exe、config.toml 以及 sherpa-onnx-c-api.dll、sherpa-onnx-cxx-api.dll、onnxruntime.dll 等依赖动态库完整装配至 dist/win_x64/。

Linux x64 ​

bash
./build.sh

运行 ​

本地启动 ​

powershell
bun run run-server.ts

或直接进入产物目录运行:

powershell
cd dist\win_x64
.\sherpa_tts_server.exe

服务默认读取工作目录下的 config.toml,也可通过 sherpa_tts_server.exe <config_path> 显式指定。

验证 ​

1. 健康检查 ​

bash
curl http://127.0.0.1:9080/health

2. 同步合成测试 ​

powershell
bun scripts/request-tts.ts "测试语音合成"

3. 流式 MP3 压测 ​

powershell
bun scripts/request-tts-stream.ts --base-url http://127.0.0.1:9080 --parallel 5

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。