name: tts
description: “文本到语音合成,使用ElevenLabs和系统声音”
emoji: “🔊”
gates:
envs:
anyOf:
- ELEVENLABS_API_KEY
TTS (文本到语音) - 完整API参考
将文本转换为自然听起来的语音,使用ElevenLabs、macOS say或espeak。
聊天命令
合成语音
/speak "您的订单已成交" 朗读文本
/speak "市场提醒" --voice rachel 使用特定声音
/speak "投资组合上涨5%" --speed 1.2 调整速度
声音管理
/voices 列出可用声音
/voices preview rachel 预览一个声音
/voice set rachel 设置默认声音
设置
/tts status 检查TTS状态
/tts provider elevenlabs 设置提供商
/tts speed 1.0 设置默认速度
/tts volume 0.8 设置音量(0-1)
TypeScript API参考
创建TTS服务
import { createTTSService } from 'clodds/tts';
const tts = createTTSService({
provider: 'elevenlabs',
apiKey: process.env.ELEVENLABS_API_KEY,
// 默认值
defaultVoice: 'rachel',
defaultSpeed: 1.0,
defaultPitch: 1.0,
});
合成语音
// 基本合成
const audio = await tts.synthesize('您好,您的交易已执行。');
// 立即播放
await tts.speak('投资组合价值为10000美元');
// 带选项
await tts.speak('市场提醒:BTC突破100000美元', {
voice: 'josh',
speed: 1.2,
pitch: 1.0,
volume: 0.8,
});
流式合成
// 流式合成长文本(降低延迟)
const stream = await tts.streamSynthesize(longText, {
voice: 'rachel',
});
stream.on('data', (chunk) => {
// 播放音频块
audioPlayer.write(chunk);
});
stream.on('end', () => {
console.log('合成完成');
});
列出声音
// 获取可用声音
const voices = await tts.listVoices();
for (const voice of voices) {
console.log(`${voice.id}: ${voice.name}`);
console.log(` 性别: ${voice.gender}`);
console.log(` 口音: ${voice.accent}`);
console.log(` 用例: ${voice.useCase}`);
}
声音预览
// 预览一个声音
await tts.preview('rachel', '这是Rachel声音的预览。');
队列管理
// 队列多个消息
tts.queue('第一条消息');
tts.queue('第二条消息');
tts.queue('第三条消息');
// 消息按顺序播放
// 清除队列
tts.clearQueue();
// 跳过当前
tts.skip();
ElevenLabs声音
| 声音ID |
名称 |
性别 |
口音 |
最适合 |
rachel |
Rachel |
F |
美国 |
叙述 |
domi |
Domi |
F |
美国 |
对话 |
bella |
Bella |
F |
美国 |
柔和,温柔 |
antoni |
Antoni |
M |
美国 |
叙述 |
josh |
Josh |
M |
美国 |
深沉,权威 |
arnold |
Arnold |
M |
美国 |
粗犷,角色 |
adam |
Adam |
M |
美国 |
深沉,叙述 |
sam |
Sam |
M |
美国 |
沙哑,角色 |
提供商
| 提供商 |
质量 |
延迟 |
成本 |
设置 |
| ElevenLabs |
高级 |
~500ms |
$5/100k字符 |
API密钥 |
| say (macOS) |
良好 |
~100ms |
免费 |
内置 |
| espeak |
基础 |
~50ms |
免费 |
安装 |
提供商配置
// ElevenLabs(最佳质量)
const tts = createTTSService({
provider: 'elevenlabs',
apiKey: process.env.ELEVENLABS_API_KEY,
});
// macOS say(免费,本地)
const tts = createTTSService({
provider: 'say',
defaultVoice: 'Samantha', // macOS声音
});
// espeak(跨平台,免费)
const tts = createTTSService({
provider: 'espeak',
defaultVoice: 'en-us',
});
音频输出
// 设置输出设备
tts.setOutputDevice('内置扬声器');
// 获取可用设备
const devices = await tts.listOutputDevices();
SSML支持(ElevenLabs)
// 使用SSML进行高级控制
await tts.speak(`
<speak>
<prosody rate="slow">重要提醒:</prosody>
<break time="500ms"/>
您的止损已触发。
</speak>
`, { ssml: true });
最佳实践
- 使用流式传输 — 长文本,减少首次音频时间
- 缓存常用短语 — “订单成交”, “提醒触发”
- 调整速度 — 提醒更快,细节更慢
- 队列管理 — 不要重叠重要消息
- 备用提供商 — 如果ElevenLabs不可用,使用say/espeak