2015-02-23 121 views
0

我有一个c#windows窗体项目,使用以下c#代码,它使用NAudio库的BiQuadFilter类来实现低通滤波器。我面临的问题是,声音的强度也随频率下降,从而使音量几乎听不到。我怎样才能解决这个问题?不需要的音频强度减少

我的代码:

private ISampleProvider sourceProvider; 
    private BiQuadFilter[] filters; 
    private int channels,cutOffFreq; 

    //Constructor 
    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; 
    } 

这是我如何使用它:

waveOut.Init(new MyFilter(new AudioFileReader(path + "\\Audio_Tracks\\" + topic + "\\" + currentTrack + ".wav"), 750)); 

    waveOut.Play(); 
+0

你在哪里调用public int Read? – DonP 2017-06-28 04:52:51

回答

0

好吧,我不知道你的源材料是什么,但有一个截止频率的低通滤波器只有750Hz可能会削减你的原始信号。一般来说,过滤器会让事情更安静。之后放大声音(例如,在转换它之后,将每个样本乘以增益因子)。

+0

增益系数? – Chuker 2015-02-28 10:12:05