模块 API
mod_wsstream 模块文档
mod_wsstream 是一个处理 websocket 以及语音合成(tts)的模块。
火山 TTS
火山引擎中包含 TTS 服务,其中在线语言合成 API 的文档地址为 https://www.volcengine.com/docs/6561/79821
mod_wsstream 模块中增加了 tts 引擎 volengine
, volengine
tts 引擎使用了火山 tts 的 websocket api。
调用示例:
这里以一个系统路由为例,先执行 app answer
,然后调用 speak
执行 tts 引擎。
answer speak volengine|defualt|火山引擎TTS,这是一个测试字符串。
配置文件
<configuration name="volcengine.conf" description="volcengine configuration"> <tts> <param name="tts-url" value="wss://openspeech.bytedance.com/api/v1/tts/ws_binary"/> <param name="cluster" value="volcano_tts"/> <param name="appid" value=""/> <param name="token" value=""/> <param name="disable-cache" value="true"/> <param name="tts-file-ext" value="wav"/> <param name="token-expires" value="36000"/> <!-- default value --> <param name="volume" value="50"/> <!-- [0, 100] --> <param name="speed-rate" value="0"/> <!-- [-500, 500] --> <param name="pich-rate" value="0"/> <!-- [-500, 500] --> <!-- force rate, comment out to use native session rate --> <!-- <param name="rate" value="24000"/> --> <!-- [0.2, 3] --> <!-- <param name="speed-ratio" value="1.0"/> --> <!-- [0.1, 3] --> <!-- <param name="volume-ratio" value="1.0"/> --> <!-- [0.1, 3] --> <!-- <param name="pich-ratio" value="1.0"/> --> <!-- <param name="emotion" value="happy"/> --> <!-- language, cn, ... --> <!-- <param name="language" value="cn"/> --> <!-- silence duration in ms --> <!-- <param name="silence_duration" value="125"/> --> </tts> </configuration>
- tts-url: 是火山 websocket 语音合成的地址。
- cluster: 业务集群,如果使用火山内部的音色选择
volcano_tts
, 如果使用复制音色需要设置成volcano_mega
,参考火山引擎文档。 - appid: 是火山引擎的 appid,如何获取参考 火山引擎文档。
- token: 是火山引擎的 token,同上。
- disable-cache: 是否禁用缓存。
- tts-file-ext: 语音合成缓存文件扩展名。
- token-expires: token 过期时间。
- volume: 音量。
- speed-rate: 语速。
- pich-rate: 音调。
参数说明
除了上述配置文件中的参数之外,还可以在调用 speak
命令传入文字的的同时携带临时参数。 该参数只会在当前这句话中生效。
例子:
speak volengine|default|{speed-ratio=1.5,silence-duration=125}测试语句。
这里的 speed-ratio
和 silence-duration
会覆盖配置文件中的参数。
所有的临时参数如下:
- voice:
string
音色。 - silence-duration:
int
这个语句最后的静音时长,单位是毫秒。 - speed-ratio:
float
语速,范围是[0.2, 3]
,默认值 1,保留一位小数。 - volume-ratio:
float
音量,范围是[0.1, 3]
,默认是 1,保留一位小数。 - pich-ratio:
float
音调,范围是[0.1, 3]
默认是 1,保留一位小数。 - emotion:
string
情感/风格,参考 火山引擎文档。 - language:
string
语言类型,参考 火山引擎文档。 - cluster:
string
集群名称,复制音色使用volcano_mega
, 内置音色使用volcano_tts
,参考火山引擎文档。
minimax T2A Stream TTS
mod_wsstream 模块中增加了 tts 引擎 minimax
(流式语音生成), minimax
tts 流式语音生成使用的是 HTTP 协议。
调用示例:
这里以一个系统路由为例,先执行 app answer
,然后调用 speak
执行 tts 引擎。
answer speak minimax|defualt|minimax TTS,这是一个测试字符串。
配置文件
<configuration name="minimax.conf" description="minimax configuration"> <tts> <param name="tts-url" value="https://api.minimax.chat/v1/tts/stream"/> <param name="token" value="token"/> <param name="group-id" value=""/> <param name="model" value="speech-01"/> <param name="volume" value="1.0"/> <!-- [0, 10] --> <param name="pitch" value="0"/> <!-- [-12, 12] --> <param name="bitrate" value="32000"/> <!-- default 128000, option: 32000,64000,128000 --> <param name="audio-sample-rate" value="16000" /> <!-- default 32000, option: 16000, 24000, 32000 --> <param name="format" value="pcm" /> <!-- default mp3, option: mp3, pcm, flac--> <param name="speed" value="1.0" /> <!-- default 1.0, option: [0.5, 2.0] --> <param name= "curl-timeout" value="60" /> <param name= "curl-connect-timeout" value="10" /> <param name= "tts-file-ext" value="wav" /> <param name= "voice-id" value="liepin_azhe2_test_1222" /> <param name= "disable-cache" value="true" /> </tts> </configuration>
- tts-url: 是火山 minimax 语音合成的地址。
- token: 是 minimax token。
- group-id: 用户所属的组。该值应拼接在调用API的url末尾。
- model: 调用的模型版本,比如:speech-01。
- volume: 生成声音的音量。可选,默认值为1.0,取值越大,音量越高。
- pitch: 生成声音的语调。可选,默认值为0(0为原音色输出,取值需为整数)。
- bitrate: 生成声音的比特率。可选,默认值为128000。
- audio-sample-rate: 生成声音的采样率。可选,默认为32000。
- format: 生成声音的音频格式。默认mp3,范围[mp3,pcm,flac]。
- speed: 生成声音的语速。可选,默认值为1.0,取值越大,语速越快
- voice-id: 请求的音色编号,具体值参考官方文档。
- curl-connect-timeout: http 请求建立连接的超时时间,单位为秒。
- curl-timeout: http 连接建立完成后,等待数据传输完成的最大时间,单位为秒。
- disable-cache: 是否禁用缓存,默认为false,也就是默认缓存是开启的。
- tts-file-ext: 语音合成缓存文件扩展名。
参数说明
除了上述配置文件中的参数之外,还可以在调用 speak
命令传入文字的同时携带临时参数。该参数只会在当前这句话中生效。
例子:
speak minimax|male-qn-qingse|{speed=1}测试语句。
所有的临时参数如下:
- voice:
string
音色。 - group_id:
string
组标识符。 - model:
string
模型名称。 - volume:
float
音量,范围是 [0, 10],默认值 1.0。 - pitch:
int8_t
音调,范围是 [-12, 12],默认值 0。 - bitrate:
uint32_t
比特率,支持 32000, 64000, 128000,默认值 128000。 - audio_sample_rate:
uint32_t
音频采样率,支持 16000, 24000, 32000,默认值 32000。 - format:
string
音频格式,支持 mp3, pcm, flac,默认值 pcm。 - speed:
float
语速,范围是 [0.5, 2.0],默认值 1.0。
minimax T2A v2 TTS
与 T2A Stream 共用一个配置文件,section ttsv2
mod_wsstream 模块中增加了 tts 引擎 minimaxv2
, minimaxv2
tts 流式语音生成使用的也是 HTTP API。
自定义音色使用本TTS
<configuration name="minimax.conf" description="minimax configuration"> <ttsv2> <param name="tts-url" value="https://api.minimax.chat/v1/t2a_v2"/> <param name="token" value=""/> <param name="group-id" value=""/> <param name="model" value="speech-01-240228"/> <param name="volume" value="1.0"/> <!-- [0, 10] --> <param name="pitch" value="0"/> <!-- [-12, 12] --> <param name="bitrate" value="32000"/> <!-- default 128000, option:[32000,64000,128000] --> <param name="audio-sample-rate" value="8000" /> <!-- default 32000, option: [8000,16000,22050,24000,32000] --> <param name="format" value="pcm" /> <!-- default mp3, option: mp3, pcm, flac--> <param name="channel" value="1" /> <!-- default 1, option: 1, 2 --> <param name="speed" value="1.0" /> <!-- default 1.0, option: [0.5, 2.0] --> <param name= "voice-id" value="liepin_0627_number1" /> <param name="stream" value="true" /> <param name= "curl-timeout" value="60" /> <param name= "curl-connect-timeout" value="10" /> </ttsv2> </configuration>
参数与 T2A stream 不同处:
新增参数:
- channel: 音频通道数,默认为 1,可选 1 或 2, 一般不用修改
- audio-sample-rate: 音频采样率:增加了8000 选项,请使用8000,因为与FreeSWITCH兼容,可以省去重采样的计算。
- model: 模型本api支持以下模型, 具体参考官方文档模型列表部分
speech-01-turbo
speech-01-240228
speech-01-turbo-240228
缓存失败异常情况说明
HTTP 请求传输时长: 不论
minimax
还是minimaxv2
,都是基于 HTTP 协议的 TTS 引擎,如果请求的文本过长,HTTP 数据传输可能需要较长时间,所以建议配置curl-timeout
值较大些,建议60,否则如果配置太短,可能会导致不能完整的接收合成的音频数据,这样最终会导致缓存数据失败。数据传输过长中出现异常情况:数据传输中出现异常情况也会导致缓存失败,异常情况可以通过日志捕获到,一般是
invalid chunk data format
这样的提示。
说明:如果 HTTP 下载的过程中发生 TTS 打断(break),或者通话挂机,不会影响 TTS 缓存的生成。如果是发生 通话挂机,客户发了 SIP BYE 后,FS 需要等 TTS 下载完成之后才会回 SIP 200 OK
。(在此期间可能会不断的收到 SIP BYE,超过一定时间后 客户端会报错)。
AISTREAM
基于 WebSocket 的 AI 流媒体通信协议。本协议目前处于 Beta 版。
文档正在完善中,敬请期待。