Install
openclaw skills install @thcjp/piper-tts-engineopenclaw skills install @thcjp/piper-tts-engine核心功能: 本技能提供中文交互、、本地化处理时使用、时使用、化工作流场景等能力。
核心功能: 本技能提供、跨平台部署、与音色定制等能力。
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| 大数据集流式处理 | 不支持 | 支持 |
| 多数据源关联查询 | 不支持 | 支持 |
| 可视化图表自动生成 | 不支持 | 支持 |
| 定时数据同步与增量更新 | 不支持 | 支持 |
| 数据质量检测与清洗规则 | 不支持 | 支持 |
| 能力 | 免费版 | 专业版 |
|---|---|---|
| 单条文本合成 | 支持 | 支持 |
| 预置音色 | 4 个 | 全部音色库 |
| 批量合成 | - | 支持 |
| 自定义音色训练 | - | 支持 |
| 多语言合成 | 英语为主 | 20+ 语言 |
| SSML 标记 | - | 支持 |
| API 服务化 | - | 支持 |
| 语音后处理(降噪/拼接) | - | 支持 |
| 跨平台(含 Windows 原生) | - | 支持 |
| 语速/音高/音量控制 | 基础 | 精细控制 |
| 优先技术支持 | - | 支持 |
详细的输入输出格式请参考下方章节说明。
将一本电子书的全部章节批量转为语音文件,自动拼接为完整有声书.
# batch_tts_audiobook.py
import os
import subprocess
import json
# ...
# 章节配置
chapters = [
{"id": "ch01", "title": "优秀章 序章", "file": "book/ch01.txt"},
{"id": "ch02", "title": "第二章 启程", "file": "book/ch02.txt"},
{"id": "ch03", "title": "第三章 相遇", "file": "book/ch03.txt"},
{"id": "ch04", "title": "第四章 挑战", "file": "book/ch04.txt"},
{"id": "ch05", "title": "第五章 转折", "file": "book/ch05.txt"},
]
# ...
voice = "zh_CN-huayan-medium" # 中文音色
output_dir = "audiobook/output"
os.makedirs(output_dir, exist_ok=True)
# ...
# 第1步: 批量合成各章节
results = []
for ch in chapters:
with open(ch["file"], "r", encoding="utf-8") as f:
text = f.read().strip()
# ...
output_path = os.path.join(output_dir, f"{ch['id']}.mp3")
cmd = [
"piper-speak-pro",
"--text", text,
"--voice", voice,
"--output", output_path,
"--speed", "0.95", # 略慢,适合听书
"--post-process", "denoise" # 降噪后处理
]
subprocess.run(cmd, check=True)
results.append({"chapter": ch["id"], "title": ch["title"], "file": output_path})
print(f"✅ {ch['title']} 合成完成 -> {output_path}")
# ...
# 第2步: 拼接为完整有声书
concat_file = os.path.join(output_dir, "concat_list.txt")
with open(concat_file, "w", encoding="utf-8") as f:
for r in results:
f.write(f"file '{r['file']}'\n")
# ...
full_output = os.path.join(output_dir, "full_audiobook.mp3")
subprocess.run([
"ffmpeg", "-f", "concat", "-safe", "0",
"-i", concat_file, "-c", "copy", full_output
], check=True)
# ...
print(f"\n📚 有声书合成完成: {full_output}")
print(f" 共 {len(results)} 章,总时长约 {len(results) * 15} 分钟")
使用 SSML 标记控制停顿、重音与语速,实现专业级语音表现.
<!-- ssml_input.xml -->
<speak>
<prosody rate="slow" pitch="-2st">
欢迎收听今日新闻速递.
</prosody>
<break time="500ms"/>
<prosody rate="normal">
头条新闻:<emphasis level="strong">人工智能领域迎来重大突破</emphasis>.
</prosody>
<break time="300ms"/>
<prosody rate="fast">
详细内容请关注后续报道.
</prosody>
</speak>
# 使用 SSML 合成
piper-speak-pro --ssml ssml_input.xml --voice zh_CN-huayan-medium --output news_broadcast.mp3
使用自有录音数据训练专属音色,打造品牌统一的声音形象.
# 第1步: 准备训练数据(至少30分钟清晰录音 + 对应文本)
# audio_samples/ 目录存放 WAV 录音
# transcripts/ 目录存放对应文本
# ...
# 第2步: 启动音色训练
piper-train-pro \
--name "BrandVoice-Aria" \
--language "zh_CN" \
--audio-dir audio_samples/ \
--transcript-dir transcripts/ \
--quality "high" \
--output-dir models/custom/
# ...
# 训练完成后输出
# 模型路径: models/custom/zh_CN-BrandVoice-Aria-high.onnx
# 配置文件: models/custom/zh_CN-BrandVoice-Aria-high.json
# ...
# 第3步: 使用自定义音色合成
piper-speak-pro \
--text "欢迎致电客户服务中心,我是您的专属助手。" \
--voice models/custom/zh_CN-BrandVoice-Aria-high.onnx \
--output welcome.mp3
将 TTS 引擎部署为 HTTP API 服务,供团队内部系统调用.
# tts_api_server.py
from fastapi import FastAPI, BackgroundTasks
from pydantic import BaseModel
import subprocess
import uuid
import os
# ...
app = FastAPI(title="Piper TTS Pro API")
# ...
class TTSRequest(BaseModel):
text: str
voice: str = "zh_CN-huayan-medium"
speed: float = 1.0
pitch: int = 0
ssml: str = None
# ...
@app.post("/api/tts")
async def synthesize(req: TTSRequest, bg: BackgroundTasks):
task_id = str(uuid.uuid4())
output_path = f"output/{task_id}.mp3"
# ...
cmd = ["piper-speak-pro", "--output", output_path, "--voice", req.voice]
if req.ssml:
cmd += ["--ssml", req.ssml]
else:
cmd += ["--text", req.text, "--speed", str(req.speed), "--pitch", str(req.pitch)]
# ...
bg.add_task(run_synthesis, cmd)
return {"task_id": task_id, "status": "processing", "output": output_path}
# ...
@app.get("/api/tts/{task_id}")
async def get_status(task_id: str):
path = f"output/{task_id}.mp3"
if os.path.exists(path):
return {"task_id": task_id, "status": "completed", "output": path}
return {"task_id": task_id, "status": "processing"}
# ...
def run_synthesis(cmd):
subprocess.run(cmd, check=True)
# 启动 API 服务
uvicorn tts_api_server:app --host 0.0.0.0 --port 8100
# ...
# 示例
curl -X POST http://localhost:8100/api/tts \
-H "Content-Type: application/json" \
-d '{"text":"您好,这是一条测试语音","voice":"zh_CN-huayan-medium"}'
(请参考skill目录中的脚本文件) --install-all
(请参考skill目录中的脚本文件) "专业版语音合成已就绪" zh_CN-huayan-medium
piper-speak-pro --batch input_texts.json --voice zh_CN-huayan-medium --output-dir batch_output/
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 否 | 处理的内容输入 |
| mode | string | 否 | 处理模式, 可选值: json/text/markdown |
| style | string | 否 | 输出风格, 参考 references/style.md |
{
"success": true,
"data": {
"result": "处理结果",
"status": "success",
"metadata": {
"metadata": {
"template_used": "reviewer",
"word_count": 0,
"style": "专业"
}
},
"error": null
}
输出模板参考: assets/output.json
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| Python 3.9+ | 运行时 | 必需 | python.org 官方下载 |
| piper-tts-pro | Python 包 | 必需 | pip install piper-tts-pro(安装脚本自动处理) |
| onnxruntime | Python 包 | 必需 | pip install onnxruntime(自动安装) |
| FFmpeg | 工具 | 推荐 | 系统包管理器安装,音频拼接与后处理 |
| FastAPI | Python 包 | 可选 | pip install fastapi uvicorn,API 服务化 |
| CUDA Toolkit | GPU 驱动 | 可选 | NVIDIA 官网下载,音色训练加速 |
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
api_server.auth_token 中设置鉴权令牌.# 环境变量示例
export PIPER_PRO_LICENSE="your_pro_license"
export PIPER_API_TOKEN="your_api_auth_token"
export CUDA_HOME="/usr/local/cuda" # GPU训练需要
专业版与免费版使用相同的底层 Piper 引擎。免费版的合成命令、音色模型与配置可直接在专业版中使用,升级后已有音色自动识别.
最低要求 30 分钟清晰录音与对应文本转录。数据越多、质量越高,训练出的音色越自然。推荐 1-2 小时高质量数据.
专业版支持以下 SSML 标记:
<speak>:根元素<break time="...">:停顿<prosody rate/pitch/volume>:语速/音高/音量<emphasis level="...">:重音<say-as>:特殊读法(数字、日期等)专业版自动将超长文本按句子分段合成,再拼接为完整文件。通过 batch.chunk_size 控制分段大小(默认 500 字符).
支持。通过 engine.max_workers 控制并发合成任务数(默认 4)。建议根据服务器 CPU 配置调整.
支持。专业版提供 Windows 原生支持,无需 WSL。安装脚本会自动检测操作系统并选择对应的二进制文件.
在 SSML 中使用 <voice> 标记切换音色,实现多语言混合合成.
<speak>
<voice name="zh_CN-huayan-medium">欢迎来到</voice>
<voice name="en_US-ryan-high">New York</voice>
<voice name="zh_CN-huayan-medium">,祝您旅途愉快。</voice>
</speak>
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 单个文本合成 | 5分钟 | 1分钟 | 4分钟 | 5% |
| 批量文本合成(100条) | 10小时 | 1小时 | 9小时 | 10% |
| 自定义音色训练 | 24小时 | 4小时 | 20小时 | 15% |
| 多语言支持切换 | 30分钟 | 5分钟 | 25分钟 | 10% |
| 语音后处理 | 1小时 | 15分钟 | 45分钟 | 8% |
| 对比维度 | 本技能 | 手动操作 | Python脚本 | 专业软件 |
|---|---|---|---|---|
| 功能丰富度 | 高 | 低 | 中 | 高 |
| 易用性 | 高 | 低 | 中 | 高 |
| 成本效益 | 高 | 低 | 中 | 高 |
| 扩展性 | 高 | 低 | 中 | 高 |
| 支持的语音合成引擎 | 多 | 少 | 少 | 多 |
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 语音合成效率低 | 大量文本需要手动合成,耗时且效率低 | 影响工作效率和成本 | 引入批量合成功能,提高效率 | 提升效率50% |
| 音色定制困难 | 缺乏音色定制功能,无法满足个性化需求 | 影响用户体验 | 提供自定义音色训练功能,满足个性化需求 | 提升满意度20% |
| 多语言支持不足 | 缺乏多语言支持,限制应用范围 | 影响应用场景 | 扩展多语言支持,扩大应用范围 | 扩大市场占有率15% |
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 合成失败 | 文本格式错误 | 检查文本格式,确保正确 | 修正文本格式 |
| 音质差 | 音源质量低 | 检查音源质量,选择高质量音源 | 更换高质量音源 |
| 速度不匹配 | 语速设置错误 | 检查语速设置,确保符合需求 | 调整语速设置 |
| 音量不稳定 | 音量设置错误 | 检查音量设置,确保符合需求 | 调整音量设置 |
| 多语言不支持 | 语言库缺失 | 检查语言库,确保安装正确 | 安装缺失语言库 |
| 风险项 | 等级 | 防护措施 | 验证方法 |
|---|---|---|---|
| API密钥泄露 | 高 | 通过环境变量配置,禁止硬编码 | 定期检查代码和配置文件 |
| 命令执行风险 | 高 | 仅执行白名单命令,避免拼接用户输入 | 使用沙箱环境测试 |
| 网络通信安全 | 中 | 使用HTTPS协议,验证SSL证书 | 定期检查证书有效期 |
| 敏感数据暴露 | 高 | 输出结果中不包含密钥、令牌等敏感信息 | 日志脱敏审查 |
| 未授权访问 | 中 | 限制访问权限,实施认证机制 | 定期审计访问日志 |
A1: 企业级本地 TTS 引擎,支持批量合成、自定义音色训练、多语言、SSML 标记与 API 服务化。面向团队与企业的本地离线文字转语音引擎. 核心能力: 批量合成。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
针对本地语音合成专业版使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |
针对本地语音合成专业版使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |