WasapiLoopbackCapture 上的 CSCore 低通滤波器

问题描述

我对音频工作了解不多。我试图在我的主音频输出上创建一个低通滤波器,因为高频会触发我的耳鸣。从我读到的内容中,我了解到我需要通过 WasapiLoopbackCapture 获取计算机的音频输出。我想要实现的是使用低通滤波器将这个输出替换为过滤后的输出,因此它可以拒绝高于阈值的频率。我刚刚从互联网上抓取了一些代码。我不知道我做错了什么。代码如下:

private void btnEnable_Click(object sender,EventArgs e)
{
    capture = new WasapiLoopbackCapture();
    soundOut = new WasapIoUt();
    capture.Initialize();
    var soundInSource = new SoundInSource(capture) { FillWithZeros = true };
    
    using (var source = soundInSource
      .ToSampleSource()
      .AppendSource(x => new BiQuadFilterSource(x)))
      {
         using (var soundOut = new WasapIoUt())
         {
            soundOut.Initialize(source.ToWaveSource());
            soundOut.Play();
            source.Filter = new LowpassFilter(source.WaveFormat.SampleRate,1000);
         }
      }
}

这里是过滤器源类:

public class BiQuadFilterSource : SampleAggregatorBase
{
   private readonly object _lockObject = new object();
   private BiQuad _biquad;

   public BiQuad Filter
   {
      get { return _biquad; }
      set
      {
         lock (_lockObject)
         {
            _biquad = value;
         }
      }
   }

   public BiQuadFilterSource(ISampleSource source) : base(source) { }

   public override int Read(float[] buffer,int offset,int count)
   {
     int read = base.Read(buffer,offset,count);
     lock (_lockObject)
     {
        if (Filter != null)
        {
           for (int i = 0; i < read; i++)
           {
              buffer[i + offset] = Filter.Process(buffer[i + offset]);
           }
        }
     }
     return read;
   }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)