用途
该技能用于在使用 Deepgram Rust SDK 时实现文本转语音(TTS),即把文本合成为音频。它在以下场景适用:通过 speak_to_file(...) 把文本转换为音频文件;通过 speak_to_stream(...) 流式获取 TTS 字节;使用 speak::options::Options 选择 Aura 音色与输出编码;使用 Flux TTS(/v2/speak)进行合成,可选择批量方式(flux_speak_to_file(...)、flux_speak_to_stream(...)),也可通过 WebSocket 逐轮合成(flux_request(options).handle())。
主要能力
- Aura 文本转语音(/v1/speak):在该 crate 中仅支持 REST,可保存为文件或返回字节流。
- Flux TTS(/v2/speak):在 speak::flux 模块中同时提供两种传输方式——批量的 Speak::flux_speak_to_file / flux_speak_to_stream,以及流式 WebSocket 的 Speak::flux_request(options).handle()。
- FluxSpeakHandle 支持 speak、flush、interrupt、configure_speed、close、receive 等操作。
- 参数配置:TTS Options 构建器字段包括 model、encoding、sample_rate、container、bit_rate;Flux TTS 的 Options::builder(Model) 方法包括 encoding、sample_rate、speed、expressivity、mip_opt_out、tag,以及仅适用于 REST 的 container、bit_rate、callback、callback_method、priority_low。
- 模型枚举位于 deepgram::speak::options::Model,包含 AuraAsteriaEn、AuraLunaEn、AuraOrionEn 以及 CustomId(String) 等取值;Flux 模型命名为 flux-{voice}-{language},例如 Model::FluxHaleyEn。
使用方式
鉴权:安装 TTS 相关依赖时,可将 deepgram 设置为默认不启用特性并只启用 speak;API 密钥使用 Authorization: Token <api_key>。
示例依赖(TTS-only):
[dependencies]
deepgram = { version = "0.10.1", default-features = false, features = ["speak"] }
tokio = { version = "1", features = ["full"] }
futures = "0.3"
初始化:
let dg = deepgram::Deepgram::new(std::env::var("DEEPGRAM_API_KEY")?)?;
入口点:Deepgram::text_to_speech()、Speak::speak_to_file(...)、Speak::speak_to_stream(...)。speak_to_stream(...) 返回 impl Stream<Item = bytes::Bytes>。
Aura 保存到文件的快速开始示例:
let options = Options::builder()
.model(Model::AuraAsteriaEn)
.encoding(Encoding::Linear16)
.sample_rate(16000)
.container(Container::Wav)
.build();
dg.text_to_speech()
.speak_to_file("Hello from Rust.", &options, Path::new("output.wav"))
.await?;
Aura 流式获取响应字节的示例:
let mut stream = dg
.text_to_speech()
.speak_to_stream("Hello from Rust.", &options)
.await?;
while let Some(chunk) = stream.next().await {
println!("received {} bytes", chunk.len());
}
Flux TTS 批量(REST)示例(model 为必填;批量传输下 encoding 默认为 mp3):
let options = Options::builder(Model::FluxHaleyEn).build();
dg.text_to_speech()
.flux_speak_to_file("Your appointment is confirmed.", &options, Path::new("flux-tts-batch.mp3"))
.await?;
Flux TTS 流式(WebSocket)示例:
let options = Options::builder(Model::FluxHaleyEn)
.encoding(Encoding::Linear16)
.sample_rate(24_000)
.build();
let speak = dg.text_to_speech();
let mut handle = speak.flux_request(options).handle().await?;
handle.speak("Hello! ").await?;
handle.speak("This audio was synthesized over the Flux TTS websocket.").await?;
handle.flush().await?;
handle.close().await?;
接收端会收到二进制音频帧和 JSON 控制事件,通过 receive() 处理,例如 FluxSpeakResponse::Audio、SpeechMetadata、FatalError、SessionMetadata 等分支。handle.interrupt(playback_offset_ms) 可在打断(barge-in)时取消当前轮次,服务端返回 SpeechInterrupted;handle.configure_speed(speed) 可在会话中途修改语速,服务端返回 ConfigureSuccess 或 ConfigureFailure。更完整的事件循环(包括把音频保存为 WAV 文件)可参考 examples/speak/flux/websocket_synthesize.rs。
适用场景
- 需要把文本合成为音频文件(如 .wav)的应用。
- 需要边合成边消费音频字节流的场景。
- 需要通过 Flux TTS 进行批量合成或 WebSocket 逐轮实时合成,并支持打断、动态调节语速的交互式语音场景。
限制与注意事项
- Aura TTS 在该 crate 中仅支持 REST;src/speak/ 中唯一的 TTS WebSocket 客户端是 speak::flux::websocket,Aura 音色在 /v2/speak 上会被拒绝。
- speak_to_stream(...) 仍然使用 REST 端点:它从 POST /v1/speak 流式读取 HTTP 响应字节;WebSocket 接口是 /v2/speak 上的 Speak::flux_request。
- 编码与容器需搭配选择:原始输出用 Container::None,.wav 输出用 Container::Wav。
- Flux 的 WebSocket 会拒绝仅适用于 REST 的选项以及压缩编码(mp3、opus、flac、aac),并返回 DeepgramError::InvalidOptions。
- 使用 API 密钥时用 Token,不要用 Bearer。
API 参考(分层)
仓库内:README.md;src/speak/rest.rs;src/speak/options.rs;src/speak/flux/(rest.rs、websocket.rs、options.rs、response.rs);examples/speak/rest/text_to_speech_to_file.rs;examples/speak/rest/text_to_speech_to_stream.rs;examples/speak/flux/batch_synthesize.rs;examples/speak/flux/websocket_synthesize.rs。
OpenAPI:原始规范 https://developers.deepgram.com/openapi.yaml;端点参考 https://developers.deepgram.com/reference/text-to-speech/speak-request。
AsyncAPI:Rust SDK 支持 Flux TTS /v2/speak WebSocket(通过 Speak::flux_request(options).handle());该 crate 未实现 Aura /v1/speak 的 WebSocket。原始规范:https://developers.deepgram.com/asyncapi.yaml。
Context7:/llmstxt/developers_deepgram_llms_txt。
产品文档:https://developers.deepgram.com/docs/text-to-speech;https://developers.deepgram.com/docs/tts-rest。
跨语言产品知识可安装中心技能:npx skills add deepgram/skills。本 SDK 提供语言惯用的代码技能,deepgram/skills 提供跨语言产品知识(见 api、docs、recipes、examples、starters、setup-mcp)。
关于价格、收费、具体平台支持范围及实际合成效果等信息,资料暂未提供。