
# 声音复刻接口
#### 前提条件
- 确保已按照[配置Python环境](https://support.huaweicloud.com/sdkreference-sis/sis_05_0056.html)配置完毕。
- 请参考[SDK（websocket）](https://support.huaweicloud.com/sdkreference-sis/sis_05_0004.html)获取最新版本SDK包。
- 使用预置音色或注册的声音合成语音。
- 仅上海一局点支持该接口。
 
#### 初始化Client
初始化vcs_client，详见[表1]。
 表1vcs_client 
| 参数名称             | 是否必选 | 参数类型   | 描述                                                                                     |
|:---|:---|:---|:---|
| ak               | 是    | String | 用户的ak，可参考[AK/SK认证](https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html)。 |
| sk               | 是    | String | 用户的sk，可参考[AK/SK认证](https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html)。 |
| region           | 是    | String | 区域，如：cn-east-3。具体请参考[终端节点](https://support.huaweicloud.com/api-sis/sis_03_0004.html)。  |
| project_id       | 是    | String | 项目ID，同region一一对应，参考获取项目ID。                                                             |
| service_endpoint | 否    | String | 终端节点，一般使用默认即可。                                                                         |
   
#### 请求参数
请求类型为vcs_request，详见[表2]。
 表2vcs_request 
| 参数名称       | 是否必选 | 参数类型   | 描述                                       |
|:---|:---|:---|:---|
| text       | 是    | String | 待合成文本，文本的长度不大于300字符。                     |
| audio_path | 是    | String | 待合成音频存储路径。                               |
| config     | 是    | Object | 详见[表3]。 |
   
 表3Config 
| 参数名称         | 是否必选 | 参数类型    | 描述                                                                                     |
|:---|:---|:---|:---|
| audio_format | 否    | String  | 合成音频的格式。支持wav、mp3、pcm，默认wav                                                            |
| sample_rate  | 否    | String  | 合成音频的采样率。支持8kHz、16kHz、24kHz，默认16kHz                                                    |
| voice_name   | 是    | String  | 合成所使用的音色名称，可选择用户注册的音色或预置音色。预置音色取值范围参考[表4]。           |
| speed        | 否    | Integer | 语速。 取值范围：-500\~500 默认值：0   |
| pitch        | 否    | Integer | 音高。 取值范围： -500\~500 默认值：0 |
| volume       | 否    | Integer | 音量。 取值范围：0\~100 默认值：50     |
   
 表4Timbre 
| 参数名称 | voice_name                  | 类型   | 使用场景 | 支持采样率（Hz）  |
|:---|:---|:---|:---|:---|
| 华小莉  | chinese_huaxiaoli_common    | 标准女声 | 中英混合 | 8k/16k/24k |
| 华小智  | chinese_huaxiaozhi_common   | 男童声  | 中英混合 | 8k/16k/24k |
| 华小天  | chinese_huaxiaotian_common  | 朝气男声 | 中英混合 | 8k/16k/24k |
| 华小媛  | chinese_huaxiaoyuan_common  | 成熟女声 | 中英混合 | 8k/16k/24k |
| 华小静  | chinese_huaxiaojing_common  | 女童声  | 中英混合 | 8k/16k/24k |
| 华小博  | chinese_huaxiaobo_common    | 标准男声 | 中英混合 | 8k/16k/24k |
| 华小柔  | chinese_huaxiaorou_common   | 标准女声 | 中英混合 | 8k/16k/24k |
| 华小悠  | chinese_huaxiaoyou_common   | 嘹亮女声 | 中英混合 | 8k/16k/24k |
| 华小晴  | chinese_huaxiaoqing_common  | 青春女声 | 中英混合 | 8k/16k/24k |
| 华小溪  | chinese_huaxiaoxi_common    | 温柔女声 | 中英混合 | 8k/16k/24k |
| 华小彤  | chinese_huaxiaotong_common  | 俏皮女声 | 中英混合 | 8k/16k/24k |
| 华小雅  | chinese_huaxiaoya_common    | 标准女声 | 中英混合 | 8k/16k/24k |
| 华小伟  | chinese_huaxiaowei_common   | 成熟男声 | 中英混合 | 8k/16k/24k |
| 华小帅  | chinese_huaxiaoshuai_common | 标准男声 | 中英混合 | 8k/16k/24k |
| 华小杰  | chinese_huaxiaojie_common   | 温柔男声 | 中英混合 | 8k/16k/24k |
   
#### 响应参数
Python SDK响应结果为Json格式，正确响应详见[表5]，错误响应详见[表7]。
 表5响应参数说明 
| 参数名称     | 参数类型   | 描述                                                              |
|:---|:---|:---|
| trace_id | String | 服务内部的令牌，可用于在日志中追溯具体流程。                                          |
| result   | Object | 调用成功时为合成语音内容，调用失败时无此字段，详见[表6]。 |
   
 表6result数据结构 
| 参数名称 | 参数类型   | 描述                                                                       |
|:---|:---|:---|
| data | String | 生成的语音数据，以Base64编码格式返回。用户如需生成音频，需要将返回的Base64编码格式的数据解码成byte数组，再保存为对应格式的音频。 |
   
 表7错误响应 
| 参数名称       | 参数类型   | 描述                     |
|:---|:---|:---|
| error_code | String | 调用失败时的错误码。 调用成功时无此字段。  |
| error_msg  | String | 调用失败时的错误信息。 调用成功时无此字段。 |
   
#### 请求示例
- 说明："endpoint"即调用API的请求地址，不同服务不同区域的"endpoint"不同，具体请参见终端节点，当前仅支持上海一。
- 调用合成API，将文本合成为语音。
  ```
  import base64
  import os
  from huaweicloud_sis.bean.vcs_register_voice_request import RegisterVoiceRequest
  from huaweicloud_sis.bean.vcs_synthesis_request import VcsSynthesisRequest
  from huaweicloud_sis.client.vcs_client import VcsClient
  from huaweicloud_sis.bean.sis_config import SisConfig
  # 鉴权参数
  # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全； 
  # 本示例以ak和sk保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SIS_AK/HUAWEICLOUD_SIS_SK/HUAWEICLOUD_SIS_PROJECT_ID。
  ak = os.getenv("HUAWEICLOUD_SIS_AK")             # 从环境变量获取ak 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
  assert ak is not None, "Please add ak in your develop environment"
  sk = os.getenv("HUAWEICLOUD_SIS_SK")             # 从环境变量获取sk 参考https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html
  assert sk is not None, "Please add sk in your develop environment"
  region = ''         # region，支持上海一region，cn-east-3
  project_id = ""     # project id 同region一一对应，参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
  service_endpoint = "" # 可选，自定义endpoint，传入VcsClient(ak, sk, region, project_id, sis_config=config)
  # 使用该脚本前,保证要使用的声音已经注册,voice_name为声音名称。若没有注册声音,请使用vcs_register_and_request.py脚本，注册声音和查询声音
  voice_name = "" # 音色名称，可以使用注册音色或预置音色
  audio_path = ""  # 待合成结果保存路径,例如"D://SIS/audio.wav"
  text = ""  # 待合成文本
  def synthesis_example(text, voice_name):
      # step1 初始化客户端
      config = SisConfig()
      config.set_connect_timeout(10)       # 设置连接超时，单位s
      config.set_read_timeout(60)          # 设置读取超时，单位s
      vcs_client = VcsClient(ak, sk, region, project_id, sis_config=config)
      synthesis_request = VcsSynthesisRequest(text, voice_name)
      # 设置采样率，8000 or 16000 or 24000, 默认16000
      synthesis_request.set_sample_rate("16000")
      # 设置音频格式, wav、pcm or mp3, 可参考api文档
      synthesis_request.set_audio_format("wav")
      # 设置音量，[0, 100]，默认50
      synthesis_request.set_volume(50)
      # 设置音高, [-500, 500], 默认0
      synthesis_request.set_pitch(0)
      # 设置音速, [-500, 500], 默认0
      synthesis_request.set_speed(0)
      synthesis_request.set_saved(True) # 是否对合成结果进行保存
      synthesis_request.set_saved_path(audio_path)  # 保存路径
      result = vcs_client.synthesis(synthesis_request)
      print(result)
  if __name__ == '__main__':
      # 合成
      synthesis_example(text, voice_name)
  ```
  
  
 
#### 响应示例
状态码：200
成功响应示例
```
{  
    "trace_id": "567e8537-a89c-13c3-a882-826321939651",
     "result":{ 
        "data":
"/+MgxAAUeHpMAUkQAANhuRACAIAgKHKQmRisVo0aNAgQIIQyCgGBiwfB8H4IAgCAJg+D4Ph+IAQBBywfB8HwQDGAwfB8Hwf..." 
   }  
}
```
状态码：400
失败响应示例
```
{  
    "error_code": "SIS.1207",  
    "error_msg": "'sample_rate' is invalid"          
}
```
