音频文件转写-含话者分离(算法编码:2202093)
协议类型:HTTP
一、接入点
| 环境 |
地址 |
| 公网 |
https://api-maas.teleai.com.cn/aipaas/voice/v1/tts/voiceSeperate |
- API Path:
/aipaas/voice/v1/tts/voiceSeperate
- 请求方法:
POST
- Content-Type:
application/json
二、鉴权
采用请求头携带鉴权信息:
2.1 标准鉴权
Authorization: <鉴权信息>
| 请求头 |
必填 |
说明 |
Content-Type |
是 |
内容类型,固定 application/json |
X-APP-ID |
是 |
控制台 → 应用管理 → AppID |
Device-Uuid |
否 |
设备uuid |
Authorization |
是 |
鉴权信息 |
2.2 Bearer Token 鉴权
Authorization: Bearer <用户申请的API-KEY>
| 请求头 |
必填 |
说明 |
Content-Type |
是 |
内容类型,固定 application/json |
Device-Uuid |
否 |
设备uuid |
Authorization |
是 |
Bearer |
三、能力简介
支持 PCM、WAV、MP3 格式多通道多采样率音频识别。
四、请求与响应
4.1 请求参数
| 参数名 |
类型 |
必填 |
说明 |
timestamp |
int |
是 |
当前时间的整形时间戳,精确到秒,10 分钟内有效 |
file_link |
string |
是 |
存放录音文件的地址链接,支持 HTTP |
req_id |
string |
是 |
请求全局唯一 ID,记录该值便于排查问题 |
enable_callback |
boolean |
是 |
是否启用回调功能,当前版本仅支持 true |
sample_rate |
int |
否 |
音频采样率,默认值 16000 Hz |
num_channels |
int |
否 |
输入音频数据的通道数,默认值是 1 |
enable_punc |
boolean |
否 |
是否开启加标点,默认值是 true |
enable_itn |
boolean |
否 |
是否开启 ITN,默认值是 true |
business_data |
string |
否 |
客户端需要回传的业务数据 |
callback_url |
string |
否 |
接收回调结果的 url 地址,return_mode 为 0 时必传 |
return_mode |
int |
否 |
结果返回模式,0:push,1:pull,默认为 0。push 模式即提供 callback_url 接收最终结果回调;pull 模式即通过大模型异步调用结果回查接口查询最终调用结果,接口文档详见开发指南下的大模型异步调用结果回查 |
4.2 REST 参数
4.3 响应体
- 返回结果:成功 (200),Json,Object
| 参数名 |
说明 |
必填 |
类型 |
code |
状态响应码。参考错误编码规范 |
是 |
string |
msg |
调用结果描述。参考错误编码规范 |
是 |
string |
requestId |
请求 ID,用于调用查询大模型生成结果信息接口 |
是 |
string |
4.3.1 成功示例
{
"code": "10000",
"msg": "调用成功",
"requestId": "test001"
}
4.3.2 失败示例
{
"code": "10903",
"msg": "服务执行失败",
"requestId": "test001"
}
五、状态码说明
5.1 算法状态码
| 状态码 |
说明 |
描述 |
解决方法 |
10301 |
Required parameter miss |
必填参数缺失 |
检查请求体是否符合接口协议 |
10302 |
Too many requests |
并发请求过多 |
联系商务,增加并发 |
10304 |
Parse request body fail |
请求格式错误 |
查看请求的 URL body 格式是否正确,参考接口文档 |
10503 |
Server connection time out |
服务连接超时 |
联系技术人员 |
10603 |
Fetch audio failed |
获取音频文件失败 |
检查文件 URL 是否正确 |
10604 |
Decode audio failed |
解析音频文件失败 |
检查源音频文件格式是否正确 |
10605 |
Resample audio failed |
重采样音频失败 |
联系技术人员 |
10607 |
Audio too large |
音频文件过大 |
切分音频再进行识别 |
10608 |
Audio too long |
音频过长 |
切分音频再进行识别 |
10801 |
Task processing |
任务处理中 |
等待重新查询 |
10903 |
Recognize failed |
识别失败 |
联系技术人员 |
10904 |
Query failed |
查询失败 |
联系技术人员 |
10905 |
Unexpected error |
未知错误 |
联系技术人员 |
10000 |
Success |
成功 |
执行下一步操作 |
5.2 公共状态码
- 接口响应的公共状态码由网关统一定义,一般用于标识鉴权失败、限流或服务异常,具体业务错误码、错误信息及排查建议请参考:开发指南-公共信息及状态码。
六、调用示例
请求参数示例
{
"timestamp": 1673493479,
"file_link": "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav",
"req_id": "3a87fe9793c9-4ebd-95d4-4ce2-a80c054b",
"enable_callback": true,
"callback_url": "http://{ip}/{port}/{uri}"
}
Java 版本
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import java.util.HashMap;
import java.util.Map;
public class OfflineAsr {
public static void main(String[] args) {
offlineAsr();
}
/**
* 方法中使用到的 JSONObject、HttpRequest、HttpResponse 均来自 Hutool 工具类。
* 具体 maven 依赖为:
*
* <dependency>
* <groupId>cn.hutool</groupId>
* <artifactId>hutool-all</artifactId>
* <version>5.8.29</version>
* </dependency>
*/
public static void offlineAsr() {
String url = "服务调用地址";
// 设置请求头
Map headers = new HashMap();
// 公网调用鉴权
headers.put("X-APP-ID", "yourAppId");
headers.put("Authorization", "yourAuthorization");
headers.put("Content-Type", "application/json");
// 创建请求对象
JSONObject request = new JSONObject();
request.append("timestamp", System.currentTimeMillis() / 1000);
request.append("file_link", "http://yourAudioAddress.wav");
request.append("req_id", "yourRequestId");
request.append("enable_callback", true);
request.append("callback_url", "http://callback-address");
// 发起 HTTP 请求
HttpResponse response =
HttpRequest.post(url)
.headerMap(headers, false)
.body(JSONUtil.toJsonStr(request))
.execute();
// 打印返回结果
System.out.println(response.body());
}
}
Python 版本
import json
import hashlib
import hmac
import time
import re
import urllib.parse
import requests
import warnings
from datetime import datetime
import logging
# 配置日志,设置日志级别为 INFO,并指定日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置环境变量
X_APP_ID = "yourAppId"
AUTHORIZATION = "yourAuthorization"
# URL 和请求数据
url = "算法调用地址" # 请求的 URL
request_data = {
"timestamp": int(time.time()),
"file_link": "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav",
"req_id": "yourRequestId",
"enable_callback": True,
"callback_url": "http://{ip}/{port}/{uri}"
}
# 构建请求头
headers = {
"Content-Type": "application/json",
"X-APP-ID": X_APP_ID,
"Authorization": AUTHORIZATION
}
def timeSimple(timestamp):
# 将时间戳转换为 HH:MM:SS 格式的时间字符串
dt_object = datetime.fromtimestamp(timestamp)
formatted_time = dt_object.strftime("%H:%M:%S")
return formatted_time
def send_request(url):
try:
start_time = time.time()
logging.info(f"请求路径: {url}")
logging.info(f"开始发送: {timeSimple(start_time)}")
with requests.post(
url, json=request_data, headers=headers, stream=True, verify=False
) as response:
first_packet_time = None
if response.status_code == 200:
logging.info(f"接受到返回: {timeSimple(time.time())}")
for chunk in response.iter_content(chunk_size=1024):
if chunk:
if first_packet_time is None:
first_packet_time = time.time()
logging.info(
f"Received chunk: {timeSimple(time.time())} {chunk.decode('utf-8')}"
)
end_time = time.time()
logging.info(f"Time to first byte (TTFB): {first_packet_time - start_time:.3f} seconds")
logging.info(f"Request completed in {end_time - start_time:.3f} seconds")
else:
logging.error(f"Request failed with status code {response.status_code}")
except Exception as e:
logging.error(f"An error occurred: {e}")
# 发送请求
send_request(url)
logging.info(f"headers = {headers}")