我注意到曾经存在一个
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,所以这一切对我来说都是未知的!有什么想法吗?
有一个名为
AKBooster
的组件,您可以将其用作噪声门。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 左右才能产生明显的效果。
请注意,全范围噪声门是一种非常原始的降噪形式。