0.0.2 • Published 2 months ago

ai-denoiser v0.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
2 months ago

AI 降噪

开发过程中,或者需要小猪进一步优化,可以联系小猪,关注小猪抖音账号:chuntianxiaozhu 交流更多技术

web RTC 音频解析流程

流程图

采集->编码->传输->解码->播放

本模块主要在编码阶段将输入声道的节点进行解析处理,然后再传输出去

用法

var globalStream;
var globalAiDenoiser;

async function initAudioData(stream) {
  globalStream = stream;
  const audioContext = new AudioContext();
  globalAiDenoiser = new Ctxz.AIDenoiser({
    assetsPath: wasmPath,
    context: audioContext,
    ains: true,
    agc: true,
    bufferTime: 30,
    dumpBundleNums: 3,
    threshold: 2,
  });
  globalAiDenoiser.on("overload", (elapsedTime) => {
    // 如果处理超时转换成性能消耗更小的稳态降噪
    globalAiDenoiser.setMode(Ctxz.AIDenoiserProcessorMode.STATIONARY_NS);
  });
  await globalAiDenoiser.init();
  globalAiDenoiser.dump();
  const source = audioContext.createMediaStreamSource(stream);
  const aiDenoiserNode = globalAiDenoiser.connect(source, audioContext);
  aiDenoiserNode.connect(audioContext.destination);
  // 初始设置成AI降噪模式
  globalAiDenoiser.setMode(Ctxz.AIDenoiserProcessorMode.NSNG);
  // 推荐设置成舒缓降噪
  globalAiDenoiser.setLevel(Ctxz.AIDenoiserProcessorLevel.SOFT);
}

async function recordSound() {
  navigator.mediaDevices
    .getUserMedia({
      audio: {
        // andoird机器上不需要设置
        sampleRate: 48000,
        // sampleSize: ,
        channelCount: 2,
        autoGainControl: true,
        echoCancellation: true,
        noiseSuppression: false,
        googHighpassFilter: true,
        // 选择设备
        // deviceId: {
        //     exact:
        // }
      },
    })
    .then(initAudioData)
    .catch((e) => {
      console.log(e);
    });
}

function stopSound() {
  globalAiDenoiser.destroy();
  globalStream.getTracks().forEach((track) => {
    if (track.readyState === "live") {
      track.stop();
    }
  });
}

// 启用降噪
globalAiDenoiser && globalAiDenoiser.enable();

// 禁用降噪
globalAiDenoiser && globalAiDenoiser.disable();

API

checkCompatibility

检查当前浏览器是否支持降噪

enable

开启降噪

disable

禁用降噪

setMode

设置降噪模式

NSNG:模型降噪。该模式可以压制噪声类型中的稳态与非稳态噪声。
STATIONARY_NS:稳态降噪。该模式仅压制稳态噪声,建议仅在模型降噪处理耗时过长时使用。

setLevel

设置降噪强度

SOFT:(推荐)舒缓降噪。
AGGRESSIVE:激进降噪。将降噪强度提高到激进降噪会增大损伤人声的概率

dump

转储降噪处理过程中的音频数据,方便定位和分析降噪处理的问题

  • 音频数据所处的阶段,有以下三种
  1. input:待降噪的音频数据。
  2. ns_out:经过降噪处理的音频数据。
  3. agc_out:经过人声增强处理的音频数据。

ondump

注册转储事件

globalAiDenoiser.on("dump", (blob, name) => {}

onoverload

降噪处理耗时过长回调

  • elapsedTime:插件处理一帧音频的时间(毫秒)

在这里主要感谢声网 降噪 AI 模型,模块持续优化

0.0.2

2 months ago

0.0.1

2 months ago