更新时间:2024-12-10 GMT+08:00
分享

语音同步合成WebSocket接口

前提条件

  1. 本接口目前仅支持“华北-北京四”和“华东-上海一”区域使用,且必须提交工单申请开通后才能使用。
  2. 使用本接口前,需要在MetaStudio控制台服务概览页面,开通“声音合成”的按需计费。

    详细操作为:单击“声音合成”卡片中的“去开通”,在弹出的“开通按需计费服务提示”对话框中,勾选同意协议。单击“确定”,开通按需计费。开通后的效果如图1所示。

    如需使用第三方声音进行语音合成,请购买出门问问声音套餐

    图1 声音合成

功能介绍

该接口用于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

  2. 认证鉴权

    header需要增加X-Auth-Token字段用于鉴权。获取认证鉴权的方式,详见认证鉴权

  3. 发送请求

    发送请求的流程如下所示:

    1. 建立WebSocket连接。
    2. 发送TTS合成请求,详见请求参数

请求参数

表1 请求Header参数

参数

是否必选

参数类型

参数位置

描述

X-Auth-Token

String

header

用户Token。使用Token鉴权方式时必选。

通过调用IAM服务获取用户Token接口获取。

响应消息头中X-Subject-Token的值。

command

String

body

指令类型。

  • START:语音合成请求
  • PRELOAD:预加载音色模型

text

String

body

待合成语音的文本。

command取值为START时,为必填项。

job_id

String

body

请求标识ID,用于跟踪请求。

建议每次合成请求时,设置不同的值。

config

Conifg

body

配置参数。

command取值为START时,为必填项。

表2 Config结构体

参数

是否必选

参数类型

参数位置

描述

voice_asset_id

String

body

音色ID,获取方式详见获取音色ID

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不匹配

请检查携带的鉴权信息

对应处理方式如下所示:

403

MSS.000000004

非法访问,未鉴权或者鉴权失败

非法访问,未鉴权或者鉴权失败

请联系技术支持。

相关文档