我正在开发一个在声音文件上应用滤镜的应用程序,这些滤镜在频域中应用,因此我使用NAudio库从.wav文件中获取了以下代码的示例:

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

在应用之前的代码之后,现在我将样本作为float数组,然后将短时傅立叶变换应用于获取频域数据的样本,然后将滤波器应用于频域数据。
然后将短时傅立叶逆变换应用于频域数据,以将其转换回时域,该时间域应与初始样本相似,但要应用滤波器。
再次执行以下步骤:
  • 从wav文件获取样本(时域数据)数组。
  • 对样本应用短时傅立叶变换以获得频域数据。
  • 对频域数据应用过滤器。
  • 对频域数据应用短时傅立叶逆变换以获得样本(时域数据)。
  • 再次将样本转换为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;
    

    关于c# - 将样本 float 数组转换为WAV文件格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37758735/

    10-12 12:42
    查看更多