啸叫检测

更新时间: 2024/09/18 16:26:13

本文介绍了如何在应用中使用啸叫检测插件。

功能介绍

啸叫检测用于检测是否由于设备距离过近产生啸叫。啸叫检测通常用于电话会议、语音识别应用等各种场景中,以确保声音信号的清晰度和质量,并避免由啸叫声造成的不良影响。

当检测到有啸叫信号产生的时候,会触发啸叫检测回调一直到啸叫停止。上层用户接收到回调信息,代表有啸叫产生,用户可提示用户关闭麦克风或者是直接操作关闭麦克风。

本插件支持检测是否存在啸叫。

兼容性

以下浏览器版本支持啸叫检测功能:

  • Chrome 浏览器 77 及以上,Chrome beta
  • Safari 浏览器 15.4 及以上
  • Firefox 浏览器 最新(120)
  • Edge 浏览器 最新(119)

注意事项

配置步骤

  1. 调用 createStream 方法创建并返回一个本地音视频流对象。

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

  2. 调用 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
    • 必须传入 pluginUrlpluginObj 的其中一项。
    • 安装 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.wasmNERTC_Web_SDK_AIhowling_nosimd.wasm 文件,该文件可部署到您自己本地的服务器中,并将部署后的文件地址通过 wasmUrl 参数传递给 SDK。
  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. 在触发 plugin-load 回调后,调用 enableAIhowling 方法启用啸叫检测功能。

  5. 若您需要取消啸叫检测,请调用 disableAIhowling 方法关闭啸叫检测进程。

  6. 若您需要销毁啸叫检测插件,请调用 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);
}
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 兼容性
  • 注意事项
  • 配置步骤
  • 示例代码