跳到主要内容

流式音色转换WebSocket API

使用说明

基于websocket的流式音色转换接口。

目录

使用要求

项目要求
发送格式当发送音频数据时采用二进制格式,其他采用文本格式发送json数据
响应格式当接收音频数据时采用二进制格式,其他采用文本格式返回json数据
输入音频数据属性仅支持采样率16k,16bit,单通道PCM数据
输入音频格式PCM(无压缩的PCM或WAV音频流)
音频需满足采样率16k、位长16bit、单声道;其他格式需满足采样率16k、单声道
数据发送建议音频流每1000ms发送一次,每次发送1000ms的数据。发送间隔必须严格等于发送的数据量。如果发送间隔大于发送的数据量,可能会导致流式结果的卡顿

建立请求后,数据发送间隔不能超过10s。若长时间为发送数据(超过10s),服务会返回错误消息并结束识别

如果用户发送数据过快,可能导致引擎出现过载错误

服务地址与鉴权方式

外网访问地址: wss://aibook-api.mthreads.com:32314/api/v1/streaming_vc

鉴权方式:

在URL中使用鉴权token:

wss://aibook-api.mthreads.com:32314/api/v1/streaming_vc?token=${your_token}

注意: 访问令牌(Access Token)请联系我们获取。联系方式: meng.cai@mthreads.com, ye.wang@mthreads.com

交互流程

VC流式转换时序图

发送请求

开始转换

开始转换时,首先以json格式传输相关配置。

参数类型层级必填说明
typeString1消息类型,开始转换时需使用"StartConversion"
payloadDict1指定输入输出音频格式
voiceString2目标音色名称,可用名称见"说话人列表"部分
input_infoDict2输入音频相关参数
sample_rateInteger3输入音频采样率,仅支持16000
channelsInteger3输入音频通道数,仅支持1
bitsInteger3输入音频位长,仅支持16
audio_encodingString3输入音频编码格式,仅支持pcm
output_infoDict2输出音频相关参数
sample_rateInteger3输出音频采样率,仅支持48000
channelsInteger3输出音频通道数,仅支持1
bitsInteger3输出音频位长,仅支持16
audio_encodingString3输出音频编码格式,仅支持pcm

示例:

{
"type":"StartConversion",
"payload":{
"voice":"xiaoling",
"input_info":{
"sample_rate":16000,
"channels":1,
"bits":16,
"audio_encoding":"pcm"
},
"output_info":{
"sample_rate":48000,
"channels":1,
"bits":16,
"audio_encoding":"pcm"
}
}
}

发送数据

发送二进制音频数据

结束转换

结束转换时,将type设置为"StopConversion"

参数类型层级必填说明
typeString1消息类型,结束转换时需使用"StopConversion"

示例:

{
"type":"StopConversion"
}

返回信息

转换正常开始

发送"开始转换"的请求后,如果服务正常开始,则返回"转换正常开始"的响应。响应采用json编码,说明如下:

参数类型说明
typeString消息类型,此时为:"ConversionStarted"
task_idString用于记录本次会话的任务ID
statusInteger状态码
status_textString状态消息

示例:

{
"type":"ConversionStarted",
"task_id":"task_id",
"status":1000,
"status_text":"success"
}

返回转换后的数据

返回二进制音频数据

转换正常结束

转换结束后返回响应中type为"ConversionCompleted"

参数类型说明
typeString消息类型,此时为:"ConversionCompleted"
task_idString用于记录本次会话的任务ID
statusInteger状态码
status_textString状态消息

示例:

{
"type":"ConversionCompleted",
"task_id":"task_id",
"status":1000,
"status_text":"success"
}

转换错误

若转换过程中发生错误,则返回type为"Error"的响应

示例:

{
"type":"Error",
"task_id":"task_id",
"status":3002,
"status_text":"service timeout"
}

支持音色

音色名称性别参数值
晓凌xiaoling

状态码

状态码状态文本说明
1000success!成功
1001queueing排队中
1002running识别中
2001appid doesn't exist!appid不存在
2002authorization failed.鉴权失败
2003too many requests并发数量过多
2004service overload数据发送过快,服务超负荷
3001service is busy服务器忙
3002service timeout服务处理超时
3003client is disconnected未完成前客户端主动断开
3004error occured during processing识别过程中发生错误
3005cannot find the taskid任务过期,或taskid不存在
4001unknown parameter is given.输入了未知/不支持的参数
4002given value is invalid参数值非法
4003request invalid请求消息格式错误
4004fail to read the audio音频解码失败
4005unsupported audio format音频格式不支持
4006audio too large音频文件过大
4007audio too long音频时长过长
4008fail to download the audio file文件下载失败
4009data timeout发送数据超时,等待下一包太久,导致识别结束
4010url is invalidURL非法
4011callback url is invalidcallback URL非法
4012fail to check content-lengthcontent-length 检查失败
4013fail to check md5音频md5校验失败
4014fail to upload audio data文件上传失败或超时
4015duplicated upload done detected重复发送UploadDone
4016duplicated start detected未按照规定的交互流程发送请求
5001unsupported voice不支持音色

示例代码

请参考:https://github.com/yiliu-mt/mtvc_examples/blob/master/streaming_vc/python/streaming_demo.py