
# 语音同步合成WebSocket接口
#### 前提条件
1. 本接口目前仅支持"华北-北京四"和"华东-上海一"区域使用，且必须[提交工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)申请开通后使用。
2. 已在MetaStudio控制台服务概览页面，开通"声音音频合成"计费项的按需计费。按需计费价格区分基础版和专业版，预置音色的计费标准详见[预置音色计费标准](https://support.huaweicloud.com/api-metastudio/metastudio_02_0060.html)。如需使用第三方声音进行语音合成，请[购买出门问问声音套餐](https://support.huaweicloud.com/usermanual-metastudio/metastudio_05_0015.html)。
   开通按需计费的操作为：单击"声音音频合成"卡片中的"去开通"，在弹出的"开通按需计费服务提示"对话框中，勾选同意协议。单击"确定"，开通基础版和专业版按需计费，开通后的效果如[图1]所示。
   图1声音合成   
   ![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000002279250734.png) 
 
#### 功能介绍
该接口用于TTS流式合成音频，用于文本转化为语音，并实时返回合成的音频数据。
#### 调用方法
1. 构造请求 请求URL：wss://metastudio-api.{region}.myhuaweicloud.com:443/v1/{project_id}/ttsc/jobs
   region当前仅支持下述区域：
   - 华北-北京四：cn-north-4
   
   - 华东-上海一：cn-east-3
   
   
   project_id取值，详见[获取项目ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0006.html)。
   
2. 认证鉴权 header需要增加X-Auth-Token字段用于鉴权。获取认证鉴权的方式，详见[认证鉴权](https://support.huaweicloud.com/api-metastudio/metastudio_02_0012.html)。
   
3. 发送请求 发送请求的流程如下所示：
   1. 建立WebSocket连接。
   
   2. 发送TTS合成请求，详见[请求参数]。
    
 
 #### 请求参数
表1请求参数 
| 参数                     | 是否必选 | 参数类型                                             | 参数位置   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|:---|
| 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](https://support.huaweicloud.com/api-metastudio/CreateTtsOnceCode.html)。 须知： - 一次性token的有效期为5分钟，超时后需要重新获取。  - 如果一次性token已被使用过一次，也需要重新获取。  - X-Auth-Token和once_code必须二选一进行配置。   |
| X-Voice-Asset-Id       | 否    | String                                           | header | 音色ID，用于WebSocket链路绑定资产，携带方式二选一（建议以header参数方式携带，query参数方式用于前端JS发起建链的场景）。 绑定音色资产后，后续合成会默认使用该音色ID进行合成。音色ID的获取方式详见[获取音色ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0054.html)。不同Region的计费标准，详见[预置音色计费标准](https://support.huaweicloud.com/api-metastudio/metastudio_02_0060.html)。                                                                                                                                                                                                                        |
| voice_asset_id         | 否    | String                                           | query  | 音色ID，用于WebSocket链路绑定资产，携带方式二选一（建议以header参数方式携带，query参数方式用于前端JS发起建链的场景）。 绑定音色资产后，后续合成会默认使用该音色ID进行合成。音色ID的获取方式详见[获取音色ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0054.html)。不同Region的计费标准，详见[预置音色计费标准](https://support.huaweicloud.com/api-metastudio/metastudio_02_0060.html)。                                                                                                                                                                                                                        |
| command                | 是    | String                                           | body   | 指令类型。 - START：语音合成请求  - PRELOAD：预加载音色模型                                                                                                                                                                                                                                                                                      |
| text                   | 否    | String                                           | body   | 待合成语音的文本。 command取值为START时，为必填项。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| job_id                 | 否    | String                                           | body   | 请求标识ID，用于跟踪请求。 建议每次合成请求时，设置不同的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| is_concurrent_resource | 否    | boolean                                          | body   | 是否使用包周期路数资源进行计费。 取值如下： - true：使用包周期路数资源进行计费。  - false：使用一次性或按需资源进行计费。                                                                                                                                                                                                                            |
| config                 | 否    | [Config] | body   | 配置参数。 command取值为START时，为必填项。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
 表2Config结构体 
| 参数             | 是否必选 | 参数类型    | 参数位置 | 描述                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|:---|
| voice_asset_id | 否    | String  | body | 音色ID，获取方式详见[获取音色ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0054.html)。 不同Region的计费标准，详见[预置音色计费标准](https://support.huaweicloud.com/api-metastudio/metastudio_02_0060.html)。 须知：如果链路已绑定音色资产，则无需设置当前参数；如果链路未绑定，则必须设置此参数。                                                                    |
| speed          | 否    | integer | body | 语速。 - 当取值为"100"时，表示一个成年人正常的语速，约为250字/分钟。  - 50表示0.5倍语速，100表示正常语速，200表示2倍语速。   取值范围：\[50,200\] 默认值：100                        |
| pitch          | 否    | integer | body | 音高。 取值范围：\[50,200\] 默认值：100                                                                                                                                                                                                                                                                                  |
| volume         | 否    | integer | body | 音量。 取值范围：\[90,240\] 默认值：140                                                                                                                                                                                                                                                                                    |
| sample_rate    | 否    | String  | body | 采样率。 取值如下所示： - 取值为auto：自适应采样率。实际采样率由实际音色类型决定，可能值为16000、24000、32000、22050和4100。  - 其他值或者不传值的情况，为固定采样率16000。   |
   
#### 请求示例
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"
    }
}
```
#### 响应参数
表3响应Body参数 
| 参数          | 参数类型    | 参数位置 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| error_code  | String  | body | 错误码。 取值如下： - 0：成功  - 401：认证失败  - 403：鉴权失败  - 500：内部错误   |
| error_msg   | String  | body | 错误描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| job_id      | String  | body | 任务ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| is_end      | boolean | body | 本次请求后续是否还有消息帧。 取值如下： - false：未结束，后续会继续返回消息帧。  - true：结束。                                                                                                                                                       |
| 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
}
```
#### 错误码
表4错误码 
| 状态码 | 错误码           | 错误信息                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                         | 处理措施                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|:---|
| 400 | MSS.20050053  | 没有额度                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 声音合成未开启按需付费。                                                                                                                                                                                                                                                                                                                                                                                                               | 声音合成开启按需付费。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 401 | MSS.20050023  | websocket接口鉴权失败 包含下述信息： - Token is empty  - Token is expired  - ProjectId is not match.   | websocket接口鉴权失败 详情如下所示： - 认证失败，token为空  - 认证失败，token过期  - token和租户id不匹配   | 请检查携带的鉴权信息 对应处理方式如下所示： - 请参考[认证鉴权](https://support.huaweicloud.com/api-metastudio/metastudio_02_0012.html)获取token。  - 请参考[认证鉴权](https://support.huaweicloud.com/api-metastudio/metastudio_02_0012.html)重新获取token。  - 重新获取与token匹配的项目ID，详见[获取项目ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0006.html)。   |
| 403 | MSS.000000004 | 非法访问，未鉴权或者鉴权失败                                                                                                                                                                                                                                                                                                                                                                                                                                          | 非法访问，未鉴权或者鉴权失败                                                                                                                                                                                                                                                                                                                                                                                                             | 请联系技术支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
