使用 NAudio 如何将非隔行扫描 32 位浮点格式保存到文件

Posted

技术标签:

【中文标题】使用 NAudio 如何将非隔行扫描 32 位浮点格式保存到文件【英文标题】:Using NAudio how do I save Non-interlaced 32-bit float format to file 【发布时间】:2020-12-16 02:13: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 文件?

【问题讨论】:

【参考方案1】:

您将 32 位浮点音频样本放入 16 位 WAV 文件中。使用WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels) 作为WaveFormatWaveFileWriter

【讨论】:

以上是关于使用 NAudio 如何将非隔行扫描 32 位浮点格式保存到文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 NAudio 标准化 32 位 PCM Wav 中的音量

naudio 32bit ieee 浮动到 24bit

png的故事:隔行扫描算法

我应该何时以及如何在我的 simd 例程中执行浮点转换?

如何使用 NAudio 播放双数组(包括波浪)[关闭]

printf%f如何在32位浮点数上运行