啸叫检测
更新时间: 2024/09/18 16:26:13
本文介绍了如何在应用中使用啸叫检测插件。
功能介绍
啸叫检测用于检测是否由于设备距离过近产生啸叫。啸叫检测通常用于电话会议、语音识别应用等各种场景中,以确保声音信号的清晰度和质量,并避免由啸叫声造成的不良影响。
当检测到有啸叫信号产生的时候,会触发啸叫检测回调一直到啸叫停止。上层用户接收到回调信息,代表有啸叫产生,用户可提示用户关闭麦克风或者是直接操作关闭麦克风。
本插件支持检测是否存在啸叫。
兼容性
以下浏览器版本支持啸叫检测功能:
- Chrome 浏览器 77 及以上,Chrome beta
- Safari 浏览器 15.4 及以上
- Firefox 浏览器 最新(120)
- Edge 浏览器 最新(119)
注意事项
onAudioHasHowling
在enableAIhowling
前后均可调用。- 调用 开启伴音 方法替换麦克风采集的音频流后,不支持开启啸叫检测。
配置步骤
-
调用
createStream
方法创建并返回一个本地音视频流对象。调用
createStream
创建媒体流之前,需要通过getDevices
方法获取麦克风和摄像头设备的 deviceId。详细说明请参考 音视频设备检测。 -
调用
registerPlugin
方法并配置pluginOptions
参数注册啸叫检测插件,其中pluginOptions = {key: 'AIhowling', pluginUrl: string, pluginObj: Object, wasmUrl: string}
,相关字段的具体说明如下:参数是否必选 描述 key
必选 AIhowling
,必填,表示啸叫检测插件。pluginUrl
可选 插件的 CDN 地址,同 pluginObj 互斥。支持自定义 URL,也可使用默认地址 https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIhowling_v5.5.11.js
。pluginObj
可选 插件对象,同 pluginUrl 互斥。请通过 NPM 方式安装,具体安装方式请参考下方 说明。 wasmUrl
必选 插件依赖的 wasm 文件地址。官网的 SDK 包以及 NPM 包均提供原文件,可以部署到您自己本地的服务器中。 - 啸叫检测插件插件提供 simd 版本和非 simd 版本,建议使用 simd 版本以体验更佳的性能。在不支持 smid 版本的浏览器中请使用非 smid 版本的插件,关于您的浏览器是否支持 simd 版本的插件,请参考
wasm-feature-detect
。 - 必须传入
pluginUrl
和pluginObj
的其中一项。 - 安装
pluginObj
的代码如下:NPM
//第一步,安装 nertc-web-sdk npm install nertc-web-sdk //第二步,导入啸叫检测插件 import AIhowling from 'nertc-web-sdk/NERTC_Web_SDK_AIhowling'
- 若您选择通过 NPM 安装插件,您在安装后可在
nertc-web-sdk/wasm
路径下的文件夹中找到NERTC_Web_SDK_AIhowling_simd.wasm
和NERTC_Web_SDK_AIhowling_nosimd.wasm
文件,该文件可部署到您自己本地的服务器中,并将部署后的文件地址通过wasmUrl
参数传递给 SDK。
- 啸叫检测插件插件提供 simd 版本和非 simd 版本,建议使用 simd 版本以体验更佳的性能。在不支持 smid 版本的浏览器中请使用非 smid 版本的插件,关于您的浏览器是否支持 simd 版本的插件,请参考
-
在本端监听
on('plugin-load')
和on('plugin-load-error')
事件,以判断 AI 啸叫检测插件是否加载成功。若因插件注册失败触发了
on('plugin-load-error')
回调,请关注返回的event
结构里的msg
详细字段:Load {wasmUrl} error
:wasm 加载失败,需要检查 URL 地址。unsupport plugin {key}
:不支持该插件,需要检查key
参数和pluginUrl/pluginObj
是否匹配。Load plugin ${pluginUrl} error
:pluginUrl 加载失败。
-
在触发
plugin-load
回调后,调用enableAIhowling
方法启用啸叫检测功能。 -
若您需要取消啸叫检测,请调用
disableAIhowling
方法关闭啸叫检测进程。 -
若您需要销毁啸叫检测插件,请调用
unregisterPlugin(pluginKey)
方法销毁插件。
示例代码
使用 CDN 插件
JavaScriptrtc.localStream = NERTC.createStream({
uid: uid, // 本端的 uid
audio: true, // 是否从麦克风采集音频
microphoneId: microphoneId, // 麦克风设备 deviceId,通过 getMicrophones() 获取
video: true, // 是否从摄像头采集视频
cameraId: cameraId // 摄像头设备 deviceId,通过 getCameras() 获取
});
const pluginOptions = {
key: 'AIhowling', // 插件名
pluginUrl: '', // 插件 js 地址
wasmUrl: '', // 插件依赖的 wasm 文件地址
};
// 注册啸叫检测插件
rtc.localStream.registerPlugin(pluginOptions);
// 注册 plugin-load 事件,当插件初始化完成后回调 onPluginLoaded
rtc.localStream.on('plugin-load', onPluginLoaded);
// 插件注册失败时触发,event 结构:{key: 插件名,msg: 详细信息}
rtc.localStream.on('plugin-load-error', event); // 具体参考信息见上文配置步骤
function onPluginLoaded(name: string) {
if (name === 'AIhowling') {
//在此处可立即调用 enableAIhowling()或 onAudioHasHowling(howlingCallback)
}
}
//打开 啸叫检测
rtc.localStream.enableAIhowling();
//关闭 啸叫检测
rtc.localStream.disableAIhowling();
//注册啸叫检测回调,可以在 enableAIhowling()之前注册
//注意:注册后,约每 2.56s 回调一次
rtc.localStream.onAudioHasHowling(howlingCallback);
//销毁插件,销毁之后如果需要使用插件则需再次注册
rtc.localStream.unregisterPlugin(pluginKey);
//回调函数
//result: true 存在啸叫,false 无啸叫。
function howlingCallback(result: boolean) {
console.warn('啸叫状态', result);
}
使用 NPM 插件
JavaScriptimport NERTC from 'nertc-web-sdk';
import AIhowling from 'nertc-web-sdk/NERTC_Web_SDK_AIhowling'
rtc.localStream = NERTC.createStream({
uid: uid, // 本端的 uid
audio: true, // 是否从麦克风采集音频
microphoneId: microphoneId, // 麦克风设备 deviceId,通过 getMicrophones() 获取
video: true, // 是否从摄像头采集视频
cameraId: cameraId // 摄像头设备 deviceId,通过 getCameras() 获取
});
const pluginOptions = {
key: 'AIhowling', // 插件名
pluginObj: AIhowling, // AIhowling 对象
wasmUrl: '', // 插件依赖的 wasm 文件地址
};
// 注册啸叫检测插件
rtc.localStream.registerPlugin(pluginOptions);
// 注册 plugin-load 事件,当插件初始化完成后回调 onPluginLoaded
rtc.localStream.on('plugin-load', onPluginLoaded);
// 插件注册失败时触发,event 结构:{key: 插件名,msg: 详细信息}
rtc.localStream.on('plugin-load-error', event); // 具体参考信息见上文配置步骤
function onPluginLoaded(name: string) {
if (name === 'AIhowling') {
//在此处可立即调用 enableAIhowling()或 onAudioHasHowling(howlingCallback)
}
}
//打开 啸叫检测
rtc.localStream.enableAIhowling();
//关闭 啸叫检测
rtc.localStream.disableAIhowling();
//注册啸叫检测回调,可以在 enableAIhowling()之前注册
//注意:注册后,约每 2.56s 回调一次
rtc.localStream.onAudioHasHowling(howlingCallback);
//销毁插件,销毁之后如果需要使用插件则需再次注册
rtc.localStream.unregisterPlugin(pluginKey);
//回调函数
//result: true 存在啸叫,false 无啸叫。
function howlingCallback(result: boolean) {
console.warn('啸叫状态', result);
}