用途:在 JavaScript/TypeScript 项目中使用 Deepgram 文本转语音 v1(/v1/speak)将文本转换为音频。
两种方式:REST(client.speak.v1.audio.generate)适合渲染完成文本、可下载文件、预生成提示音和批量合成;WebSocket(client.speak.v1.createConnection() / connect())适合边接收 LLM 输出的 token 边低延迟合成音频。若还需要监听、思考和打断处理,应改用 deepgram-js-voice-agent。
鉴权:通过 dotenv 读取 DEEPGRAM_API_KEY,并用 const { DeepgramClient } = require("@deepgram/sdk"); 创建客户端。仓库示例使用 require("../dist/cjs/index.js"),但应用代码通常应从 @deepgram/sdk 导入。
REST 快速开始:调用 deepgramClient.speak.v1.audio.generate 并传入 text、model(如 aura-2-thalia-en)、encoding、container 等参数。返回的是 BinaryResponse 而非 JSON,可用 .stream()、.arrayBuffer()、.blob()、.bytes() 处理。
WebSocket 快速开始:createConnection 后注册 message 事件,调用 connect() 并 await waitForOpen(),再通过 sendText({ type: "Speak", text }) 发送文本,最后用 sendFlush({ type: "Flush" }) 刷新,收到 Flushed 事件后关闭连接。
主要参数:REST 与 WSS 均支持 model、encoding、sample_rate、container、bit_rate、callback、callback_method、tag、mip_opt_out。WSS 客户端消息包括 sendText、sendFlush、sendClear、sendClose;服务端事件包括二进制音频及 Metadata、Flushed、Cleared、Warning。
限制与注意:本仓库未提供类似 Python SDK 的 TextBuilder 增量缓冲助手,如需在 sendText 前缓冲 token,需自行在应用层实现。REST 返回二进制而非 JSON;应使用 src/CustomClient.ts 中的自定义客户端包裹,以正确处理二进制 WebSocket;createConnection() 是惰性的,需先注册处理器再 connect();发送文本后必须调用 sendFlush,否则尾部音频可能不会及时输出;流式文本必须是结构化 JSON({ type: "Speak", text }),不能直接发字符串;同一处理器在不同运行时可能收到 string、ArrayBuffer 或 Blob;encoding/container/sample_rate 需与播放端匹配,否则会出现杂音、静音或无法播放。
示例文件:examples/10-text-to-speech-single.ts、examples/11-text-to-speech-streaming.ts、examples/25-binary-response.ts。跨语言产品知识可安装 npx skills add deepgram/skills。