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('投资组合价值为10,000美元');
// 带选项
await tts.speak('市场警报:BTC突破100k美元', {
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