我必须遵循C#代码,它通过低通滤波器传递我的WAV文件。我正在使用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
的类中,我这样称呼它:
audioFileReader = new AudioFileReader("a.wav");
myFilter.setValues(audioFileReader, currentCutOff);
waveOut.Init(audioFileReader);
waveOut.Play();
传递的截止值(仅按此顺序)为:3000,2500,2000,1500和1000,但是,当切断变化时,感觉没有变化。
答案 0 :(得分:1)
您需要将过滤器传递到waveOut.Init
而不是audioFileReader
,以便将文件中的音频拉过过滤器。
waveOut.Init(myFilter);