gpt4 book ai didi

c# - C#下面的低通滤波器代码如何运行?

转载 作者:行者123 更新时间:2023-12-02 22:56:22 36 4
gpt4 key购买 nike

我在NAudio网站上找到了以下用于低通滤波器的C#代码:

    public void setValues(ISampleProvider sourceProvider,int cutOffFreq)
{
this.sourceProvider = sourceProvider;
this.cutOffFreq = cutOffFreq;

filter_LowPass();
}

private void filter_LowPass()
{
channels = sourceProvider.WaveFormat.Channels;
filters = new BiQuadFilter[channels];

for (int n = 0; n < channels; n++)
if (filters[n] == null)
filters[n] = BiQuadFilter.LowPassFilter(44100, cutOffFreq, 1);
else
filters[n].SetLowPassFilter(44100, cutOffFreq, 1);
}

public WaveFormat WaveFormat { get { return sourceProvider.WaveFormat; } }

public int Read(float[] buffer, int offset, int count)
{
int samplesRead = sourceProvider.Read(buffer, offset, count);

for (int i = 0; i < samplesRead; i++)
buffer[offset + i] = filters[(i % channels)].Transform(buffer[offset + i]);

return samplesRead;
}

我的读取功能在哪里被调用?

我为什么需要它?

我这样调用函数filter_LowPass:
        myFilter.setValues(audioFileReader, currentCutOff);

waveOut.Init(myFilter);

如果要在通过低通滤波器后将每个样本乘以一个恒定值,该在哪里编写代码?

最佳答案

NAudio在这里使用拉模型。声卡将要求对waveOut进行采样,因此它将在上游调用myFilter.Read(),后者又将调用audioFileReader.Read()

如果要增加一些额外的增益,可以按照相同的模式创建一个新的ISampleProvider或将其内联到低通滤波器的read函数中:

public int Read(float[] buffer, int offset, int count)
{
int samplesRead = sourceProvider.Read(buffer, offset, count);

for (int i = 0; i < samplesRead; i++)
buffer[offset + i] = gain * filters[(i % channels)].Transform(buffer[offset + i]);
// ^^^^

return samplesRead;
}

关于c# - C#下面的低通滤波器代码如何运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29396977/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com