帮助与文档 > 产品文档 > 智能语音服务 > API文档 > 语音合成模型定制
语音合成模型定制

个性化音色定制

说明

Hi,您好,欢迎使用有道智云个性化语音定制接口服务。

本文档主要针对需要集成HTTP API的技术开发工程师,详细描述个性化语音定制相关的技术内容。

如果您有与我们商务合作的需求,可以通过以下方式联系我们:

商务邮箱: AIcloud_Business@corp.youdao.com

如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

客服QQ:1906538062

智云翻译技术交流QQ 1群: 652880659

智云翻译技术交流QQ 2群: 669384425

智云翻译技术交流QQ 3群: 807539209

智云翻译技术交流QQ 4群: 936752411

联系邮箱: zhiyun@corp.youdao.com

温馨提示:

  • 本文档主要针对开发人员,接入测试前需要获取应用ID和应用密钥;如果您还没有,请按照 新手指南 获取。
  • 平台向每个账户赠送50元的体验金,供用户集成前测试所用。

接口说明

个性化语音定制服务,基于网易有道的语音识别技术,通过上传少量录音,训练语音引擎定制自己声音模型,赋予产品声音形象,可在读小说、播音主持、讲故事、客服服务等场景应用。 服务主要分模型定制和模型调用两部分。

协议须知

调用方在集成个性化语音定制服务API时,请遵循以下规则。

规则 描述
传输方式 HTTPS
请求方式 GET或POST
字符编码 统一使用UTF-8 编码
请求格式 表单
响应格式 JSON

接口调用参数

个性化语音定制调用地址:

https://openapi.youdao.com

音频格式

格式支持:wav(不压缩,pcm编码,采样率:推荐16k ,编码:16bit位深的单声道)

格式 代码
wav wav

模型定制阶段

创建语音包接口

  • 接口uri:/customVoice/packet/create

  • 请求方式:POST

  • 接口说明:

    创建语音包接口,通过语音包收集录音,定制个性化音色模型

    接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
name String 语音包名称 (不超过50字符) True 语音包
gender String 性别 True male或female
trainingType String 训练类型 True tts或vc(详见语音合成类型)
description String 语音包描述 (不超过250字符) False 这是语音包描述
quality String 定制质量(1为低质量2为高质量) False 1或2(默认为1)
  • 响应结果

{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result":{
    "packetId":"P_24A59791123C49A9B498DCD1972803B3"//返回的语音包ID
  }
}

环境音检测

  • 接口uri:/customVoice/packet/measureNoise

  • 请求方式:POST

  • 接口说明:

    语音包录音前可以进行环境音检测

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
file MultipartFile 环境录音 True MultipartFile,音频格式:单声道、16KHz 16bit PCM编码的WAV格式。时长3-5秒
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
  • 响应结果
{
    "errorCode":"0",//错误码
    "msg":"success",//信息说明
    "result":{
        "passTest":true, //是否通过检测
        "decibel": 30  //分贝
            }
}

语音评测接口

  • 接口uri:/customVoice/packet/evaluateRecording

  • 请求方式:POST

  • 接口说明:

    录制语音,通过评测的音频会赋予recordId并则录入语音包

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
text String 评测文本 True 每句话支持10-30个字符,不超过20句 ,高定文案可参考如下案例。
file MultipartFile 录制评测音频 True MultipartFile,音频格式:单声道、16KHz 16bit PCM编码的WAV格式。时长2-15秒
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
order String 语音包中语音序号 True 取值1-20(有序+连续),重复传递则覆盖原有音频

例子

  • 高定(quality=2)20句文案如下:

    小鸭子让它坐在自己的背上,顺利上了岸 小鸭子正在水里捉鱼,忽然听见小公鸡喊救命 乌鸦把小石子放进瓶子里,水渐渐升高 瓶子里水不多,瓶口又小,乌鸦喝不着水 一只乌鸦口渴了,到处找水喝 爱心的深层含义就是保护所有的动植物 荷叶像个碧绿的大圆盘。荷花在它之间冒出来 要是碰上阴雨天,大树也会来帮忙 北极星是盏指路灯,它永远高挂在北方 中午它在南边,地上的树影指向北方 桂树还没有开花,但风中已经飘来甜丝丝的香气 老师穿着长袍,头发胡子全白了,看上去很有学问 杭州昨日正式入夏,较常年略早,昨天阳光早早上岗 安静的连一根针掉下来的声音都听得见 我低着头走出书店,脚站得有些麻木,我却浑身轻松 它小巧玲珑,一双透亮灵活的眼睛下面,长着一张又尖又长的嘴 当蒲公英盛开的时候,这片草地就变成金色的了 那鲜艳的民族服装,把学校打扮得更加绚丽多彩 人们佩服孔子和老子的学问,也敬重他们的品行 尽管它这样机灵,还是难以逃脱翠鸟锐利的眼睛

  • 响应结果

{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result":{
    "recordingId":"V_7FFDF89DC01F40CFA8A478D7E3231WV9", //音频合格,录入语音包时有返回值
    "score": "99.03", //评测得分
    "guidance": , // 评测建议
    "correctMessage": [], // 错误发音句中index
    "packetId": "P_3F9AB85F37CE497B9A1483848ACCF56C" //语音包ID
         }
}

启动训练

  • 接口uri:/customVoice/model/launch

  • 请求方式:POST

  • 接口说明:

    启动训练,语音包中的录音数量达标后,可以启动训练定制语音合成模型

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True UUID(唯一识别通用码)
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True sha256(appKey + salt + curtime +密钥)
signType String 签名类型 True v4
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
launchType String 启动训练类型。注:语音包训练类型需要支持 False tts或者vc (如果不填此参数,按语音包类型启动训练)
  • 响应结果
{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result": {	
    "estimateSeconds":10 //剩余时间 秒
        "modelList":[
          {
            "modelId":"M_A0852354A2ED4BB19DE759F1B80C6E37", //模型id 启动成功返回
            "createTime":"2023-04-23 13:59:43", // 创建时间 启动成功返回
            "taskId":"T_6381E68890C843488FD9569217EFA36A", // 训练任务id 启动成功返回
            "modelType":"vc", //模型类型
            "modelStatus":"started", //模型状态("started":训练启动,"failed":启动失败)
            "failedReason":"" // 失败原因 启动失败返回
          }
                     ]
            }
}

查询训练状态

  • 接口uri:/customVoice/model/checkStatus

  • 请求方式:GET

  • 接口说明: 查询当前训练任务状态

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
taskId String 训练任务id True T_D2560E2DCF6E435EA7BEDD88AC88B9CC
  • 响应结果
{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result": {
    "taskId":"T_D2560E2DCF6E435EA7BEDD88AC88B9CC", // 训练任务id	
    "estimateSeconds":"10", //剩余时间 秒
    "packetId":"P_24A59791123C49A9B498DCD1972803B3",//语音包id
        "modelId":"M_A0852354A2ED4BB19DE759F1B80C6E37",//模型id
    "status":"1" //训练状态 0:开始,1:完成,2:终止,3:失败,4:语音包创建
            }
}

删除语音包

  • 接口uri:/customVoice/packet/delete

  • 请求方式:POST

  • 接口说明: 删除指定语音包,同时会删除包含录音及训练模型

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
  • 响应结果
{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result": null
}

查询语音包详情

  • 接口uri:/customVoice/packet/detail

  • 请求方式:GET

  • 接口说明: 查询所有创建的语音包基本信息

  • 接口参数:

参数名称 类型 含义 是否必填 示例
appKey String 应用ID True 可在 应用管理 查看
curtime String 时间戳(秒) True 1666600000
salt String 随机字符串 True
sign String 签名信息:sha256(appKey + salt + curtime +密钥) True
signType String 签名类型 True v4
packetId String 语音包id True P_24A59791123C49A9B498DCD1972803B3
  • 响应结果
{
"errorCode":"0",//错误码
"msg":"success",//信息说明
"result": {
    "name":"名称", // 语音包名称	
    "description":"描述", //语音包描述
    "recordingCount":5, //包含录音数
    "createTime":"2022-08-22 14:33:10", //语音包创建时间
        "packetId":"", // 语音包id
    "voiceList":[
        {
            "order":1, //录音序号
            "audioUrl":"", //音频链接
            "text":"", //评测文本
        },
        ...
                ]
          }
}

服务配置

输出格式 文本大小或音频时长 支持语言
wav 噪音检测 3-5s
语音评测音频时长 2-15s
语音评测文本为10-30个字符
中文

训练任务状态码

状态ID 状态描述
0 训练任务启动
1 训练任务结束
2 训练任务已终止
3 训练任务失败
4 语音包创建阶段,训练任务未启动

训练错误代码

错误码 含义
101 缺少必填的参数,首先确保必填参数齐全,然后,确认参数书写是否正确。
102 不支持的语言类型
103 翻译文本过长
104 不支持的API类型
105 不支持的签名类型
106 不支持的响应类型
107 不支持的传输加密类型
108 应用ID无效,注册账号,登录后台创建应用和实例并完成绑定,可获得应用ID和应用密钥等信息
109 batchLog格式不正确
110 无相关服务的有效实例,应用没有绑定服务。注:某些服务的结果发音需要tts,需要在控制台创建语音合成绑定应用后方能使用。
111 开发者账号无效
112 请求服务无效
113 q不能为空
114 不支持的图片传输方式
115 语音包异常:不存在或者已删除或者不属于当前devId
116 referenceSynthesisId已存在
201 解密失败,可能为DES,BASE64,URLDecode的错误
202 签名检验失败
203 访问IP地址不在可访问IP列表
205 请求的接口与应用的平台类型不一致,确保接入方式(Android SDK、IOS SDK、API)与创建的应用平台类型一致。
206 因为时间戳无效导致签名校验失败
207 重放请求
303 服务端的其它异常
401 账户已经欠费停
402 offlinesdk不可用
403 无权限
404 资源不存在
405 auth服务不可用
411 访问频率受限,请稍后访问
412 超过最大翻译字符数
VC001 不支持训练类型
VC002 不支持性别类型
VC003 无有效ticket
VC004 语音包创建失败
VC005 语音包id不存在
VC006 环境音检测失败
VC007 语音包重训练次数耗尽
VC008 当前存在训练中的任务
VC009 启动训练失败
VC010 训练任务id不存在
VC011 删除语音包失败
VC012 获取语音包列表失败
VC013 获取训练状态失败
VC014 语音评测失败
VC015 开发者id为空
VC016 userId命名空间为空
VC022 回调地址错误
VC023 未知合成任务
VC024 合成URL错误
VC025 获取合成结果失败
VC026 文件大小超限
VC027 description超出限制
VC028 name字段超出限制
VC029 order字段取值错误
VC030 text字段超限
VC031 当日创建语音包到达上限
VC032 音频时长错误
VC033 userId和packetId不匹配
VC034 语音包录制文本重复
VC036 获取语音包详情失败
VC041 音量过高
VC042 音频格式错误
VC043 音频次序错误
VC044 音频质量过低
VC045 创建任务数超出限制(每天最多创建1000个训练任务)
VC046 音频数量错误
VC047 不支持的启动类型