如何使用NWaves(或任何其他库)将WAV音频的频率a严格/急剧地切换到频率B



我需要得到一个锋利的"切割";将WAV音频文件从频率a(500Hz(转换为频率B(800Hz(,并将其放入新文件中。

这是如何在Adobe Audition 中完成的

我尝试过使用NWaves.Filters.Butterworth.BandPassFilter,但它并没有按照我想要的方式发挥作用:带通滤波器。不够清晰

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一样清晰,并进行精确的选择、复制和粘贴?

我发现了如何做到这一点:

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次迭代过滤使其清晰清晰

最新更新