C# - 如何使 BiQuadFilter 代码工作
C# - How to make the BiQuadFilter Code work
我必须遵循通过低通滤波器传递我的 WAV 文件的 C# 代码。为此,我正在使用 NAudio 的 BiQuadFilter
。但是声音没有任何变化,还是一样。
我的代码:
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;
}
这是在一个名为 MyFilter
的 class 中,我这样称呼它:
audioFileReader = new AudioFileReader("a.wav");
myFilter.setValues(audioFileReader, currentCutOff);
waveOut.Init(audioFileReader);
waveOut.Play();
传递的截止值(仅按此顺序)是:3000、2500、2000、1500 和 1000,但是,截止值变化时感觉不到任何变化。
您需要将过滤器传递给 waveOut.Init
而不是 audioFileReader
,以便文件中的音频通过过滤器。
waveOut.Init(myFilter);
我必须遵循通过低通滤波器传递我的 WAV 文件的 C# 代码。为此,我正在使用 NAudio 的 BiQuadFilter
。但是声音没有任何变化,还是一样。
我的代码:
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;
}
这是在一个名为 MyFilter
的 class 中,我这样称呼它:
audioFileReader = new AudioFileReader("a.wav");
myFilter.setValues(audioFileReader, currentCutOff);
waveOut.Init(audioFileReader);
waveOut.Play();
传递的截止值(仅按此顺序)是:3000、2500、2000、1500 和 1000,但是,截止值变化时感觉不到任何变化。
您需要将过滤器传递给 waveOut.Init
而不是 audioFileReader
,以便文件中的音频通过过滤器。
waveOut.Init(myFilter);