【问题标题】:How can I reduce the noise of a microphone input with the Web Audio API?如何使用 Web Audio API 减少麦克风输入的噪音?
【发布时间】:2018-10-03 17:25:54
【问题描述】:

我一直在使用 Web Audio API 并使用笔记本电脑的麦克风作为输入源。但是,当我收听输入时,我会听到很多白噪声;我怎样才能创建一个过滤器来减少噪音,使声音更清晰?是否有任何库为这种情况提供预先编写的噪声过滤器?

【问题讨论】:

  • 没有魔法噪音过滤器这样的东西。引入噪音的方式有很多种,消除噪音的方式也很多,具体取决于您处理的噪音类型。此外,您是要在客户端还是在服务器上过滤这种噪音?当您过滤掉噪音时,您也会过滤信号,从而降低音频质量。也许你只需要一个简单的噪音门?你的申请是什么?
  • 我意识到没有“魔术过滤器”,但我认为人们使用标准方法来构建噪声过滤器。我正在使用 Web Audio API,所以这将是客户端。也许我正在寻找一个噪音门,如何创建一个?
  • 我对Web Audio API不太熟悉,但一般来说,门只是在级别达到某个阈值之前不允许音频通过。这个想法是,当你不说话时,没有音频通过。当电平低于阈值时,您听不到噪音(或任何声音)。当它在上面时,你会听到噪音,但它会被你的声音掩盖。另一种方法是获取噪声的频谱样本,然后从流中减去该频谱。这对于特定类型的噪音更好,例如 60hz 泄漏。它还会降低音频质量。
  • 很难以听起来不刺耳的方式滤除环境噪音。录音工程师会在鼓上使用门限 - 但不自然的声音会被混音的其余部分掩盖。据我所知,没有任何用于实现门的 Web 音频 API 库 - 规范中也没有门或扩展器。你可以写一个,但这并不简单,因为你需要控制阈值、攻击/释放和保持。根据您要做什么,最好的选择可能是尝试找到一个噪音较小的环境。好房间 + 好来源 = 好信号。

标签: javascript html5-audio web-audio-api


【解决方案1】:

'`正在研究一些 POC,并使用 BiquadFilter 减少笔记本电脑的“生命鼻子”。我也用过压缩机,但你不必))

(function(){
    var filter, compressor, mediaStreamSource;

    // Start off by initializing a new context.
    var context = new (window.AudioContext || window.webkitAudioContext)();


    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
    navigator.getUserMedia( {audio:true}, initAudio , function(err){
        console.log('usermedia error', err)
    });



    function initAudio(stream) {
        compressor = context.createDynamicsCompressor();
        compressor.threshold.value = -50;
        compressor.knee.value = 40;
        compressor.ratio.value = 12;
        compressor.reduction.value = -20;
        compressor.attack.value = 0;
        compressor.release.value = 0.25;

        filter = context.createBiquadFilter();
        filter.Q.value = 8.30;
        filter.frequency.value = 355;
        filter.gain.value = 3.0;
        filter.type = 'bandpass';
        filter.connect(compressor);


        compressor.connect(context.destination)
        filter.connect(context.destination)

        mediaStreamSource = context.createMediaStreamSource( stream );
        mediaStreamSource.connect( filter );
    }
})();

【讨论】:

  • 压缩机和过滤器都应该连接到目的地,过滤器也连接到压缩机是否正确?
【解决方案2】:

如果您听到的更像是嘶嘶声而不是全谱噪声,您可以尝试使用某种高通滤波器。我相信 Web Audio API 具有您可以实现的那种类型的过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 2015-09-24
    • 2018-12-12
    • 2010-09-30
    • 2019-10-13
    • 2015-02-10
    • 2019-09-25
    • 2015-11-26
    相关资源
    最近更新 更多