首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NWaves (或任何其他库)获得WAV音频的频率A到频率B的严格/锐减?

如何使用NWaves (或任何其他库)获得WAV音频的频率A到频率B的严格/锐减?
EN

Stack Overflow用户
提问于 2022-10-20 17:27:02
回答 1查看 23关注 0票数 1

我需要一个尖锐的“削减”的WAV音频文件从频率A (500赫兹)到频率B (800赫兹),并将其放入一个新的文件。

这是Adobe试镜的方式。

我试过使用NWaves.Filters.Butterworth.BandPassFilter,但它并没有按照我想要的方式实现:BandPassFilter。不够锋利

代码语言:javascript
运行
复制
        DiscreteSignal signal = waveContainer[Channels.Average];

        int samplingRate = signal.SamplingRate;

        int lowerFrequencyHz = 500;
        int upperFrequencyHz = 800;
        double lowerFrequency = (double)lowerFrequencyHz / samplingRate;
        double upperFrequency = (double)upperFrequencyHz / samplingRate;

        var tf = new NWaves.Filters.Butterworth.BandPassFilter(lowerFrequency, upperFrequency, 3).Tf;
        var filter = new NWaves.Filters.Base64.IirFilter64(tf);
        var filtered = signal.Samples.Select(s => (float)filter.Process(s));
        DiscreteSignal outSignal = new DiscreteSignal(signal.SamplingRate, filtered);

我如何使用C#和可能的NWaves库实现它,使它变得像Adobe一样精确地选择、复制和粘贴?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 13:48:48

我找到了怎么做

代码语言:javascript
运行
复制
        DiscreteSignal signal = waveContainer[Channels.Average];

        int samplingRate = signal.SamplingRate;

        int lowerFrequencyHz = 500;
        int upperFrequencyHz = 800;
        double lowerFrequency = (double)lowerFrequencyHz / samplingRate;
        double upperFrequency = (double)upperFrequencyHz / samplingRate;

        var tf = new NWaves.Filters.Butterworth.BandPassFilter(lowerFrequency, upperFrequency, 5).Tf;
        var filter = new NWaves.Filters.Base64.IirFilter64(tf);
        var filtered = signal.Samples.Select(s => (float)filter.Process(s));
        DiscreteSignal outSignal = new DiscreteSignal(signal.SamplingRate, filtered);

        for (int i = 0; i < 5; i++) // 1 + 5 iterations makes it very clear and sharp
        {
            filtered = outSignal.Samples.Select(s => (float)filter.Process(s));
            outSignal = new DiscreteSignal(outSignal.SamplingRate, filtered);
        }

主要的事情是:

  • 带通滤波器阶数为5
  • 6次迭代过滤使其清晰而清晰。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74144008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档