
sherpa-onnx 离线语音合成10 行代码生成自然语音一套代码跑遍六大平台【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnxsherpa-onnx 是基于 ONNX Runtime 的离线语音工具链其中 TTS文本转语音部分不需要联网把文本变成可播放的 wav 音频。它用同一套 C 核心对外提供 Python、Java、Swift、Go 等 12 种语言接口预构建示例覆盖了 Android、iOS、HarmonyOS、Windows、macOS、Linux 六类系统还能在 RK NPU、Ascend NPU 等嵌入式硬件上运行。它能帮你解决什么调用云端 TTS 接口的应用一断网或一超流量朗读功能就直接失效而 sherpa-onnx 把模型放在本地全程不依赖网络也省掉按量计费。同一个项目要同时交付手机和桌面端时通常要为每个平台对接不同的 TTS SDK行为还互相不一致这里所有平台共用同一个推理内核只换语言绑定合成结果各端一致。目标设备是树莓派、RK3588、RISC-V 这类资源受限的机器时商业 TTS 服务基本覆盖不到它原生支持 arm32/arm64/x86/RISC-V并提供多品牌 NPU 加速路径。和浏览器内置 SpeechSynthesis或单个 Python 模型脚本这类方案相比差异点在于它同时交付推理库、模型矩阵和全平台示例工程选型的重点从能不能跑变成选哪个模型。5 分钟跑通第一个 Demo环境准备克隆仓库并安装 Python 包git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx pip install sherpa-onnx下载一个约 12MB 的 Piper 英语轻量模型cd sherpa-onnx curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-amy-low.tar.bz2 tar xf vits-piper-en_US-amy-low.tar.bz2最小可运行代码仓库里可直接跑 python-api-examples/offline-tts.py命令行参数一一对应下面这些配置项import sherpa_onnx, soundfile as sf config sherpa_onnx.OfflineTtsConfig( modelsherpa_onnx.OfflineTtsModelConfig( vitssherpa_onnx.OfflineTtsVitsModelConfig( model./vits-piper-en_US-amy-low/en_US-amy-low.onnx, tokens./vits-piper-en_US-amy-low/tokens.txt, data_dir./vits-piper-en_US-amy-low/espeak-ng-data, # espeak-ng 发音字典 ) ), num_threads2, # 推理线程数provider 默认 cpu也支持 cuda/coreml ) tts sherpa_onnx.OfflineTts(config) audio tts.generate(Hello, this is sherpa-onnx., sherpa_onnx.GenerationConfig(speed1.0)) # speed 越大语速越快 sf.write(out.wav, audio.samples, audio.sample_rate) print(len(audio.samples) / audio.sample_rate) # 约 3~4 秒音频预期输出终端打印 Saved to out.wav 及 Elapsed seconds、Audio duration、RTF 三行指标生成的 wav 用任意播放器打开即可听到女声朗读。下面这张图是官方 Web 端示例的运行界面音频在浏览器里本地合成浏览器端本地合成无需后端核心概念速查参数作用推荐值/范围sid说话人 ID只用于多说话人模型单说话人模型忽略按模型文档选如 Kokoro 多语言版可用 18speed语速倍率越大越快0.8~1.2超出区间易失真num_threads神经网络推理线程数移动端 1~2桌面 2~4provider推理后端cpu默认/ cuda / coremlmax_num_sentences单批处理的句子数上限防长文本 OOM默认 1-1 表示整段一批最容易被忽略的是max_num_sentences输入长文本时默认值 1 会把文本拆句分批推理这是防 OOM 的保护机制不是性能瓶颈。源码注释明确说明在 CPU 上小值并不比大值更慢所以长文本场景保持默认 1 即可不必调大。多端部署速查平台入口路径/目录集成方式注意事项Python跨 Win/macOS/Linuxpython-api-examples/offline-tts.pypip install sherpa-onnx调OfflineTts先跑config.validate()校验路径Androidandroid/SherpaOnnxTts/Kotlin 仓库自带 JNI so模型放 assets 或 assets 目录外部别打进 dexiOS / macOSios-swiftui/SherpaOnnxTts/SwiftUI 工程 Swift 接口用 Package.swift 构建 SwiftPM 依赖C APIWin/Linux/macOS/嵌入式c-api-examples/offline-tts-c-api.c链接 C 库Windows 侧另有 MFC 桌面示例可参考 mfc-examples/Node.js / 浏览器nodejs-examples/test-offline-tts-vits-en.js、wasm/npm 包 / WebAssemblyWASM 版模型首次加载慢注意内存上限Flutter / Tauriflutter-examples/tts/、tauri-examples/跨端插件换模型后要重跑资产列表脚本Android 端预构建 APK 可直接安装体验源码在 android/SherpaOnnxTts/Android 示例应用输入文本、选择模型、本地合成macOS 端是原生窗口应用支持 arm64 与 x86_64macOS 端合成效果Windows 与 UbuntuLinux各有一个桌面示例同一套模型文件可复用Windows 端合成界面Ubuntu 端合成界面选平台时的优先级建议验证模型效果先用 Python 脚本最快需要同时交付移动端和桌面端就选 Flutter 示例工程一套 Dart 代码多端复用要嵌入既有产品再切对应语言的 APIC/C/Java/Swift/Go。从 Demo 到生产三个关键升级升级 1模型选型策略。判断依据只有一条目标设备的内存和延迟预算。预算紧张1GB 可用内存、要 500ms 内出声选 Kitten Nano fp16 这类量化小模型中英文混排场景选 Kokoro 多语言版python-api-examples/offline-tts.py 的 Example 7 参数就是现成配置追求中文音质选 Matcha 或 VITS 中文模型。完整模型清单在仓库 TTS 模型发布页注意 Kokoro 有纯英语版和多语言版之分选错会读不了另一种语言。# 按场景选模型文件配置结构不变只换 model 字段 models { mobile: kitten-nano-en-v0_1-fp16/model.fp16.onnx, # 轻量量化 mix-zh-en: kokoro-multi-lang-v1_0/model.onnx, # 中英混读 zh-hq: matcha-icefall-zh-baker/model-steps-3.onnx, # 中文高音质 }升级 2性能调优。用 RTF推理耗时 / 音频时长作为验收指标生产上要求 RTF 1。移动端固定 1~2 线程避免抢核桌面端 2~4 线程长文本保持max_num_sentences1分批单批峰值内存可控制在几十 MB 量级。模型只加载一次并复用OfflineTts实例重复 generate 不要再重建配置。def tune(device): # 按设备类型给默认值运行时用实测 RTF 覆盖 if device mobile: return dict(num_threads1, max_num_sentences1) # 省内存防抢占 return dict(num_threads4, max_num_sentences1) # 桌面端升级 3错误处理与降级。生产环境三个高频异常一是模型文件缺失或路径不对OfflineTts(config)构造直接抛异常应在启动阶段加载并校验失败就提示用户下载模型二是长文本导致 OOM按句分批并捕获异常三是合成失败本身generate返回len(audio.samples) 0表示出错仓库示例就是这么判断的此时降级到系统自带 TTS 而不是让界面卡死。try: audio tts.generate(text, gen_config) if len(audio.samples) 0: raise RuntimeError(empty audio) except Exception: system_speak(text) # 降级到 OS 自带 TTS保证朗读功能不中断高频踩坑排查Q合成出的 wav 是 0 秒或空文件排查打开debug1看 stderr 报错确认 tokens.txt / lexicon.txt 路径存在确认输入文本语言与模型匹配。 根因参数缺失或模型语言不匹配时generate 不抛异常而是返回空 samples。Q长文本合成时进程被 OOM Killer 杀掉排查把max_num_sentences从 -1 改回默认 1检查是否整篇文档一次性传入。 根因整段文本进单批推理中间张量内存随文本长度线性增长。QKokoro 模型读中文没有声音排查确认下的是kokoro-multi-lang而不是kokoro-en检查lexicon是否同时配了 us-en 和 zh 两个文件。 根因kokoro-en版本只支持英语中文需要多语言版。QRTF 明显大于 1合成比实时还慢排查num_threads降到 2 以内开太多线程在核少的机器上反而更慢换 fp16/int8 量化模型NPU 设备确认走对加速路径。 根因模型参数量超出该 CPU 的单核吞吐能力线程数未适配。还能往哪走音色克隆python-api-examples/zipvoice-tts.py 和 python-api-examples/pocket-tts.py 展示了给一段参考音频就能复现该音色的零样本克隆用法客服、有声书场景可以直接用。跨端工程化flutter-examples/tts/ 下lib/model_config.dart给了多模型切换的写法配合generate-asset-list.py可以把任意 TTS 模型打进六个平台的安装包。离线语音闭环TTS 之外VAD 端点检测、ASR 识别、声纹识别在同一套 API 里都有python-api-examples/vad-with-non-streaming-asr.py 是听音—识别半边接上 TTS 就是一个完全离线的语音助手。模型文件选哪个拿不准先去仓库 TTS 模型发布页的试听空间逐个试听再回 python-api-examples/offline-tts.py 换参数验证比看参数表可靠。【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考