# 录音文件转写极速版 API 文档

# 接口说明

录音文件转写极速版(Speed Transcription)基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。录音文件转写极速版最快可以达到1小时音频转写,完成仅耗时20秒。

录音文件转写极速版是已录制音频(非实时)快速转写成文字,音频文件上传成功后进入等待队列,待转写成功后用户即可获取结果,音频时长与理论返回时间可以参考:音频时长1小时极速语音转写耗时1分钟左右返回。其他时长的,可以等比例替换。如果很短的音频,考虑到系统调度等因素,也要20秒左右。(请注意,实际返回时长受上传的音频时长和任务总量影响,忙时会出现任务排队情况)。另外,为使转写服务更加通畅,请尽量转写5分钟以上的音频文件。

该接口是通过API的方式给开发者提供一个通用的HTTP接口,基于该接口,开发者可以获取开放平台的极速语音转写能力,方便开发者快速集成。

# 接口Demo

示例demo请点击 这里 下载。

demo 覆盖部分语言,其他语言参照下方接口文档进行开发。

欢迎热心的开发者到讯飞开放平台社区 (opens new window)分享你们的demo。

# 接口要求

集成同声传译API时,需按照以下要求。

内容 说明
传输方式 http[s](为提高安全性,强烈推荐https)
请求地址 1、小文件上传(小于30M)https://upload-ost-api.xfyun.cn/file/upload
2、大文件分块上传
(1)初始化分块信息 https://upload-ost-api.xfyun.cn/file/mpupload/init
(2)分块上传 https://upload-ost-api.xfyun.cn/file/mpupload/upload
(3)分块上传完成 https://upload-ost-api.xfyun.cn/file/mpupload/complete
3、创建任务 https://ost-api.xfyun.cn/v2/ost/pro_create
4、查询任务 https://ost-api.xfyun.cn/v2/ost/query
请求行 POST /xxx/xxx HTTP/1.1
(/xxx/xxx根据请求地址替换,如/file/upload或/v2/ost/pro_create等)
接口鉴权 签名机制,详情请参照下方鉴权认证
字符编码 UTF-8
响应格式 统一采用JSON格式
开发语言 任意,只要可以向讯飞云服务发起HTTP请求的均可
音频属性 采样率16k、位长16、单声道
音频格式 wav/pcm/mp3
音频大小 不超过500M
音频时长 不超过5小时,建议5分钟以上
语言种类 中文、英文、中英文混合
转写结果保存时长 7天

# 接口调用流程

• 通过接口密钥基于hmac-sha256计算签名。详见下方 鉴权认证
• 将请求参数以及数据放在Http Request Body中,以POST表单的形式提交,详见下方 请求参数
• 向服务器端发送Http请求后,接收服务器端的返回结果。

# 鉴权认证

在调用业务接口时,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。

# 鉴权方法

通过在请求地址后面加上鉴权相关参数的方式, 请注意影响鉴权结果的值有url、apiSecret、apiKey、date,如果调试鉴权,请务必按照示例中给的值进行调试, 具体在 Http Request Header 中配置以下参数:

# 1、Header参数描述,请以键值对形式传递

示例:

'host': 'upload-ost-api.xfyun.cn' 
'date': 'Wed, 29 Dec 2021 07:06:31 GMT' 
'authorization': 'api_key="91205afe0d17e38c61be35fca346503c", algorithm="hmac-sha256", headers="host date request-line digest", signature="rbzT4wmZc050+52AtnSNWfcmRMPFHdzThqnR0cE4QcY="'
'digest': 'SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
'content-type': 'multipart/form-data; boundary=a0df7967173af147fe3ae65068b9b622'

Header参数说明:

参数 类型 必须 说明 示例
host string 请求主机,根据请求url不同而不同 upload-ost-api.xfyun.cn
date string 当前时间戳,RFC1123格式("EEE, dd MMM yyyy HH:mm:ss z") Wed, 29 Dec 2021 07:06:31 GMT
digest string body 的摘要,用sha256计算,计算方法为 Digest="SHA256="+base64(sha256(body)) SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
authorization string 鉴权参数,具体构建方法如下 详细生成规则参考下方
content-type string 互联网媒体类型 有文件上传multipart/form-data
无文件上传application/json
# 2、参数生成规则

(1) host生成规则,例如:
https://upload-ost-api.xfyun.cn/file/upload 对应的Host为upload-ost-api.xfyun.cn
https://ost-api.xfyun.cn/v2/ost/query 对应的Host为ost-api.xfyun.cn
(2) date生成规则:
date必须是UTC+0或GMT时区,RFC1123格式(Wed, 05 Jan 2022 09:29:14 GMT)。
服务端会对date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。
(3) digest生成规则:
计算规则固定,不受任何参数值的影响,Java计算示例如下:

byte[] tempBytes=MessageDigest.getInstance("SHA-256").digest();
Digest="SHA256="+ Base64.getEncoder().encodeToString(tempBytes);
最终:
Digest="SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="

(4) authorization生成规则:
Authorization的格式如下,其需要用到signature的值:
注:headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。

api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line digest",signature="$signature"

1)signature生成规则:signature原始字段由 host,date,request-line、Digest四个参数按照格式拼接成,拼接的格式为(\n为换行符,’:’后面有一个空格):

host: $host\ndate: $date\n$request-line\ndigest: $digest
假设以小文件上传url为例:
请求url = "https://upload-ost-api.xfyun.cn/file/upload"
date = "Wed, 05 Jan 2022 09:29:14 GMT"
那么最终signature原始字段(signature_origin)示例如下:
-----------------------------------------------
host: upload-ost-api.xfyun.cn
date: Wed, 05 Jan 2022 09:29:14 GMT
POST /file/upload HTTP/1.1
digest: SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

2)使用hmac-sha256算法,结合APISecret(讯飞开放平台-控制台获取)对signature_origin进行签名,获得签名后的摘要signature_sha。

假设APISecret="apisecretXXXXXXXXXXXXXXXXXXXXXXX"
则:
signature_sha=hmac-sha256(signature_origin,$apiSecret)

3)使用base64编码对signature_sha进行编码,获得最终的signature

signature=base64(signature_sha)
示例:bsLfoGMgZJkoDTuytkPra2NGLS/jzTMHOwbLZusw65A=

4)根据以上信息拼接authorization的字符串,其中APIKey(讯飞开放平台-控制台获取),示例如下。

假设api_key="apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX"
则authorization最终示例如下:
api_key="apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX", algorithm="hmac-sha256", headers="host date request-line digest", signature="bsLfoGMgZJkoDTuytkPra2NGLS/jzTMHOwbLZusw65A="

# 鉴权结果

如果鉴权失败,则根据不同错误类型返回不同HTTP Code状态码,同时携带错误描述信息,详细错误说明如下:

HTTP Code 说明 错误描述信息 解决方法
401 缺少authorization参数 {"message":"Unauthorized"} 检查是否有authorization参数,详情见authorization参数详细生成规则
401 签名参数解析失败 {“message”:”HMAC signature cannot be verified”} 检查签名的各个参数是否有缺失是否正确,特别确认下复制的api_key是否正确
401 签名校验失败 {“message”:”HMAC signature does not match”} 签名验证失败,可能原因有很多。 1. 检查api_key,api_secret 是否正确。 2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。 3. 检查signature签名的base64长度是否正常(正常44个字节)。
403 时钟偏移校验失败 {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} 检查服务器时间是否标准,相差5分钟以上会报此错误

时钟偏移校验失败示例:

HTTP/1.1 403 Forbidden
Date: Mon, 30 Nov 2020 02:34:33 GMT
Content-Length: 116
Content-Type: text/plain; charset=utf-8
{
    "message": "HMAC signature does not match, a valid date or x-date header is required for HMAC Authentication"
}

# 请求参数

# 1、小文件上传

# body请求参数示例
 --9b83bcf71c7e0557482f2aa260bb5a86
Content-Disposition: form-data; name="data";filename=".\audio\demo.wav"
Content-Type: audio/wavRIFFF\x80\x01\x00WAVEfmt\...\x10\x00\x03--9b83bcf71c7e0557482f2aa260bb5a86
Content-Disposition: form-data; name="app_id"your_appid--9b83bcf71c7e0557482f2aa260bb5a86
Content-Disposition: form-data; name="request_id"202201111019--9b83bcf71c7e0557482f2aa260bb5a86
# body请求参数说明
参数名 类型 必传 描述
request_id string 请求唯一标识
app_id string 应用唯一标识
data file 文件上传数据
# 返回参数示例
{
	"code": 0,
	"sid": "ost00010002@dx172fd79467d7a04802",
	"data": {
		"url": "return_url"
	},
	"message": "success"
}
# 返回参数说明
参数名 类型 描述
code int 错误码,0标识成功
message string 错误描述
sid string 会话唯一标识
data.url string 文件下载地址

# 2、分块上传

# (1)初始化分块信息
# 请求参数示例
{
	"request_id": "202006290840",
	"app_id": "4CC5779A"
}
# 请求参数说明
参数名 类型 必传 描述
request_id string 请求唯一标识
app_id string 用户唯一标识
# 返回参数示例
{
	"code": 0,
	"sid": "ost00010004@dx172fd871c417a04802",
	"data": {
		"upload_id": "return_upload_id"
	},
	"message": "success"
}
# 返回参数说明
参数名 类型 描述
code int 错误码 ,0标识成功
message string 错误描述
sid string 会话唯一标识
data.upload_id string 上传唯一标识
# (2)分块上传
# body请求参数示例
 --61ab2ddcdc781408ca565561ee4df66e
Content-Disposition:form-data;name="data";filename=".\audio\1-\xe9\xa9\xac\xe5\x8c\x96\xe8\x85\xbe\xe6\xbc\x94\xe8\xae\xb2.pcm"
Content-Type:application/octet-stream\x00\x005\...\x13\xfb--61ab2ddcdc781408ca565561ee4df66e
Content-Disposition:form-data;name="app_id"your_appid--61ab2ddcdc781408ca565561ee4df66e
Content-Disposition:form-data;name="request_id"202201141107--61ab2ddcdc781408ca565561ee4df66e
Content-Disposition:form-data;name="upload_id"your_return_upload_id--61ab2ddcdc781408ca565561ee4df66e
Content-Disposition:form-data;name="slice_id"23--61ab2ddcdc781408ca565561ee4df66e--
# 请求参数说明
参数名 类型 必传 描述
request_id string 请求唯一标识
app_id string 应用唯一标识
upload_id string 上传唯一标识
slice_id int 分片号
data file 上传数据
# 返回参数示例
{
	"code": 0,
	"sid": "ost00010006@dx172fd8b7afb7a04802",
	"message": "success"
}
# 返回参数说明
参数名 类型 描述
code int 错误码,0标识成功
sid string 会话唯一标识
message string 错误描述
# (3)分块上传完成
# 请求参数示例
{
	"request_id": "202006290849",
	"app_id": "your_appid",
	"upload_id": "your_return_upload_id"
}
# 请求参数说明
参数名 类型 必传 描述
request_id string 请求唯一标识
app_id string 应用唯一标识
upload_id string 上传唯一标识
# 返回参数示例
{
	"code": 0,
	"sid": "ost00010008@dx172fd8fda817a04802",
	"data": {
		"url": "return_url"
	},
	"message": "success"
}
# 返回参数说明
参数名 类型 描述
code int 错误码,0标识成功
sid string 会话唯一标识
data.url string 文件下载地址
message string 错误描述

# 3、创建任务

# 请求参数示例
{
	"common": {
		"app_id": "your_appid"
	},
	"business": {
		"request_id": "1612345511236963551344",
		"language": "zh_cn",
		"domain": "pro_ost_ed",
		"accent": "mandarin",
		"callback_url": "your_callback_url" //可选字段
	},
	"data": {
		"audio_url": "https://xfyun-seve-dx/19Si······",
		"audio_src": "http",
		"format": "audio/L16;rate=16000",
		"encoding": "raw"
	}
}
# 请求参数说明
参数名 类型 必传 描述
common.appid string 在控制台获取
business.request_id string 客户端用于标记任务的唯一id,最大长度64字符,由客户端保证唯一性,服务回调结果时会包含此参数
business.language string 取值范围:zh_cn
business.domain string 取值范围:pro_ost_ed
business.accent string 口音与 language、domain 参数一起映射具体引擎类型,取值范围:mandarin
business.callback_url string 任务结果回调服务地址,自定义具体值,Java获取示例可参考callback_url java 获取示例 (opens new window)
business.vspp_on int 是否开启说话人分离,默认为0
0:不开启
1:开启
注:目前mp3不支持角色分离
business.speaker_num int 说话人个数,默认0:
0:表示盲分
非0正数:表示指定的说话人个数
business.output_type int 输出结果类型,默认为0,为0时置信度不生效
0:1best
1:cnlbest
2:多候选(传2需要关掉后处理才生效)
business.postproc_on int 后处理开关,默认1:
1:开启
0:关闭
business.pd string 领域个性化参数:
法院: court
教育: edu
金融: finance
医疗: medical
科技: tech
体育: sport
政府: gov
游戏: game
电商: ecom
汽车: car
business.duration int 音频时长,单位秒
business.enable_subtitle int 字幕文稿功能,1: 字幕场景,0: 文稿场景 (默认)
business.smoothproc boolean 顺滑开关,true表示开启,false表示关闭,默认值为true
business.colloqproc boolean 口语规整开关,true表示开启,false表示关闭,默认值为false
business.language_type int 语言模式开关:
1:自动,中英文混合模式 (默认)
2:中文模式,可识别出简单英文
3:英文模式,只识别出英文
4:纯中文模式,只识别出中文
business.vto int vad强切控制,单位ms
business.dhw string 会话级热词,多个热词用英文 ',' 分隔。只支持UTF8 编码
data.audio_url string 用于上传转写音频地址
data.audio_src string 音频来源类型,暂时支持http
data.audio_size int 音频文件大小,单位为字节
data.format string 音频的采样率支持16k,audio/L16;rate=16000
data.encoding string 音频数据格式:
wav、pcm(传参raw)
mp3(传参lame)
# 返回参数示例
{
	"code": 0,
	"message": "success",
	"sid": "ost00620001@dx16c8a2b9cbb5745192",
	"data": {
		"task_id": "1568100557463963551003"
	}
}
# 返回参数说明
参数名 类型 描述
sid string 每次会话的唯一标识
code int 错误码,0标识成功
message string 错误描述
data object 返回结果
data.task_id string 本次创建的任务id

# 4、查询任务

# 请求参数示例
{
	"common": {
		"app_id": "your_appid"
	},
	"business": {
		"task_id": "1568100557463963551003"
	}
}
# 请求参数说明
参数名 类型 必传 描述
common.appid string 在控制台获取
business.task_id string 任务唯一标识
# 返回参数示例
{
	"code": 0,
	"data": {
		"force_refresh": "0",
		"result": {
			"file_length": 16462,
			"lattice": [{
				"begin": "0",
				"end": "470",
				"json_1best": {
					"st": {
						"bg": "0",
						"ed": "470",
						"pa": "1242",
						"pt": "reserved",
						"rl": "0",
						"rt": [{
							"nb": "1",
							"nc": "1.0",
							"ws": [{
								"cw": [{
									"w": "听说",
									"wc": "1.0000",
									"wp": "n"
								}],
								"wb": 1,
								"we": 40
							}, {
								"cw": [{
									"w": "。",
									"wc": "0.0000",
									"wp": "p"
								}],
								"wb": 40,
								"we": 40
							}, {
								"cw": [{
									"w": "",
									"wc": "0.0000",
									"wp": "g"
								}],
								"wb": 40,
								"we": 40
							}]
						}],
						"sc": "1.00",
						"si": "5781"
					}
				},
				"lid": "1242",
				"spk": "段落-0"
			}],
			"lattice2": [{
				"begin": "0",
				"end": "470",
				"json_1best": {
					"st": {
						"bg": "0",
						"ed": "470",
						"pa": "1242",
						"pt": "reserved",
						"rl": "0",
						"rt": [{
							"nb": "1",
							"nc": "1.0",
							"ws": [{
								"cw": [{
									"w": "听说",
									"wc": "1.0000",
									"wp": "n"
								}],
								"wb": 1,
								"we": 40
							}, {
								"cw": [{
									"w": "。",
									"wc": "0.0000",
									"wp": "p"
								}],
								"wb": 40,
								"we": 40
							}, {
								"cw": [{
									"w": "",
									"wc": "0.0000",
									"wp": "g"
								}],
								"wb": 40,
								"we": 40
							}]
						}],
						"sc": "1.00",
						"si": "5781"
					}
				},
				"lid": "1242",
				"spk": "段落-0"
			}]
		},
		"task_id": "220114135557737430397630",
		"task_status": "4",
		"task_type": "distribute_task"
	},
	"message": "success",
	"sid": "ost000eda43@dx17e572841a56f22902"
}
# 返回参数说明
参数名 类型 描述
sid string 每次会话的唯一标识
code int 错误码,0标识成功
message string 错误描述
data object 查询结果
data.task_id string 本次查询的任务id
data.task_status string 任务状态,3和4状态表示存在识别结果:
1:待处理
2:处理中
3:处理完成
4:回调完成
data.task_type string 任务类型
data.force_refresh string 0:不需要强制刷新
1:需要强制刷新
可以忽略,目前未启用
data.result string 识别内容
data.result.file_length int 音频长度(字节)
data.result.lattice array 经过后处理的识别结果(标记词的属性或经过口语规整,顺滑后的结果,与传参相关)
data.result.lattice2 array 后处理前的识别结果(原始结果,不区分词的属性,即没有口语规整、顺滑等效果)
data.result.lattice.begin string 开始时间
data.result.lattice.end string 结束时间
data.result.lattice.json_1best object 转写引擎输出结果
data.result.lattice.lid string 段落标识,相同lid表示同一段落,从0开始,随段落数增加
data.result.lattice.spk string 说话人编号,后面数字与角色值一致
data.result.lattice.json_1best.st object 句子
data.result.lattice.json_1best.st.bg string 句子开始的位置,单位ms
data.result.lattice.json_1best.st.ed string 句子结束的位置,单位ms
data.result.lattice.json_1best.st.pa string 段落,注:开cn多候选时没有这个字段符号
data.result.lattice.json_1best.st.pt string 保留字段
data.result.lattice.json_1best.st.rl string 说话人角色
data.result.lattice.json_1best.st.sc string 真实句子置信度,等于词语置信度的平均(不包含标点)
data.result.lattice.json_1best.st.si string vad的ID号
data.result.lattice.json_1best.st.rt array 开始输出识别结果
data.result.lattice.json_1best.st.rt.nb string 句子number数,目前均是1,暂无实际意义
data.result.lattice.json_1best.st.rt.nc string 句子置信度,目前均是1,暂无实际意义
data.result.lattice.json_1best.st.rt.ws array 表示开始输出词语识别结果
data.result.lattice.json_1best.st.rt.ws.cw array 词语候选识别结果
data.result.lattice.json_1best.st.rt.ws.cw.w string 识别结果
data.result.lattice.json_1best.st.rt.ws.cw.wc string 词语的置信度
data.result.lattice.json_1best.st.rt.ws.cw.wp string 词语的属性
n:表示正常词
s:表示顺滑
p:表示标点
g:表示分段
data.result.lattice.json_1best.st.rt.ws.wb string 词语开始的帧数(注一帧10ms),位置是相对bg
data.result.lattice.json_1best.st.rt.ws.we string 词语结束的帧数(注一帧10ms),位置是相对bg

# 错误码

错误码 错误描述 处理策略
10107 自定音频编码字段错误 请检查encoding的传值是否规范
10303 参数值传递不规范 请检查传参值是否有误
10043 音频解码失败 请检查所传的音频是否与encoding字段描述的编码格式对应
20304 静音音频、音频格式与传参不匹配、音频格式不符 检查音频是否为16k、16bit单声道音频
10043 使用音频格式与编码格式encoding没有按文档描述对应 参照data.encoding参数取值进行比对

# 调用示例

录音文件转写极速版 demo java语言 (opens new window)

录音文件转写极速版 demo python语言 (opens new window)

注: 其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。

# 常见问题

# 录音文件转写极速版的主要功能是什么?

答:快速地将长段音频(5小时以内)数据转换成文本数据。

# 录音文件转写极速版支持什么语言?

答:中文、英文、中英文混合。

# 录音文件转写极速版支持什么应用平台?

答:目前支持WebAPI应用平台。

# 录音文件转写极速版对音频有什么要求吗?

答:采样率16k、位长16bit、单声道的wav/pcm/mp3音频。

在线
咨询
建议
反馈
体验
中心