name: voice-ai-tts
description: >
使用 Voice.ai API 实现的高质量语音合成,提供 9 种音色、11 种语言支持,并具备流式输出功能。
version: 1.1.5
tags: [tts, voice, speech, voice-ai, audio, streaming, multilingual]
metadata: {"clawdbot":{"emoji":"🎙️","requires":{"bins":["node"],"env":["VOICE_AI_API_KEY"]},"primaryEnv":"VOICE_AI_API_KEY"},"openclaw":{"requires":{"bins":["node"],"env":{"VOICE_AI_API_KEY":"required"},"note":"通过环境变量设置 VOICE_AI_API_KEY。"}}}
将您的 API 密钥设置为环境变量:
export VOICE_AI_API_KEY="您的-api-key"
获取 API 密钥: Voice.ai 控制面板
无需安装步骤。此技能包捆绑了 Node.js CLI 和 SDK(无外部 npm 依赖)。
scripts/tts.js - CLI 入口点voice-ai-tts-sdk.js - CLI 使用的 Node.js SDKvoices.json - CLI 使用的语音定义voice-ai-tts.yaml - API 规范package.json - 工具使用的技能元数据完整的安全和隐私概述请参阅 SECURITY.md。
此技能:
- 仅向 https://dev.voice.ai 发起出站 HTTPS 请求
- 读取本地文件:voices.json
- 将音频输出写入 --output 指定的路径(默认为 output.mp3)
- 不执行 shell 命令,也不修改系统配置文件
SDK 和规范使用 https://dev.voice.ai,这是官方的 Voice.ai 生产 API 域名。
如果您的环境暴露了 VOICE_AI_API_KEY,OpenClaw 可以直接调用 CLI 脚本。请根据您的 OpenClaw 安装配置使用 /tts 命令。
以下聊天命令可与 OpenClaw 配合使用:
| 命令 | 描述 |
|---|---|
/tts <文本> |
使用默认语音生成语音 |
/tts --voice ellie <文本> |
使用特定语音生成语音 |
/tts --stream <文本> |
使用流式模式生成 |
/voices |
列出可用语音 |
示例:
/tts 你好,欢迎使用 Voice.ai!
/tts --voice oliver 大家早上好。
/tts --voice lilith --stream 这是一个很长的故事,将在生成时流式传输...
| 语音 | ID | 性别 | 角色 | 最佳用途 |
|---|---|---|---|---|
| ellie | d1bf0f33-8e0e-4fbf-acf8-45c3c6262513 |
女 | 青春活力 | 视频博客、社交媒体内容 |
| oliver | f9e6a5eb-a7fd-4525-9e92-75125249c933 |
男 | 英式口音 | 旁白、教程 |
| lilith | 4388040c-8812-42f4-a264-f457a6b2b5b9 |
女 | 柔和 | ASMR、舒缓内容 |
| smooth | dbb271df-db25-4225-abb0-5200ba1426bc |
男 | 深沉 | 纪录片、有声读物 |
| shadow | 72d2a864-b236-402e-a166-a838ccc2c273 |
男 | 独特 | 游戏、娱乐内容 |
| sakura | 559d3b72-3e79-4f11-9b62-9ec702a6c057 |
女 | 动漫 | 角色配音 |
| zenith | ed751d4d-e633-4bb0-8f5e-b5c8ddb04402 |
男 | 深沉 | 游戏、戏剧性内容 |
| flora | a931a6af-fb01-42f0-a8c0-bd14bc302bb1 |
女 | 欢快 | 儿童内容、活泼内容 |
| commander | bd35e4e6-6283-46b9-86b6-7cfa3dd409b9 |
男 | 英雄气概 | 游戏、动作内容 |
| 代码 | 语言 |
|---|---|
en |
英语 |
es |
西班牙语 |
fr |
法语 |
de |
德语 |
it |
意大利语 |
pt |
葡萄牙语 |
pl |
波兰语 |
ru |
俄语 |
nl |
荷兰语 |
sv |
瑞典语 |
ca |
加泰罗尼亚语 |
对于非英语语言,请使用多语言模型:
const audio = await client.generateSpeech({
text: 'Bonjour le monde!',
voice_id: 'ellie-voice-id',
model: 'voiceai-tts-multilingual-v1-latest',
language: 'fr'
});
使用以下参数自定义语音输出:
| 参数 | 范围 | 默认值 | 描述 |
|---|---|---|---|
temperature |
0-2 | 1.0 | 值越高表现力越强,值越低越稳定一致 |
top_p |
0-1 | 0.8 | 控制语音生成过程中的随机性 |
示例:
const audio = await client.generateSpeech({
text: '这会听起来非常有表现力!',
voice_id: 'ellie-voice-id',
temperature: 1.8,
top_p: 0.9
});
使用实时流式传输生成音频(推荐用于长文本):
# 边生成边流式传输音频
node scripts/tts.js --text "这是一个很长的故事..." --voice ellie --stream
# 使用自定义输出进行流式传输
node scripts/tts.js --text "第一章..." --voice oliver --stream --output chapter1.mp3
SDK 流式传输:
const stream = await client.streamSpeech({
text: '长文本内容...',
voice_id: 'ellie-voice-id'
});
// 管道传输到文件
stream.pipe(fs.createWriteStream('output.mp3'));
// 或处理数据块
stream.on('data', chunk => {
// 处理音频数据块
});
| 格式 | 描述 | 使用场景 |
|---|---|---|
mp3 |
标准 MP3 (32kHz) | 通用 |
wav |
未压缩 WAV | 高质量 |
pcm |
原始 PCM 音频 | 处理 |
opus_48000_128 |
Opus 128kbps | 流式传输 |
mp3_44100_192 |
高质量 MP3 | 专业用途 |
所有格式选项请参阅 voice-ai-tts-sdk.js。
# 设置 API 密钥
export VOICE_AI_API_KEY="您的密钥"
# 生成语音
node scripts/tts.js --text "你好,世界!" --voice ellie
# 选择不同的语音
node scripts/tts.js --text "早上好!" --voice oliver --output morning.mp3
# 对长文本使用流式传输
node scripts/tts.js --text "从前..." --voice lilith --stream
# 显示帮助
node scripts/tts.js --help
voice-ai-tts/
├── SKILL.md # 本文档
├── README.md # 快速开始
├── CHANGELOG.md # 版本历史
├── LICENSE.md # MIT 许可证
├── SECURITY.md # 安全和隐私说明
├── voices.json # 语音定义
├── voice-ai-tts.yaml # OpenAPI 规范
├── voice-ai-tts-sdk.js # JavaScript/Node.js SDK
├── package.json # OpenClaw 元数据
├── scripts/
│ └── tts.js # CLI 工具
Voice.ai 使用基于积分的系统。检查您的用量:
// SDK 通过 API 响应跟踪用量
const voices = await client.listVoices();
// 检查响应头中的速率限制信息
降低成本的小贴士:
- 对长文本使用流式传输(更高效)
- 尽可能缓存生成的音频
- 根据您的使用场景选择合适的音频质量
metadata.clawdbot 声明运行时要求,以便 ClawHub 显示所需的环境变量VOICE_AI_API_KEY 声明为主要环境变量VOICE_AI_API_KEYSECURITY.md 和 LICENSE.md 以提供来源和透明度voices.json 用于语音数据const VoiceAI = require('./voice-ai-tts-sdk');
const client = new VoiceAI(process.env.VOICE_AI_API_KEY);
// 列出语音
const voices = await client.listVoices({ limit: 10 });
// 获取语音详情
const voice = await client.getVoice('voice-id');
// 生成语音
const audio = await client.generateSpeech({
text: '你好,世界!',
voice_id: 'voice-id',
audio_format: 'mp3'
});
// 生成到文件
await client.generateSpeechToFile(
{ text: '你好!', voice_id: 'voice-id' },
'output.mp3'
);
// 流式传输语音
const stream = await client.streamSpeech({
text: '长文本...',
voice_id: 'voice-id'
});
// 删除语音
await client.deleteVoice('voice-id');
| 错误 | 原因 | 解决方案 |
|---|---|---|
AuthenticationError |
API 密钥无效 | 检查您的 VOICE_AI_API_KEY |
PaymentRequiredError |
积分不足 | 在 voice.ai/dashboard 添加积分 |
RateLimitError |
请求过多 | 等待后重试,或升级计划 |
ValidationError |
参数无效 | 检查文本长度和 voice_id |
由 Nick Gill 倾情制作 ❤️