语音同步合成WebSocket接口
前提条件
- 本接口目前仅支持“华北-北京四”和“华东-上海一”区域使用,且必须提交工单申请开通后使用。
- 已在MetaStudio控制台服务概览页面,开通“声音音频合成”计费项的按需计费。按需计费价格区分基础版和专业版,预置音色的计费标准详见预置音色计费标准。如需使用第三方声音进行语音合成,请购买出门问问声音套餐。
开通按需计费的操作为:单击“声音音频合成”卡片中的“去开通”,在弹出的“开通按需计费服务提示”对话框中,勾选同意协议。单击“确定”,开通基础版和专业版按需计费,开通后的效果如图1所示。
功能介绍
该接口用于TTS流式合成音频,用于文本转化为语音,并实时返回合成的音频数据。
调用方法
请求参数
参数 | 是否必选 | 参数类型 | 参数位置 | 描述 |
|---|---|---|---|---|
X-Auth-Token | 否 | String | header | 用户Token,以header参数方式携带。使用Token鉴权方式时必选。 通过调用IAM服务获取用户Token接口获取。 响应消息头中X-Subject-Token的值。 须知:X-Auth-Token和once_code必须二选一进行配置。 |
once_code | 否 | String | query | 一次性token,获取方式详见外部接口-获取TTS一次性token。 须知:
|
X-Voice-Asset-Id | 否 | String | header | 音色ID,用于WebSocket链路绑定资产,携带方式二选一(建议以header参数方式携带,query参数方式用于前端JS发起建链的场景)。 绑定音色资产后,后续合成会默认使用该音色ID进行合成。音色ID的获取方式详见获取音色ID。不同Region的计费标准,详见预置音色计费标准。 |
voice_asset_id | query | |||
command | 是 | String | body | 指令类型。
|
text | 否 | String | body | 待合成语音的文本。 command取值为START时,为必填项。 |
job_id | 否 | String | body | 请求标识ID,用于跟踪请求。 建议每次合成请求时,设置不同的值。 |
is_concurrent_resource | 否 | boolean | body | 是否使用包周期路数资源进行计费。 取值如下:
|
config | 否 | body | 配置参数。 command取值为START时,为必填项。 |
参数 | 是否必选 | 参数类型 | 参数位置 | 描述 |
|---|---|---|---|---|
voice_asset_id | 否 | String | body | 音色ID,获取方式详见获取音色ID。 不同Region的计费标准,详见预置音色计费标准。 须知:如果链路已绑定音色资产,则无需设置当前参数;如果链路未绑定,则必须设置此参数。 |
speed | 否 | integer | body | 语速。
取值范围:[50,200] 默认值:100 |
pitch | 否 | integer | body | 音高。 取值范围:[50,200] 默认值:100 |
volume | 否 | integer | body | 音量。 取值范围:[90,240] 默认值:140 |
sample_rate | 否 | String | body | 采样率。 取值如下所示:
|
请求示例
TTS语音合成请求示例,如下所示:
{
"text": "大家好,我是小花",
"command": "START",
"job_id": "cdb8976936914fd09d807fb746dcd2dd",
"config": {
"speed": 100,
"pitch": 100,
"volume": 140,
"sample_rate": "auto",
"business_type": "xxx",
"voice_asset_id": "c84054e7f29543048d585f61248c64c9"
}
} 预加载请求示例,如下所示:
{
"command": "PRELOAD",
"config": {
"voice_asset_id": "c84054e7f29543048d585f61248c64c9"
}
} 响应参数
参数 | 参数类型 | 参数位置 | 描述 |
|---|---|---|---|
error_code | String | body | 错误码。 取值如下:
|
error_msg | String | body | 错误描述。 |
job_id | String | body | 任务ID。 |
is_end | boolean | body | 本次请求后续是否还有消息帧。 取值如下:
|
sample_rate | String | body | voice_data中音频的采样率。 取值示例:16000、24000。 |
voice_data | String | body | 音频数据,为base64编码的pcm音频流。 pcm格式为16位单声道,采样率见sample_rate字段,默认16000。 |
响应示例
成功响应示例,如下所示:
{
"error_code": "0",
"error_msg": "SUCCESS",
"job_id": "faf94e21c066**********a733740f8e",
"is_end": false,
"voice_data": "AgAAAAEAAQACAAEAAQAAAAAAAQACAAEAAwAAAAEAAAABAAEAAAABAAEAAQACAAEAAAAAAAAAAAAAAAEAAwACAAEAAQACAAEAAgABAAIAAAACAAIAAQABAAIAAgABAAIAAgAAAAEAAQABAAIAAAABAAIAAAAAAAIAAAABAAEAAQAAAAEAAwABAAMAAAABAAIAAAAAAAEAAQACAAEAAQAAAAMAAQAAAAAAAQABAAIAAAACAAAAAAAAAAIAAgABAAAAAgABAAMAAQABAAAAAAABAAIAAgABAAIAAwABAAAAAQACAAEAAQABAAAAAgADAAIAAAABAAIAAAAAAAEAAAACAAEAAQAAAAAAAAABAAIAAQABAAEAAAAAAAEAAAABAAEAAAABAAAAAgABAAEAAgACAAEAAQABAAAAAQAAAAIAAQAAAAEAAAABAAEAAQACAAAAAAABAAAAAgACAAEAAgABAAEAAAAAAAEAAQAAAAAAAgAAAAIAAQACAAEAAQAAAAMAAgACAAIAAAABAAEAAQACAAIAAQAAAAAAAAABAAIAAAAAAAEAAgABAAIAAgADAAIAAgABAAEAAgACAAEAAQABAAEAAgADAAEAAAABAAAAAQACAAEAAQACAAIAAQABAAEAAAABAAAAAQABAAAAAQAAAP//AgD//wEAAgABAAMAAAACAAAAAQACAAEAAQACAAEAAgACAAIAAQACAAAAAQAAAAIAAQABAAEAAQAAAAAAAQACAAEAAgAAAAAAAAADAAIAAgACAAIAAQACAAEAAQAAAAAAAQABAAEAAQAAAAEAAQACAAEAAQAAAAEAAAACAAEAAAACAAEAAAABAAIAAAACAAAAAQABAAIAAQABAAAAAQABAAEAAgABAAIAAQACAAIAAgABAAAAAAACAAIAAQABAAIAAQADAAAAAAABAAEAAQAAAAEAAQAAAAIAAQABAAEAAgAAAAIAAQABAAEAAwABAAAAAQAAAAIAAgABAAIAAAAAAAAAAAABAAIAAAABAAEAAQABAAIAAQAAAAEAAQAAAAEAAQACAAEAAgAAAAAAAQABAAAAAgABAAAAAQABAAIAAQAAAAAAAAACAAAAAgABAAEAAQADAAAAAQAAAAEAAQADAAAAAQABAAIAAQADAAAAAQABAAEAAAD//wEAAAAAAAEA//8AAAIAAgABAAEAAgABAAEAAQABAAMAAAAAAAEAAQABAAIAAQACAAEAAQACAAIAAQAAAAEAAgACAAMAAQADAAEAAgABAAEAAAADAAAAAAAAAAMAAgAAAAEAAwAAAAEAAQABAAIAAgABAAIAAgACAAEAAAAAAAMAAQADAAEA////////AAACAAEAAQACAAEAAAABAAEAAgABAAEAAQAAAAIAAQAAAP//AgAAAAEAAgABAAAAAAABAAAAAQABAAEAAgABAAAAAgACAAAAAQAAAAIAAgABAAAAAAACAAEA//8AAAAAAgAAAAEAAAACAP//AAAAAAEAAAABAAIAAgAAAAEAAQABAAAAAAAAAAEAAwAAAP////8BAAAAAQABAAIAAAADAAEAAgABAAEAAgABAAEAAAD//wEAAgD//wEAAgACAAAAAQAAAAEAAwACAAMAAgACAAEAAQABAAMAAQABAAEAAQAAAAIAAQABAAEAAQABAAIAAgAAAAEAAAABAAIAAQAAAAIAAAAAAAEAAQABAAEAAgABAAAAAAABAAAAAAAAAAEAAQABAAEAAAABAAAAAQABAAIAAQAAAAIAAgAAAAAAAwAAAAEAAAABAAEAAQABAAEAAgABAAAAAgABAAAAAAACAAAAAgAAAAAAAAD//wAA//8DAAEAAQABAAAAAAAAAAAAAQADAAEAAQACAAMAAAABAAAAAAAAAAAAAAACAAIAAgABAAEAAAACAAEAAQAAAAAAAAAAAAAA//8AAAIA//8CAAIAAgABAAIAAAABAAAA//////////8BAAAA//8CAAIAAQABAAEAAAAAAAEAAQACAAEAAQABAAIAAAAAAAAAAAABAAMAAQACAAEAAQAAAAEAAQABAAEAAwABAAIAAAABAAEAAgACAAMAAAD+/////v///wAAAQACAAAA//8BAP//AAABAAIAAAABAAIAAQADAAEAAQABAAAAAQABAAIAAgABAAEAAQABAAEAAgABAAEAAgADAAEAAQABAAAAAQAAAAEAAAACAP//AAACAAAAAAACAAMAAgABAAAAAgACAAAAAQAAAAAAAAAAAAEAAQABAAAAAQABAAAAAQAAAAEAAgACAAIAAgD//wEAAAACAAEAAwAAAP//AgABAAMAAgABAAAAAwAAAAAAAAABAAEAAQABAAAA//8CAAEAAAABAAMAAgAAAAAAAAAAAAAAAAD//wEAAwAAAAIAAAABAAEAAgABAAEAAQACAAAAAQAAAAEAAQACAAIAAQABAAEAAAD//wAAAwABAAEAAAAAAAAA///+////AAABAAAAAAAAAAAAAgAAAAAAAwAAAAAAAQACAAEAAQABAAEAAgAAAAAAAAABAAIAAQACAAAAAQACAAEAAAD//wAAAAAAAAIAAAABAAIAAQABAAIAAAAAAAAAAAD///////8AAAIAAQAAAAAAAQAAAAAA////////AgAAAAIAAQABAAEAAgACAAAAAAABAAAAAAAAAAMA//8AAAAAAgAAAAAAAQACAAIAAAAAAAEAAwD/////AgABAAEAAQAAAP//AAD//wIAAQABAP//AAAAAAAAAgAAAAEAAAACAAIAAAABAAIAAQABAAAAAQAAAAAAAAAAAAAAAQABAAIAAQACAAEA//8AAAAAAQABAAAAAQABAAIAAQAAAP//AgABAAIAAgAAAAIAAgD//wEAAQABAAAAAAD//wIAAAACAAEAAgAAAP///////wAAAAABAAEAAQABAAEAAQD///////8CAAEAAAABAAIAAAD//wAAAgABAAIAAQABAAAAAAAAAAAAAgACAAEAAQABAAIA//8CAAAAAQAAAAEAAQAAAAIA//8BAAIAAAAAAP//AgAAAAEAAAAAAAAAAQABAAEAAQACAAEAAQABAAAAAQABAAEAAQAAAAEAAAAAAAAA//8BAAAAAAAAAAEAAgABAAEAAAACAAIAAgABAAIAAQABAAAAAQABAAEAAQADAAEAAQABAAIAAQD//wEAAAAAAAAAAQABAAEAAAAAAP////8CAP//AQABAAEAAQABAAEAAgAAAP///////wAA//8BAAEAAQADAAEAAQAAAAEAAAABAAEAAQAAAP//AQD+/wAA//8BAAIAAQABAAEAAQAAAAAAAAABAAIA//8CAP//AAABAAEAAAAAAAIAAAAAAAEAAQABAAIAAAAAAAEAAwABAAAAAgABAAEAAgAAAAEAAQACAAEAAgAAAAIAAQAAAAAAAgAAAP3//v///wAA/////////v///wAAAQABAAIAAAD///////8CAAIAAgD//wEAAAAAAAEAAQABAAEAAgABAAEAAQABAAIAAgACAAEAAAABAAEAAQA=",
"sample_rate": "16000"
} 鉴权失败示例,如下所示:
{
"error_code": "401",
"error_msg": "ReturnCode(MSS.20050023: AUTHORIZATION_FAILED. Token is empty). ",
"trace_id": "sessionId-6ec4493f0b254293b6f29102c244610e",
"is_end": false
} 响应失败示例,如下所示:
{
"error_code": "500",
"error_msg": "ReturnCode(MSS.20050028: TTS_ALGORITHM_SIDE_ERROR. {\"errorCode\":52439248,\"errorMsg\":\"【TTS】 合成过程遇到异常 requestId state:false : internal error\"}). ",
"trace_id": "sessionId-0783354bcc7a4b818aa0250721663992-jobId-ddecf4d2ae6947b5bb97e3c6c36274be@wx123456789",
"is_end": false
} 错误码
状态码 | 错误码 | 错误信息 | 描述 | 处理措施 |
|---|---|---|---|---|
400 | MSS.20050053 | 没有额度 | 声音合成未开启按需付费。 | 声音合成开启按需付费。 |
401 | MSS.20050023 | websocket接口鉴权失败 包含下述信息:
| websocket接口鉴权失败 详情如下所示:
| 请检查携带的鉴权信息 对应处理方式如下所示: |
403 | MSS.000000004 | 非法访问,未鉴权或者鉴权失败 | 非法访问,未鉴权或者鉴权失败 | 请联系技术支持。 |


