首页 > 解决方案 > 使用 NAudio 如何将非隔行 32 位浮点格式保存到文件

问题描述

在 C# 中,我试图将 PCM 数据保存到 WAV 文件中。使用 NAudio,我创建了一个 WaveFileWriter。

this.fileWriter = new WaveFileWriter(@"c:\temp\test.wav", new WaveFormat(this.audioParameters.SampleRate, this.channels));

我在浮点数组中捕获 PCM 数据包并写入样本。

var arraySize = noOfFrames * this.channels;
var buffer = new float[arraySize];
Marshal.Copy(data, buffer, 0, arraySize);
this.fileWriter?.WriteSamples(buffer, 0, buffer.Length);

输出的音频文件长度合适,但音频听起来很糟糕。我可以说它是相同的音频,但它是不正确的。

// Non-interlaced 32-bit float format
// ChannelLayout = LayoutStereo
// FramesPerBuffer = 1024
// SampleRate = 44100
// channels = 2

在 NAudio 中,如何使用上述信息从 PCM 流创建 WAV 文件?

标签: c#wavnaudio

解决方案


您将 32 位浮点音频样本放入 16 位 WAV 文件中。用于WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels)的。WaveFormat_WaveFileWriter


推荐阅读