文本转语音(TTS)
TTS 命令将文本转换为语音并播放。
TTS Track
TTS 命令会创建一个 TTS Track 用于转发音频, TTS Track 的开始和结束都分别会触发 Track Start 和 Track End 事件。
在 TTS 命令中设置 playId 时,对应的 TrackEnd 事件中会包含该 playId,可用于获取播放完毕通知。
TTS 命令参数
text
需要转换的文本。
部分供应商会限制文本的长度,以及文本的内容,特殊字符可能会报错。请参阅本位末尾的供应商文档。
speaker
设置语音的音色。请注意不同模型支持的音色不同,以及音色支持的语音不同,价格也各不相同。
- 阿里云: 阿里云音色列表, 默认模型为
cosyvoice-v2, 默认音色为longyumi_v2。 - 腾讯云: 腾讯云音色列表, 默认音色为
101001。 - Deepgram: Deepgram音色列表, 默认音色为
aura-2-thalia-en。
playId
playId 用于使用多条命令完成一次播放。当连续的 TTS 命令使用相同的 playId 时,会复用同一个 TTS Track。
如果 TTS 命令使用和之前的 TTS 命令不同的 playId,且之前的 TTS Track 并未结束,会终止之前的 TTS Track 并创建一个新的 TTS Track。
endOfStream
设置 endOfStream=true 表示当前 playId 的所有 TTS 命令已经发送完毕。TTS Track 将在所有命令结果播放完毕之后退出,并发送 Track End 事件。
streaming
streaming 用于选择供应商的流式和非流式的 API:
-
设置
streaming=true,会选择供应商的流式 API,多条 TTS 命令会在同一个 WebSocket 连接里连续发送。 -
设置
streaming=false(默认), 每条 TTS 命令会使用单独的 http 请求。
流式的文本片段较短,因此会关闭缓存机制。
非流式使用单独的请求,可以设置 max_concurrent_tasks 选项设置请求的并发数, 默认是 1。
base64
设置 base64=true,可以使用 text 字段传入 base64 编码音频。
音频需要是采样率为 16kHz 的 PCM 格式。
autoHangup
设置 autoHangup=true,播放完毕后自动挂断。
waitInputTimeout
设置 waitInputTimeout, 当超过 waitInputTimeout 毫秒后,没有音频输入,将触发 Silence 事件。
缓存
当设置 streaming=false 时,会开启缓存机制。
TTS 命令的请求音频结果会保存到 /tmp/mediacache (默认路径)中,文件名为: {文本哈希}-{采样率}-{音色}-{速率}.pcm。
当后续的命令使用相同的文本、采样率、音色、速率时,会直接使用缓存中的文件。
缓存路径可以在 RustPBX 的配置文件中修改,示例:
[tts]
media_cache_path = "/tmp/mediacache"
其他配置
在 Invite/Accept 命令的 CallOption 的 tts 字段和 TTS 命令中的 option 字段均可以配置更多 TTS 选项。
他们的参数是相同的,具体参见 SynthesisOption。
如果同时配置,TTS 命令中配置的选项会覆盖 CallOption 中的选项。
主要包括:
samplerate:采样率- 默认值:16000, 最好设置为与 Track 相同的采样率, 重采样会有额外的性能损耗。
speed:语速- 默认为提供商的标准语速。其中 deepgram 不支持调整语速。具体配置需参阅提供商文档。
volume:音量- 默认为提供商的标准音量。其中 deepgram 不支持调整音量,具体配置需参阅提供商文档。
emotion:情感- 注意模型和音色对情感的支持不同,具体配置需参阅提供商文档。
endpoint:自定义服务端点 URL- tencent 默认为:非流式
wss://tts.cloud.tencent.com/stream_ws,流式wss://tts.cloud.tencent.com/stream_wsv2。 - aliyun 默认为:
wss://dashscope.aliyuncs.com/api-ws/v1/inference。 - deepgram 默认为:
(https/wss)://api.deepgram.com/v1/speak。
- tencent 默认为:非流式
extra:提供商特定参数,会直接传递给提供商。max_concurrent_tasks:非流式 TTS 命令的最大并发任务数,默认为 1。
如果供应商有其他的参数,也可以在 extra 字段中使用相同的字段名。这些参数会直接传递给提供商。
API Key 配置
API Key 可以在启动 RustPBX 时的环境变量中配置,也可以在 SynthesisOption 中配置。
在环境变量中配置:
-
腾讯云:
TENCENT_APPID:腾讯云的 appIdTENCENT_SECRET_ID:腾讯云的 secretIdTENCENT_SECRET_KEY:腾讯云的 secretKey
-
阿里云:
DASHSCOPE_API_KEY: 阿里云大模型服务平台百炼的 API Key
-
Deepgram:
DEEPGRAM_API_KEY:Deepgram 的 API Key
在 SynthesisOption 中配置:
腾讯云:
appId:腾讯云的 appIdsecretId:腾讯云的 secretIdsecretKey:腾讯云的 secretKey
其他提供商:
secretKey:提供商的 API Key
打断
使用 Interrupt 命令可以打断正在播放的TTS。
- 如果设置
graceful=true,TTS Track 会在当前 TTS 命令播放完毕后退出(仅在非流式 TTS 中有效)。 - 如果设置
graceful=false(默认),会立即中断播放。
如果有正在播放的 TTS,并且供应商支持字幕,则会触发 Interruption 事件,事件中包含已播放的时间和文字位置 (如果供应商支持)。
更多信息请参阅: