问题描述
我对音频工作了解不多。我试图在我的主音频输出上创建一个低通滤波器,因为高频会触发我的耳鸣。从我读到的内容中,我了解到我需要通过 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 (将#修改为@)