如何使用AudioKit降低背景噪音?

问题描述 投票:0回答:1

我注意到曾经存在一个

AKNoiseGate
过滤器,但现在不存在了!我已经尝试过
DynamicRangeCompressor
但我不满意!有没有过滤器可以做到这一点?

我尝试创建一个

DSP
,但音频变得非常失真:

#include "SoundpipeDSPBase.h"
#include "ParameterRamper.h"
#include "Soundpipe.h"
#include "CSoundpipeAudioKit.h"

#define CHUNKSIZE 512

void process(FrameRange range) override {
    const float *inBuffers[2];
    float *outBuffers[2];
    inBuffers[0]  = (const float *)inputBufferLists[0]->mBuffers[0].mData + range.start;
    inBuffers[1]  = (const float *)inputBufferLists[0]->mBuffers[1].mData + range.start;
    outBuffers[0] = (float *)outputBufferList->mBuffers[0].mData + range.start;
    outBuffers[1] = (float *)outputBufferList->mBuffers[1].mData + range.start;
    
    if (!isStarted) {
        // effect bypassed: just copy input to output
        memcpy(outBuffers[0], inBuffers[0], range.count * sizeof(float));
        memcpy(outBuffers[1], inBuffers[1], range.count * sizeof(float));
        return;
    }
    
    // Convert dB to linear amplitude
    const float threshold = powf(10.0, decibelCutoff / 20.0);
    
    // process in chunks of maximum length CHUNKSIZE
    for (int frameIndex = 0; frameIndex < range.count; frameIndex += CHUNKSIZE) {
        int chunkSize = range.count - frameIndex;
        if (chunkSize > CHUNKSIZE) chunkSize = CHUNKSIZE;
        
        for (int i = 0; i < chunkSize; ++i) {
            // Check amplitude of each sample in stereo channels
            for (int channel = 0; channel < 2; ++channel) {
                float amplitude = fabs(inBuffers[channel][i]);

                // If amplitude is below threshold, mute, otherwise pass through
                outBuffers[channel][i] = (amplitude < threshold) ? 0.0 : inBuffers[channel][i];
            }
        }
        
        // advance pointers
        inBuffers[0] += chunkSize;
        inBuffers[1] += chunkSize;
        outBuffers[0] += chunkSize;
        outBuffers[1] += chunkSize;
    }
}

我的信号处理知识为0,所以这一切对我来说都是未知的!有什么想法吗?

swift signal-processing audiokit
1个回答
0
投票

有一个名为

AKBooster
的组件,您可以将其用作噪声门。
我找到了一个 Swift 示例here:

import AudioKit

let microphone = AKMicrophone()
let noiseGate = AKBooster(microphone,
                          gain: 0,
                          rampDuration: 0.001,
                          minimumLevel: -90)

// Set up the microphone input node
let microphoneMixer = AKMixer(noiseGate)
AudioKit.output = microphoneMixer
AudioKit.start()

minimumLevel
是以 dBFS 为单位的门阈值。也许你需要将其设置在 -50 到 -30 左右才能产生明显的效果。

请注意,全范围噪声门是一种非常原始的降噪形式。

© www.soinside.com 2019 - 2024. All rights reserved.