将样本浮点数组转换为 WAV 文件格式

Float array of samples to WAV file format

我正在开发一个在声音文件上应用过滤器的应用程序,过滤器应用于频域,所以我使用 NAudio 库从 .wav 文件中获取样本,代码如下:

audio = new AudioFileReader(wav_file);
samples = new float[wave.Length];
audio.Read(samples, 0, samples.Length);

应用前面的代码后,现在我将样本作为浮点数组,然后对样本应用短时傅里叶变换以获得频域数据,然后在频域上应用滤波器数据。
然后对频域数据应用逆短时傅里叶变换,将其转换回时域,时域应该类似于初始样本,但应用了滤波器。
再次执行步骤:

  1. 从wav文件中获取样本(时域数据)数组。
  2. 对样本应用短时傅立叶变换以获得频域数据。
  3. 对频域数据应用过滤器。
  4. 对频域数据应用逆短时傅里叶变换得到样本(时域数据)。
  5. 再次将样本转换回 wav 格式以保存和播放。

现在问题出在最后一步,我有样本的浮点数组(时域数据),如何将其转换为.wav文件并播放?

要将示例保存为 .wav 文件,使用以下代码:

WaveFormat waveFormat = new WaveFormat(sampleRate, bitDepth, channels);
using (WaveFileWriter writer = new WaveFileWriter("C:\track1.wav", waveFormat))
{
    writer.WriteSamples(floatOutput, 0, floatOutput.Length);
}

sampleRatebitDepthchannels 从输入文件中提取如下:

sampleRate = wave.WaveFormat.SampleRate;
bitDepth = wave.WaveFormat.BitsPerSample;
channels = wave.WaveFormat.Channels;

1- 创建一个实现 ISampleProvider 的 class 2- 使用此代码播放 (来源是 ISampleProvider)

         var xs = new NAudio.Wave.SampleProviders.SampleToWaveProvider16(source);
                var l = new NAudio.Wave.WaveOut();
                l.Init(xs);
                l.Play();