声音事件检测用于识别音频中的背景音乐、哭声、笑声、爆炸声等声音,并返回声音事件的起止时间。
声音事件类型
支持以下声音事件类型:
Music:纯背景音乐。Singing:唱歌。Laughter:笑声。Knock:敲门声或敲桌子声。Keyboard:键盘声。Cry:哭泣声。Explosion:爆炸声。Water:水声。SirenAlarm:警笛声。
使用限制
输入音频为 PCM 编码的无压缩 PCM 或 WAV 文件,16 bit 采样位深、单声道。
音频采样率为 16000 Hz。
仅支持实时发送音频数据。
计费和并发限制
声音事件检测提供试用版和商用版。服务版本及计费项请参见计费项,计费方式和升级操作请参见计费方式。并发限制请参见并发和 QPS 说明。
服务地址
|
访问方式 |
说明 |
服务地址 |
|
公网访问 |
所有服务器均可通过公网访问。 |
|
|
上海 ECS 内网访问 |
适用于华东 2(上海)地域的 ECS 实例,通过 VPC 访问。经典网络不支持访问语音服务。 |
|
Java SDK 的 NlsClient(String token) 默认使用上海公网服务地址。通过内网访问时,创建 NlsClient 需显式传入内网地址。内网访问不会产生 ECS 实例的公网流量费用。
交互流程
1. 鉴权
客户端建立 WebSocket 连接时使用 NLS Token 鉴权。Token 获取方法请参见获取 Token。项目 Appkey 获取方法请参见管理项目;Appkey 与 Token 需属于同一账号。
2. 开始检测
使用 Java SDK 时,通过 CommonRequest 构造函数传入命名空间,通过 setAppKey() 设置 Appkey,通过 addCustomedParam() 设置音频参数。参数说明如下:
|
参数 |
类型 |
说明 |
|
|
String |
命名空间,创建 |
|
|
String |
音频编码格式,默认 |
|
|
Integer |
音频采样率,默认 16000,单位为 Hz。 |
客户端初始化、监听器实现和音频发送的完整示例请参见Java SDK。以下片段基于已创建的 NlsClient client 和 CommonRequestListener listener,appkey 为项目 Appkey:
CommonRequest request = new CommonRequest(client, listener, "AudioEventDetection");
request.setAppKey(appkey);
request.addCustomedParam("format", "pcm");
request.addCustomedParam("sample_rate", 16000);
request.start();
调用 start() 发起任务。服务端返回 TaskStarted 后,SDK 触发 onStarted 回调。任务失败时,通过 onFailed 回调获取错误信息。
3. 接收识别结果
发送音频数据,通过 CommonRequestListener.onEvent 接收声音事件检测结果。每条 TaskResult 消息可包含声音事件列表,响应示例如下:
{
"header":{
"namespace":"AudioEventDetection",
"name":"TaskResult",
"status":20000000,
"message_id":"1727504541a143e2bf8cfc4037d4****",
"task_id":"f926a956efaf4d30a823abafe97d****",
"status_text":"Gateway:SUCCESS:Success."
},
"payload":{
"number":1,
"result":[
{
"confidence":0.81,
"end_time":32000,
"event_type":"Music",
"start_time":30000
}
]
}
}
header 对象
|
参数 |
类型 |
说明 |
|
|
String |
消息所属的命名空间。 |
|
|
String |
消息名称, |
|
|
Integer |
服务状态码, |
|
|
String |
状态消息。 |
|
|
String |
任务的全局唯一 ID,可用于排查问题。 |
|
|
String |
当前消息的 ID。 |
payload 对象
|
参数 |
类型 |
说明 |
|
|
Integer |
当前结果中的声音事件数量。 |
|
|
Array |
声音事件列表。各元素的字段见下表。 |
result 数组元素
|
参数 |
类型 |
说明 |
|
|
Integer |
声音事件相对于输入音频起点的开始时间,单位为毫秒。 |
|
|
Integer |
声音事件相对于输入音频起点的结束时间,单位为毫秒。 |
|
|
String |
声音事件类型,见前面的声音事件类型列表。 |
|
|
Float |
当前结果的置信度,取值范围为 [0.0, 1.0],值越大表示置信度越高。 |
4. 结束检测
音频发送完成后,调用 stop() 发送 StopTask。服务端处理完成后返回 TaskCompleted,SDK 触发 onStopped 回调,表示本次检测任务结束。
服务状态码
响应中的 header.status 表示服务状态。根据状态码和 status_text 处理错误;更多通用错误说明请参见错误码查询。
通用错误码
|
错误码 |
原因 |
解决方法 |
|
|
身份认证失败。 |
检查 Token 是否正确、是否已过期。 |
|
|
无效的消息。 |
检查发送的消息是否符合接口要求。 |
|
|
空闲超时。 |
检查是否连续 10 秒未向服务端发送数据。 |
|
|
请求数量过多。 |
检查并发连接数或每秒请求数是否超限。若并发连接数超限,可按需升级商用版,或增加商用版并发资源。 |
|
|
默认的客户端错误。 |
根据对应的状态消息排查。 |
|
|
免费试用期已结束。 |
如需继续使用,需开通商用版,操作请参见计费方式。 |
|
|
客户端超时。 |
客户端连续 10 秒及以上未发送数据,需检查音频发送是否中断。 |
|
|
采样率参数错误。 |
按输入音频要求检查采样率,应为 16000 Hz。 |
|
|
音频格式参数错误。 |
检查音频格式参数设置。 |
|
|
音频解码失败。 |
检查音频格式是否正常。 |
网关错误码
|
错误码 |
原因 |
解决方法 |
|
|
不支持的接口。 |
检查命名空间是否正确,以及接入地址是否提供该服务。 |
|
|
不支持的指令。 |
检查发送的指令名称是否符合接口要求。 |
|
|
无效的指令。 |
检查指令格式和参数。 |
|
|
客户端提前断开连接。 |
检查是否在任务正常完成前关闭了连接。 |
|
|
任务状态错误。 |
检查是否发送了当前任务状态无法处理的指令。 |
配置错误码
|
错误码 |
原因 |
解决方法 |
|
|
应用不存在。 |
检查项目 Appkey 是否存在。 |
|
|
Appkey 与 Token 不匹配。 |
检查 Appkey 是否正确,且与 Token 属于同一账号。 |
|
|
RAM 用户鉴权失败。 |
使用阿里云账号为调用的 RAM 用户授予 POP API 的访问权限。 |