ai-noise-reduction
v0.0.1
Published
AI模型音频降噪
Downloads
14
Maintainers
Readme
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
转储降噪处理过程中的音频数据,方便定位和分析降噪处理的问题
- 音频数据所处的阶段,有以下三种
- input:待降噪的音频数据。
- ns_out:经过降噪处理的音频数据。
- agc_out:经过人声增强处理的音频数据。
ondump
注册转储事件
globalAiDenoiser.on("dump", (blob, name) => {}
onoverload
降噪处理耗时过长回调
- elapsedTime:插件处理一帧音频的时间(毫秒)
在这里主要感谢声网 降噪 AI 模型,模块持续优化