嗨我有一個音軌,我想通過低通濾波器傳遞後播放。我使用NAudio的BiQuadFilter類作爲濾鏡部分。它有一個內置的方法。第一個參數是採樣率,第二個參數是截止頻率,第三個參數是品質因數Q.我無法將Filter方法與我的音頻部分集成在一起。 這是我的代碼:集成音頻和濾波方法
var r = BiQuadFilter.LowPassFilter(44100, 1500, 1);
var reader = new WaveFileReader(File.OpenRead(@"D:1.wav"));
var waveOut=new WaveOut();
waveOut.Init(reader);
waveOut.Play();
我管理終於得到它的工作。不知道這是否正確。這是我做的:
public MyFilter(ISampleProvider sourceProvider,int cutOffFreq)
{
this.sourceProvider = sourceProvider;
this.cutOffFreq = cutOffFreq;
channels = sourceProvider.WaveFormat.Channels;
filters = new BiQuadFilter[channels];
CreateFilters();
}
private void CreateFilters()
{
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;
}
這是正確的嗎?
你的問題到底是什麼?你想要達到什麼目的,你嘗試了什麼,爲什麼它不符合你的期望? – nvoigt 2014-10-08 10:05:22
我想用低通濾波器過濾我的音頻。我怎麼做? BiQuadFilter.LowPassFilter方法如何知道哪些音頻應該用作輸入?這裏LowPassFilter的結果存儲在'r'中,而閱讀器是WaveFileReader的對象,它存儲要播放哪個音軌。我如何將低通濾波器的效果與我的音頻集成在一起,只有低於1500 Hz的頻率才能播放? – Chuker 2014-10-08 17:22:57
你的代碼看起來不錯!我沒有發現任何錯誤。我只是好奇你是如何管理字節/浮點數問題的。我想你的班級沒有實施NAudio.Wave.IWaveProvider接口... – 2014-10-27 09:03:44