将样本数组浮动到WAV文件格式

时间:2016-06-11 00:13:11

标签: c# audio fft naudio

我正在开发一个应用声音文件过滤器的应用程序,过滤器应用于频域,因此我使用带有此代码的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格式以保存并播放。
  6. 现在问题出在最后一步,我有浮点数组样本(时域数据),如何将其转换为.wav文件并播放?

2 个答案:

答案 0 :(得分:1)

要将样本保存为.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 :(得分:0)

1-创建一个实现ISampleProvider的类 2-使用此代码播放 (当然是ISampleProvider)

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