我需要一个尖锐的“削减”的WAV音频文件从频率A (500赫兹)到频率B (800赫兹),并将其放入一个新的文件。
我试过使用NWaves.Filters.Butterworth.BandPassFilter
,但它并没有按照我想要的方式实现: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一样精确地选择、复制和粘贴?
发布于 2022-10-22 13:48:48
我找到了怎么做
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);
}
主要的事情是:
https://stackoverflow.com/questions/74144008
复制相似问题