文本到语音合成 tts

利用ElevenLabs和系统声音将文本转换为自然听起来的语音,支持语音合成、声音管理、设置调整等功能。

NLP 0 次安装 0 次浏览 更新于 3/5/2026

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 });

最佳实践

  1. 使用流式传输 — 长文本,减少首次音频时间
  2. 缓存常用短语 — “订单成交”, “提醒触发”
  3. 调整速度 — 提醒更快,细节更慢
  4. 队列管理 — 不要重叠重要消息
  5. 备用提供商 — 如果ElevenLabs不可用,使用say/espeak