AI 降噪
更新时间: 2024/08/05 15:02:55
在音视频通话或互动直播场景中,如果环境中有持续的背景噪声,例如户外环境的车流噪声、室内环境的背景人声等,在一定程度上会影响通话体验。
NERTC SDK 为您提供网易云信自研 AI 算法降噪功能,可智能分析环境音成分,自动甄别并过滤环境噪声。开启 AI 降噪之后,在嘈杂的环境中可以针对背景人声、键盘声等非稳态噪声进行定向降噪,同时也会提升对于环境稳态噪声的抑制,保留更纯粹的人声。
功能介绍
网易云信提供虚拟背景插件 AIDenoise
,可以与核心 SDK 搭配使用。支持通过开启 AI 降噪功能,对非稳态噪声进行定向降噪。
仅 v4.6.25 及之后版本的 NERTC Web SDK 支持此功能,请前往网易云信 SDK 下载中心获取最新版本 SDK。
前提条件
在实现 AI 降噪功能前,请确保已在您的项目中实现基本的实时音视频功能。
注意事项
- 该插件与核心 SDK 独立,在注册时需配置插件地址,注意插件版本需要与核心 SDK 版本匹配。
- AI 降噪功能暂时仅支持桌面端 Chrome 浏览器和 Safari 浏览器(建议 15.4+),暂不兼容 Firefox 浏览器。
- 若您的开发环境中使用了 babel 插件,您需要在
babel.config.js
文件中增加exclude: /NIM_Web/
(通过 CDN 方式安装) 或exclude: /NERTC_Web_SDK/
(通过 npm 方式安装)。
配置步骤
-
调用
registerPlugin
方法并配置pluginOptions
参数注册虚拟背景插件,其中pluginOptions = {key: 'AIDenoise', pluginUrl: string, pluginObj: Object, wasmUrl: string}
,相关字段的具体说明如下:key
:AIDenoise
,必填,表示 AI 降噪插件。pluginUrl
:可选,插件的 CDN 地址。支持自定义 URL,也可使用默认地址https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIDenoise_v4.6.25.js
。pluginObj
:可选,插件对象。请通过 npm 方式安装,具体安装方式请参考下方说明。wasmUrl
:必填,插件依赖的 wasm 文件地址。官网的 SDK 包以及 npm 包均提供原文件,可以部署到您自己本地的服务器中;也可以使用https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIDenoise_simd_v4.6.25.wasm
或https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIDenoise_nosimd_v4.6.25.wasm
。
- AI 降噪插件提供 simd 版本和非 simd 版本,建议使用 simd 版本以体验更佳的性能;在不支持 smid 版本的浏览器中请使用非 smid 版本的插件,关于您的浏览器是否支持 simd 版本的插件,请参考
wasm-feature-detect
。 - 必须传入
pluginUrl
和pluginObj
的其中一项。 - 安装
pluginObj
的代码如下://第一步 npm install nertc-web-sdk //第二步 import AIDenoise from 'nertc-web-sdk/NERTC_Web_SDK_AIDenoise'
- 若您选择通过 npm 安装插件,您在安装后可在
nertc-web-sdk/wasm
路径下的文件夹中找到NERTC_Web_SDK_AIDenoise_simd.wasm
和NERTC_Web_SDK_AIDenoise_nosimd.wasm
文件,该文件可部署到您自己本地的服务器中,并将部署后的文件地址通过wasmUrl
参数传递给 SDK。
-
调用
createStream
方法创建并返回一个本地音视频流对象。调用
createStream
创建媒体流之前,需要通过getDevices
方法获取麦克风和摄像头设备的 deviceId。详细说明请参考音视频设备检测。 -
在本端监听
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 加载失败。
-
在触发
onPluginLoaded
回调后,调用enableAIDenoise
方法启用 AI 降噪功能。 -
若您需要取消 AI 降噪效果,请调用
disableAIDenoise
方法关闭 AI 降噪进程。 -
若您需要销毁 AI 降噪插件,请调用
unregisterPlugin(key)
方法销毁插件。
示例代码
使用 AI 降噪的基础流程对应的示例代码如下:
//注册 AI 降噪插件
rtc.localStream.registerPlugin(pluginOptions)
const pluginOptions = {
key: 'AIDeonoise', //插件名
pluginUrl: 'https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIDeonoise_v4.6.25.js', //插件NIM_Web_AIDeonoise.js地址
wasmUrl: 'https://yx-web-nosdn.netease.im/sdk-release/NIM_Web_AIDeonoise_nosimd_v4.6.25.wasm', //插件依赖的NIM_Web_AIDeonoise.wasm文件地址
}
// 创建本端stream实例
rtc.localStream = NERTC.createStream({
uid: uid, // 本端的uid
audio: true, // 是否从麦克风采集音频
microphoneId: microphoneId, // 麦克风设备 deviceId,通过 getMicrophones() 获取
video: true, // 是否从摄像头采集视频
cameraId: cameraId // 摄像头设备 deviceId,通过 getCameras() 获取
});
//注册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 == 'AIDenoise') {
//在此处可立即调用
}
}
//打 AI 降噪
rtc.localStream.enableAIDenoise()
//关闭 AI 降噪
rtc.localStream.disableAIDenoise()
//销毁插件,销毁之后如果需要使用插件则需再次注册
rtc.localStream.unregisterPlugin(pluginKey)
API 参考
方法 | 功能描述 |
---|---|
registerPlugin |
注册 AI 降噪插件。 |
createStream |
创建并返回音视频流对象。 |
enableAIDenoise |
初始化 AI 降噪进程。 |
disableAIDenoise |
关闭 AI 降噪进程。 |
unregisterPlugin(key) |
销毁 AI 降噪插件。 |