5分钟上手Spark-TTS API:从本地部署到实时语音合成服务全攻略
你是否还在为语音合成API的复杂部署而烦恼?是否需要一个简单易用且功能强大的语音合成解决方案?本文将带你快速掌握Spark-TTS API的部署与使用,只需5分钟即可搭建属于自己的实时语音合成服务。读完本文,你将能够:部署Spark-TTS服务、使用Python调用API实现语音合成、自定义语音参数、构建简单的语音合成应用。
1. 项目简介
Spark-TTS是一个高效的语音合成(Text-to-Speech, TTS)推理框架,支持多种语音合成场景,包括语音克隆和语音创建。项目提供了多种调用方式,包括命令行工具、Web UI和API接口,满足不同用户的需求。
项目主要结构如下:
- API客户端:runtime/triton_trtllm/client_grpc.py(gRPC客户端)、runtime/triton_trtllm/client_http.py(HTTP客户端)
- 命令行工具:cli/inference.py
- Web界面:webui.py
- 模型代码:sparktts/models/
- 示例脚本:example/infer.sh
2. 环境准备与部署
2.1 安装依赖
首先,确保你的环境中已安装所需的依赖包。项目的依赖项列在requirements.txt中,可以使用以下命令安装:
pip install -r requirements.txt
2.2 启动服务
Spark-TTS提供了两种服务部署方式:Triton Inference Server和本地Web UI。
2.2.1 使用Triton Inference Server
Triton Inference Server是一个高性能的推理服务,支持gRPC和HTTP两种协议。项目中提供了Triton的配置文件和启动脚本,位于runtime/triton_trtllm/目录下。
使用以下命令启动Triton服务:
cd runtime/triton_trtllm && ./run.sh
2.2.2 使用Web UI
如果你需要一个简单的图形界面来测试语音合成功能,可以启动项目提供的Gradio Web界面:
python webui.py --model_dir pretrained_models/Spark-TTS-0.5B --device 0
启动后,在浏览器中访问http://localhost:7860即可打开Web界面。Web界面支持语音克隆和语音创建两种模式,用户可以上传参考音频或录制音频,输入文本后生成相应的语音。
3. API接口调用详解
Spark-TTS提供了gRPC和HTTP两种API接口,方便开发者集成到自己的应用中。
3.1 gRPC接口调用
gRPC接口适用于需要高性能、低延迟的场景。项目中提供了gRPC客户端示例代码runtime/triton_trtllm/client_grpc.py。
以下是一个简单的gRPC客户端调用示例:
import grpc
import tritonclient.grpc as grpcclient
from tritonclient.utils import np_to_triton_dtype
import numpy as np
import soundfile as sf
# 准备输入数据
waveform, sample_rate = sf.read("example/prompt_audio.wav")
reference_text = "吃燕窝就选燕之屋,本节目由26年专注高品质燕窝的燕之屋冠名播出。"
target_text = "身临其境,换新体验。塑造开源语音合成新范式,让智能语音更自然。"
# 创建输入
inputs = [
grpcclient.InferInput("reference_wav", waveform.shape, np_to_triton_dtype(waveform.dtype)),
grpcclient.InferInput("reference_text", [1, 1], "BYTES"),
grpcclient.InferInput("target_text", [1, 1], "BYTES")
]
inputs[0].set_data_from_numpy(waveform.reshape(1, -1).astype(np.float32))
inputs[1].set_data_from_numpy(np.array([[reference_text]], dtype=object))
inputs[2].set_data_from_numpy(np.array([[target_text]], dtype=object))
# 创建输出
outputs = [grpcclient.InferRequestedOutput("waveform")]
# 连接服务器并发送请求
with grpcclient.InferenceServerClient("localhost:8001") as client:
response = client.infer(model_name="spark_tts", inputs=inputs, outputs=outputs)
audio = response.as_numpy("waveform").reshape(-1)
sf.write("output.wav", audio, 16000)
3.2 HTTP接口调用
HTTP接口使用更加简单,适用于对延迟要求不高的场景。项目中提供了HTTP客户端示例代码runtime/triton_trtllm/client_http.py。
以下是一个简单的HTTP客户端调用示例:
import requests
import soundfile as sf
import numpy as np
# 准备输入数据
waveform, sample_rate = sf.read("example/prompt_audio.wav")
reference_text = "吃燕窝就选燕之屋,本节目由26年专注高品质燕窝的燕之屋冠名播出。"
target_text = "身临其境,换新体验。塑造开源语音合成新范式,让智能语音更自然。"
# 构建请求数据
data = {
"inputs": [
{
"name": "reference_wav",
"shape": waveform.reshape(1, -1).shape,
"datatype": "FP32",
"data": waveform.tolist()
},
{
"name": "reference_text",
"shape": [1, 1],
"datatype": "BYTES",
"data": [reference_text]
},
{
"name": "target_text",
"shape": [1, 1],
"datatype": "BYTES",
"data": [target_text]
}
]
}
# 发送请求
response = requests.post(
"http://localhost:8000/v2/models/spark_tts/infer",
headers={"Content-Type": "application/json"},
json=data
)
# 处理响应
result = response.json()
audio = np.array(result["outputs"][0]["data"], dtype=np.float32)
sf.write("output.wav", audio, 16000)
4. 命令行工具使用
除了API接口,Spark-TTS还提供了命令行工具cli/inference.py,方便快速测试语音合成功能。
4.1 基本用法
使用以下命令调用语音合成功能:
python cli/inference.py --model_dir pretrained_models/Spark-TTS-0.5B --text "你好,欢迎使用Spark-TTS。" --prompt_speech_path example/prompt_audio.wav --prompt_text "这是参考音频的文本。"
4.2 参数说明
命令行工具支持多种参数来自定义语音合成结果:
| 参数 | 说明 |
|---|---|
| --model_dir | 模型目录路径 |
| --text | 需要合成的文本 |
| --prompt_speech_path | 参考音频路径(用于语音克隆) |
| --prompt_text | 参考音频对应的文本 |
| --gender | 性别(male/female) |
| --pitch | 音调(very_low/low/moderate/high/very_high) |
| --speed | 语速(very_low/low/moderate/high/very_high) |
5. Web界面使用
Spark-TTS提供了基于Gradio的Web界面webui.py,方便用户通过图形界面进行语音合成操作。
5.1 启动Web界面
使用以下命令启动Web界面:
python webui.py --model_dir pretrained_models/Spark-TTS-0.5B --device 0
启动后,在浏览器中访问http://localhost:7860即可打开Web界面。
5.2 语音克隆
在Web界面的"Voice Clone"标签页中,你可以上传或录制参考音频,输入需要合成的文本,然后点击"Generate"按钮生成语音。
5.3 语音创建
在"Voice Creation"标签页中,你可以通过调整性别、音调和语速等参数来创建自定义语音。
6. 自定义语音合成应用
下面我们将通过一个简单的示例,展示如何使用Spark-TTS的API接口构建一个自定义的语音合成应用。
6.1 实时语音合成服务
以下是一个基于Flask的简单语音合成服务,它接收文本和语音参数,调用Spark-TTS API生成语音,并返回合成结果。
from flask import Flask, request, send_file
import requests
import numpy as np
import soundfile as sf
import os
from datetime import datetime
app = Flask(__name__)
SPARK_TTS_URL = "http://localhost:8000/v2/models/spark_tts/infer"
@app.route('/synthesize', methods=['POST'])
def synthesize():
data = request.json
text = data.get('text', '')
reference_text = data.get('reference_text', '')
reference_audio = data.get('reference_audio', '') # 参考音频路径
gender = data.get('gender', 'male')
pitch = data.get('pitch', 'moderate')
speed = data.get('speed', 'moderate')
# 读取参考音频
waveform, sample_rate = sf.read(reference_audio)
# 构建请求数据
request_data = {
"inputs": [
{
"name": "reference_wav",
"shape": waveform.reshape(1, -1).shape,
"datatype": "FP32",
"data": waveform.tolist()
},
{
"name": "reference_text",
"shape": [1, 1],
"datatype": "BYTES",
"data": [reference_text]
},
{
"name": "target_text",
"shape": [1, 1],
"datatype": "BYTES",
"data": [text]
}
]
}
# 调用Spark-TTS API
response = requests.post(
SPARK_TTS_URL,
headers={"Content-Type": "application/json"},
json=request_data
)
# 处理响应
result = response.json()
audio = np.array(result["outputs"][0]["data"], dtype=np.float32)
# 保存音频
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
output_path = f"output_{timestamp}.wav"
sf.write(output_path, audio, 16000)
return send_file(output_path, as_attachment=True)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
6.2 运行应用
使用以下命令运行上述应用:
python app.py
然后,你可以使用curl或其他HTTP客户端发送请求:
curl -X POST http://localhost:5000/synthesize -H "Content-Type: application/json" -d '{"text": "你好,这是一个自定义的语音合成应用。", "reference_text": "这是参考音频的文本。", "reference_audio": "example/prompt_audio.wav"}' --output result.wav
7. 总结与展望
通过本文的介绍,你已经了解了Spark-TTS的部署方法和API使用方式。Spark-TTS提供了灵活的部署选项和丰富的功能,能够满足不同场景下的语音合成需求。未来,Spark-TTS将继续优化模型性能,增加更多语音风格和语言支持,为用户提供更好的语音合成体验。
如果你在使用过程中遇到问题,可以参考项目的官方文档docs/residual_fsq_guide.md或查看源代码获取更多帮助。
希望本文对你有所帮助,祝你使用Spark-TTS愉快!
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00


