跳转至

语音合成WebAPI 文档

语音合成介绍

语音合成能力可以将文字转化为自然流畅的人声,支持灵活配置音频参数,支持中文、英文和中英混合

接口Demo

部分接口demo如下:

java语言demo参考

集成websocket请求时,需按照以下要求:

内容 说明
传输方式 ws[s] (若对数据通信有较高的安全要求,建议选择wss接入方式来访问图灵服务,由于ssl层验证预计会额外多花费40\~50ms的时间。)
请求地址 ws[s]://ws-api.turingapi.com/api/v2
字符编码 UTF-8
响应格式 json
支持文本合成语言 中文,英文
支持机器人类型 SDK接入(Android)、WebSocket接入、混合SDK接入(Android)、混合SDK接入(Linux)
是否支持并发 SOCKET不允许并发请求,即上一轮请求未完成(result-done)时不允许发送下一个请求。

支持音频格式

item Model
AMR_NB amr-8khz-16bit
MP3_16_16 mp3-16khz-16kpbs
MP3_16_24 mp3-16khz-24kpbs
MP3_16_64 mp3-16khz-64kpbs
WAV_16_16 wav-16khz-16bit
PCM_16_16 pcm-16khz-16bit
PCM_8_16 pcm-8khz-16bit
OPUS_16_16 opus-16khz-16bit

图灵音色不支持PCM_8_16格式! OPUS_16_16 为转换音频使用 tts不支持输出

数据加密方式

加密说明

API接口默认不加密(Biz平台可选择加密状态),为保证接口的安全性和稳定性,可对接口数据进行加密;

  • AES加密方式详见:
加密模式 CBC
填充 PKCS5Padding
数据块 128位(密钥为16位)
输出 base64编码字符串
编码 utf-8
密钥 apikey+图灵官网机器人详情页Secret+当前毫秒时间戳(取输入参数)-->对该字符串取16位小写md5值(参考 https://www.sojson.com/encrypt_md5.html)

注:偏移量字符串等于密钥

加密参考页面 http://tool.chacuo.net/cryptaes
  • 加密后主要代码:
String data="加密前内容";
//加密方法
data=AesUtils.getTlAes(apiKey, apiSecret, time).encrypt(data);
  • 加密后请求示例如下:
{
  "data":"加密后的内容",
  "key":"ed474dae62*********67050faea1788",
  "timestamp":"150******7793"
}

请求参数说明

参数 类型 是否必须 说明
key String Y biz平台设置机器人的apiKey
timestamp String Y 时间戳
data JSON Y 配置信息,参考下方参数data字段说明

data字段说明

参数 类型 是否必须 说明
deviceId String Y 用户设备id.
要求:1,长度小于等于32位。
2,需由字母或数字组成,其他字符可能导致部分功能错误
requestType Array Y tts需要请求的内容固定应该为[2] :
0\:ASR
1\:NLP
2\:TTS
nlpRequest Json Y nlp内容请求信息,参考下方参数nlpRequest字段说明
binarysState Json N 二进制参数上传状态
streamTts boolean N tts是否以二进制流式输出(默认是false):
true:以二进制流式输出
false:不以二进制流式输出

data - nlpRequest字段说明

参数 类型 是否必须 说明
content json Y 输入信息,参考下方参数nlpRequest - content字段说
clientInfo json N 客户端状态 ,参考下方 nlpRequest - clientInfo 字段说明
userInfo json N 用户参数,参考下方 nlpRequest - userInfo 字段说明

nlpRequest - content 字段说明

参数 类型 是否必须 说明
type int N 输入类型,
type=0-文本
type=1-图片
type=2-音频(asr)
type=5-音频(技能)
data String Y 若type=0则对应是输入的文本,非0是对应类型的二进制参数ID:32位字符串(UUID)

nlpRequest - userInfo 字段说明

参数 类型 是否必须 取值范围 说明
uniqueId String N deviceId值 可以不传入,或者传入和上方的deviceId保持一致
requestIP String N 客户端ip地址 可上传客户端ip地址
useCodes Array N 应用code 用户此次交互仅使用该参数中的应用,

nlpRequest - clientInfo 字段说明

参数 类型 是否必须 说明
appState json N 客户端状态,开启此字段可以直接进入此技能,关闭同理,参考下方clientInfo - appState 字段说明
robotSkill json N 针对应用code的自定义参数,参考下方 clientInfo - robotSkill 字段说明

clientInfo - appState 字段说明

参数 类型 是否必须 说明
code int Y 应用code
operateState int Y 请求应用时的状态值(与输出的operateState无关)

clientInfo - robotSkill 字段说明

参数 类型 是否必须 说明
key String N 应用code,tts的为:50101
value JSON N key应用使用的自定义参数

robotSkill -value 字段说明

字段 类型 必填 说明
tone String No 音色选择,默认x2_xiaoxue,2023年09月13日前创建的机器人,默认音色为zhiwa,其他音色请联系商务
format String No 输出格式,默认MP3_16_16,参见“支持音频格式”说明
speed Int No 语速设置,取值范围1\~9,默认为5
volume Int No 音量设置,取值范围1\~9,默认为5
pitch Int No 语调设置,取值范围1\~9,默认为5
arousal Int No 语音波动,取值范围1\~9,默认为5

binarysState 字段说明

参数 类型 是否必须 取值范围 说明
openBinarysId String N - 将传输二进制数据的参数ID:
1. 该值与nlpRequest-content-data中的内容一致
2. 32位字符串(UUID)
completeBinarysId String N - 完成传输的二进制数据的参数ID:
32位字符串(UUID)

注意:

  • WebSocket的二进制参数输入都需要初始化时在nlpRequest-content中按类型提前申明并将代表该二进制参数ID赋值给nlpRequest-content-data.

输出参数说明

参数说明

参数 类型 是否必须 说明
code int Y 状态code;参考状态code列表
globalId String Y 请求唯一标识
message String Y code对应的说明;参考状态code列表
nlpResponse Json N nlp相关回复信息
ttsResponse Json N tts流式输出相关回复信息

nlpResponse参数说明

参数 类型 是否必须 说明
intent Intent Y 请求意图,详细参考下方 nlpResponse - Intent 参数说明
results Array N 输出结果集,详细参考nlpResponse - results 字段说明

nlpResponse - Intent 参数说明

参数 类型 是否必须 说明
code int Y 输出技能code

nlpResponse - results 字段说明

参数 类型 是否必须 说明
resultType String Y 输出类型
文本(text)
链接(url)
音频(voice)
视频(video)
图片(image)
图文(news)
动作表情(action)
values Map Y 输出内容(必包含key等于resultType的值,详细请查看下方nlpResponse - results -valuse 字段说明
groupType int Y 组类型(普通接入可忽略该参数)
0为独立输出;
大于0时可能包含同组相关内容

nlpResponse - results -valuse 字段说明

参数 类型 是否必须 说明
ttsUrl Array Y tts音频连接,对应多个

ttsResponse参数说明

参数 类型 是否必须 说明
binarysId String Y tts二进制参数Id,和参数ttsStreamId的值保持一致
value String Y tts内容
state int Y state=200\:tts传输正确结束
state=400\:tts异常结束
state=210\:tts传输开始

输入输出示例:

普通示例

简单默认参数输入:
{
    "key":"c1b7685c744941f392067716bc318aed",
    "timestamp":"1585799006000",
    "data":{
        "deviceId":"111111",
        "requestType":[
            2
        ],
        "nlpRequest":{
            "content":[
                {
                    "data":"欢迎来到图灵平台"
                }
            ]
        }
    }
}
简单默认参数输出:streamTts为默认值或false时
{
    "code":200,
    "done":true,
    "globalId":"219860099109500001",
    "message":"success",
    "nlpResponse":{
        "intent":{
            "code":50101
        },
        "results":[
            {
                "groupType":0,
                "resultType":"text",
                "values":{
                    "ttsUrl":[
                  "http://turing-iot-tts-oss.turingapi.com/tts/tts-c1b7685c744941f392067716bc318aed-4d15f71fd8db45259bc7c4a55fedbceb.mp3"
                    ],
                    "text":"欢迎来到图灵平台"
                }
            }
        ]
    }
}
streamTts为true时 输出:
{
    "code": 200,
    "done": false,
    "globalId": "219861545920500001",
    "message": "success",
    "nlpResponse": {
        "intent": {
            "code": 50101
        },
        "results": [{
            "groupType": 0,
            "resultType": "text",
            "values": {
                "ttsStreamId": "3fa863d3db5a4e4a95b311442a242440",
                "text": "欢迎来到图灵平台"
            }
        }]
    }
} {
    "code": 260,
    "done": false,
    "globalId": "219861545920500001",
    "message": "TTS流式传输状态",
    "ttsResponse": {
        "binarysId": "3fa863d3db5a4e4a95b311442a242440",
        "state": 210,
        "value": "欢迎来到图灵平台"
    }
}
二进制数据
    ....... {
        "code": 260,
        "done": true,
        "globalId": "219861545920500001",
        "message": "TTS流式传输状态",
        "ttsResponse": {
            "binarysId": "3fa863d3db5a4e4a95b311442a242440",
            "state": 200,
            "value": "欢迎来到图灵平台"
        }
    }


添加配置参数的输入输出:

添加robotSkill中的技能code=50101

输入:
{
    "key":"c1b7685c744941f392067716bc318aed",
    "timestamp":"1585799006000",
    "data":{
        "deviceId":"111111",
        "requestType":[
            2
        ],
        "nlpRequest":{
            "content":[
                {
                    "data":"欢迎来到图灵平台"
                }
            ],
       "clientInfo":{
           "robotSkill":{
              "50101":{
                    "config":{
                        "tone":"aq",
                        "speed":5,
                        "format":"MP3_16_24",
                        "volume":5,
                        "pitch": 5,
                        "arousal": 5
                     }
                  }
              }
           }
        },
       "streamTts":false
    }
}

输出:
{
    "code": 200,
    "done": true,
    "globalId": "219871838649317001",
    "message": "success",
    "nlpResponse": {
        "intent": {
            "code": 50101
        },
        "results": [{
            "groupType": 0,
            "resultType": "text",
            "values": {
                "ttsUrl": ["http://turing-iot-tts-oss.turingapi.com/tts/tts-c1b7685c744941f392067716bc318aed-45136a8097e14c04bd167aa0d9dc37dd.mp3"],
                "text": "欢迎来到图灵平台"
            }
        }]
    }
}

流式TTS输出说明

  1. 输入参数中streamTts=true
  2. nlp输出时,values中包含 "ttsStreamId"字段,如:
{
  "code": 200,
  "globalId": "114108376024835001",
  "message": "success",
  "done":true,
  "nlpResponse": {
    "intent": {
      "code": 50101
    },
    "results": [
      {
        "groupType": 0,
        "resultType": "text",
        "values": {
          "ttsStreamId": "1a68cb308fee4961ae86fc1bb04c79bd",
          "text": "我在干嘛"
        }
      }
    ]
  }
}
  1. 输出code=260(tts流式状态),其中ttsResponse.state 包含三个值:210:开始、200:正确结束,400:异常结束。如:
{
  "code": 260,
  "globalId": "114108376024835001",
  "done":false,
  "message": "TTS流式传输状态",
  "ttsResponse": {
    "binarysId": "1a68cb308fee4961ae86fc1bb04c79bd",
    "state": 210
  }
}

注意当ttsResponse.state为结束状态时(200,400),ttsResponse可能包含nextBinarysId字段,代表接下来还有tts二进制内容输出。如:

{
  "code": 260,
  "globalId": "114108376024835001",
  "done":false,
  "message": "TTS流式传输状态",
  "ttsResponse": {
    "binarysId": "1a68cb308fee4961ae86fc1bb04c79bd",
    "nextBinarysId": "12jsfsf0qwerjsdfasdfasdf8dsfa",
    "state": 200
  }
}
  1. 开始与结束中间会用websocket协议输出TTS的二进制内容。

附录

状态code列表

code 说明
200 正确结果返回
210 参数初始化成功,请收到该标识后上传二进制数据(如果需要)
220 参数上传完成,正在请求nlp/tts
230 ASR/NLP正确处理,但tts功能处理失败(单独请求TTS功能,异常时也返回该code)
240 输入参数为空,nlp/tts不处理
250 TTS调用次数耗尽
300 无效数据:二进制参数已完成传输,不要发送该数据
4004 机器人类型非法
4005 apikey信息错误
4006 deviceId信息错误
4007 解密失败,您的加密逻辑存在异常
4008 数据内容格式错误
4009 机器人被禁用
4010 试用期已过
4011 系统不支持二进制参数
4012 今天我们已经聊了很多啦,明天再来找我聊天吧。
4013 这一小时的对话次数已经超过我的极限啦,让我休息一下,待会再聊
4014 这一分钟里我们已经聊了很多啦,休息,休息一下吧
4015 二进制参数错误,请确定binarysId是否对应
4016 单次交互时间过长,请查看文档!
4017 二进制参数错误,有重复binarysId!
4018 二进制参数输入状态异常
4019 二进制参数处理时间超时/第三方引擎参数错误
4020 ASR权限异常
4021 TTS权限异常
4022 二进制传输内容过大!
4023 单次交互同类型的二进制参数只允许输入一个
4025 上传数据失败,请稍后\~
4026 nlp/tts请求内容过长
4027 请求类型不能为空
4028 丢弃任务:同一用户不允许同时处理一个以上的ASR请求
4029 ASR调用次数耗尽
4030 NLP调用次数耗尽
4100 服务正在升级 请稍后再试
4101 请求没有正确初始化!
4102 长时间未请求业务,关闭连接
4200 robot信息异常
4201 nlp/tts处理异常
4202 tts数据为空
5001 音频信息参数错误
5002 未上传任何二进制数据
5003 ASR音频格式不支持
5004 ASR引擎链接异常
5005 ASR引擎异常超时
5006 ASR引擎异常
5007 ASR数据传输失败,没有初始化
5008 ASR二进制数据转码失败
6000 丢弃任务:同一用户不允许同时处理一个以上的ASR请求

注意

  • 4XXX\~5XXX异常,服务端将主动关闭与客户端的connection,其余code不会关闭;