ekwek1/soprano

GitHub: ekwek1/soprano

Soprano 是一款 80M 参数的超轻量级端侧文本转语音模型,以极低延迟和极小内存占用实现高保真英语语音合成。

Stars: 1341 | Forks: 115

# Soprano:即时、超逼真的文本转语音 [![Alt Text](https://img.shields.io/badge/HuggingFace-Model-orange?logo=huggingface)](https://huggingface.co/ekwek/Soprano-1.1-80M) [![Alt Text](https://img.shields.io/badge/HuggingFace-Demo-yellow?logo=huggingface)](https://huggingface.co/spaces/ekwek/Soprano-TTS) soprano-github
### 📰 最新消息 **2026.01.14 - [Soprano-1.1-80M](https://huggingface.co/ekwek/Soprano-1.1-80M) 已发布!幻觉减少了 95%,并且相比 Soprano-80M 偏好率提升了 63%。** 2026.01.13 - [Soprano-Factory](https://github.com/ekwek1/soprano-factory) 已发布!您现在可以训练/微调您自己的 Soprano 模型。 2025.12.22 - Soprano-80M 已发布![模型](https://huggingface.co/ekwek/Soprano-80M) | [演示](https://huggingface.co/spaces/ekwek/Soprano-TTS) ## 概述 **Soprano** 是一款超轻量级的端侧文本转语音 (TTS) 模型,旨在以前所未有的速度实现富有表现力、高保真的语音合成。Soprano 在设计时具备以下特性: - 在 CPU 上实现高达 **20 倍** 的实时生成速度,在 GPU 上实现高达 **2000 倍** 的实时生成速度 - **无损流式传输**,在 CPU 上的延迟 **<250 毫秒**,在 GPU 上的延迟 **<15 毫秒** - 采用紧凑的 80M 参数架构,内存占用 **<1 GB** - 支持自动文本切分,实现**无限长度生成** - 具备极高的表现力,可生成 **32kHz** 的清晰音频 - 广泛支持在 Windows、Linux 和 Mac 上的 CUDA、CPU 和 MPS 设备 - 支持 OpenAI 兼容的 endpoint、ONNX、WebUI、CLI 和 ComfyUI,实现简单且可用于生产的推理 https://github.com/user-attachments/assets/525cf529-e79e-4368-809f-6be620852826 ## 目录 - [安装](#installation) - [用法](#usage) - [WebUI](#webui) - [CLI](#cli) - [OpenAI 兼容的 endpoint](#openai-compatible-endpoint) - [Python 脚本](#python-script) - [使用技巧](#usage-tips) - [路线图](#roadmap) ## 安装 ### 通过 wheel 安装 (CUDA) ``` pip install soprano-tts[lmdeploy] ``` ### 通过 wheel 安装 (CPU/MPS) ``` pip install soprano-tts ``` 为了获取最新的功能,您可以选择从源码安装。 ### 从源码安装 (CUDA) ``` git clone https://github.com/ekwek1/soprano.git cd soprano pip install -e .[lmdeploy] ``` ### 从源码安装 (CPU/MPS) ``` git clone https://github.com/ekwek1/soprano.git cd soprano pip install -e . ``` ## 用法 ### WebUI 启动 WebUI: ``` soprano-webui # hosted on http://127.0.0.1:7860 by default ``` ### CLI ``` soprano "Soprano is an extremely lightweight text to speech model." optional arguments: --output, -o Output audio file path (non-streaming only). Defaults to 'output.wav' --model-path, -m Path to local model directory (optional) --device, -d Device to use for inference. Supported: auto, cuda, cpu, mps. Defaults to 'auto' --backend, -b Backend to use for inference. Supported: auto, transformers, lmdeploy. Defaults to 'auto' --cache-size, -c Cache size in MB (for lmdeploy backend). Defaults to 100 --decoder-batch-size, -bs Decoder batch size. Defaults to 1 --streaming, -s Enable streaming playback to speakers ``` ### OpenAI 兼容的 endpoint 启动服务器: ``` uvicorn soprano.server:app --host 0.0.0.0 --port 8000 ``` 像这样使用 endpoint: ``` curl http://localhost:8000/v1/audio/speech \ -H "Content-Type: application/json" \ -d '{ "input": "Soprano is an extremely lightweight text to speech model." }' \ --output speech.wav ``` ### Python 脚本 ``` from soprano import SopranoTTS model = SopranoTTS(backend='auto', device='auto', cache_size_mb=100, decoder_batch_size=1) ``` ``` # 基础推理 out = model.infer("Soprano is an extremely lightweight text to speech model.") # can achieve 2000x real-time with sufficiently long input! # 将输出保存到文件 out = model.infer("Soprano is an extremely lightweight text to speech model.", "out.wav") # 自定义 sampling 参数 out = model.infer( "Soprano is an extremely lightweight text to speech model.", temperature=0.3, top_p=0.95, repetition_penalty=1.2, ) # 批量推理 out = model.infer_batch(["Soprano is an extremely lightweight text to speech model."] * 10) # can achieve 2000x real-time with sufficiently large input size! # 将批量输出保存到目录 out = model.infer_batch(["Soprano is an extremely lightweight text to speech model."] * 10, "/dir") # 流式推理 from soprano.utils.streaming import play_stream stream = model.infer_stream("Soprano is an extremely lightweight text to speech model.", chunk_size=1) play_stream(stream) # plays audio with <15 ms latency! ``` ### 第三方工具 #### ONNX https://github.com/KevinAHM/soprano-web-onnx #### ComfyUI 节点 https://github.com/jo-nike/ComfyUI-SopranoTTS https://github.com/SanDiegoDude/ComfyUI-Soprano-TTS ## 使用技巧: * 在引用时,请使用双引号而不是单引号。 * 当每个句子的长度在 2 到 30 秒之间时,Soprano 的效果最好。 * 尽管 Soprano 能够识别数字和某些特殊字符,但偶尔也会出现发音错误。将这些内容转换为它们的发音形式(音标)可以获得最佳效果。(例如 1+1 -> one plus one 等) * 如果 Soprano 生成了不满意的结果,您可以轻松地重新生成,以获得新的、可能更好的结果。您也可以更改采样设置以获取更多样化的结果。 ## 路线图 * [x] 添加模型和推理代码 * [x] 无缝流式传输 * [x] 批量推理 * [x] 命令行界面 (CLI) * [x] CPU 支持 * [x] 服务器 / API 推理 * [ ] ROCm 支持(参见 [#29](/../../issues/29)) * [ ] 额外的 LLM 后端 * [ ] 语音克隆 * [ ] 多语言支持 ## 局限性 Soprano 目前仅支持英语,且不支持语音克隆。此外,Soprano 仅使用了 1,000 小时的音频进行训练(比其他 TTS 模型少约 100 倍),因此可能会出现生僻字发音错误的情况。随着 Soprano 在更多数据上进行训练,预计这种情况会逐渐减少。 ## 许可证 本项目基于 **Apache-2.0** 许可证授权。有关详细信息,请参阅 `LICENSE`。
标签:CNCF毕业项目, 人工智能, 凭据扫描, 大模型推理, 文本转语音, 用户模式Hook绕过, 端侧推理, 系统调用监控, 语音合成, 逆向工具