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 方式安装)。

配置步骤

  1. 调用 registerPlugin 方法并配置 pluginOptions 参数注册虚拟背景插件,其中 pluginOptions = {key: 'AIDenoise', pluginUrl: string, pluginObj: Object, wasmUrl: string},相关字段的具体说明如下:

    • keyAIDenoise,必填,表示 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.wasmhttps://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
    • 必须传入 pluginUrlpluginObj 的其中一项。
    • 安装 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.wasmNERTC_Web_SDK_AIDenoise_nosimd.wasm 文件,该文件可部署到您自己本地的服务器中,并将部署后的文件地址通过 wasmUrl 参数传递给 SDK。
  2. 调用 createStream 方法创建并返回一个本地音视频流对象。

    调用 createStream 创建媒体流之前,需要通过 getDevices 方法获取麦克风和摄像头设备的 deviceId。详细说明请参考音视频设备检测

  3. 在本端监听 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 加载失败。
  4. 在触发 onPluginLoaded 回调后,调用 enableAIDenoise 方法启用 AI 降噪功能。

  5. 若您需要取消 AI 降噪效果,请调用 disableAIDenoise 方法关闭 AI 降噪进程。

  6. 若您需要销毁 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 降噪插件。
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 前提条件
  • 注意事项
  • 配置步骤
  • 示例代码
  • API 参考