c# - 在 NAudio 环回中使用均衡器

标签 c# naudio equalizer

我使用 NAudio 编写了这个简单的方法来在当前的声音设备上创建一个混响 效果。它已经开始工作了。

但是,我只想在较高频率上应用混响效果,否则您会听到很多基鼓回声,这不是我想要的声音。

private void CreateReverb()
{
    WasapiLoopbackCapture waveIn = new WasapiLoopbackCapture();
    BufferedWaveProvider bufferedWaveProvider = new BufferedWaveProvider(waveIn.WaveFormat);
    VolumeSampleProvider volumeProvider = new VolumeSampleProvider(bufferedWaveProvider.ToSampleProvider());
    WasapiOut wasapiOut = new WasapiOut(AudioClientShareMode.Shared, 0);

    wasapiOut.Init(volumeProvider);
    wasapiOut.Play();
    waveIn.StartRecording();

    waveIn.DataAvailable += delegate(object sender, WaveInEventArgs e)
    {
        bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
        volumeProvider.Volume = .8f * ReverbIntensity;
    };
}

我尝试了一些我在网上找到的创建均衡器的代码,但我无法将它应用到我现有的代码中。

问题:如何使用某种均衡器将此混响效果更改为仅影响较高音调?

最佳答案

我偶然发现了 BiQuadFilter,事实证明它可以用于该目的。

它将样本转换为 float ,而 WasapiLoopbackCapture.DataAvailable 返回 byte[]。但是 BitConverter 可以将 float 转换为 byte[4] 并且 Buffer.BlockCopy 将其写回到流中。

这是一个包含均衡器的工作混响。

private void CreateReverb()
{
    WasapiLoopbackCapture waveIn = new WasapiLoopbackCapture();
    BufferedWaveProvider bufferedWaveProvider = new BufferedWaveProvider(waveIn.WaveFormat);
    VolumeSampleProvider volumeProvider = new VolumeSampleProvider(bufferedWaveProvider.ToSampleProvider());
    WasapiOut wasapiOut = new WasapiOut(AudioClientShareMode.Shared, 0);
    BiQuadFilter filter = BiQuadFilter.HighPassFilter(44000, 200, 1);

    wasapiOut.Init(volumeProvider);
    wasapiOut.Play();
    waveIn.StartRecording();

    waveIn.DataAvailable += delegate(object sender, WaveInEventArgs e)
    {
        for (int i = 0; i < e.BytesRecorded; i += 4)
        {
            byte[] transformed = BitConverter.GetBytes(filter.Transform(BitConverter.ToSingle(e.Buffer, i)));
            Buffer.BlockCopy(transformed, 0, e.Buffer, i, 4);
        }
        bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
        volumeProvider.Volume = .8f * ReverbIntensity;
    };
}

关于c# - 在 NAudio 环回中使用均衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30601078/

相关文章:

c# - 从 EF 选择返回元组

c# - 如何更改在asp中选择的文件的文本颜色:fileUpload in Safari?

c# - Entity Framework 中多个 "Include"-s 的最佳实践是什么?

C# NAudio 在从另一个页面 POST 后生成 Noise WAV 文件而没有错误

C# - 正则表达式 - ArgumentException

c# - 复制并更新主动录制Wav文件的内容到一个新文件

c# - 修剪 wav 文件

ios - AVPlayer播放音频时如何添加iPod EQ?

IOS:如何在 Swift 中增加 AVAudioPlayer 的低音和高音?