为什么 wav 文件大小超过 4gb?

Why is the wav file size exceeding 4gb?

我正在使用 C# 中的 Naudio 库。

我有两个pcm数据(字节数组),我想混合

对于pcm数据,采样率为16000hz, 通道是单声道, bitpersample 为 8.

字节数组的大小并没有那么大。

它们每个的大小约为 100 到 200 kb。

在下面的代码中,mainAudioData 和 RepeaterAudioData 是字节数组。

var imawaveFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, 16000, 1, 16000, 256, 8);
var mainbwp = new BufferedWaveProvider(imawaveFormat);
mainbwp.BufferLength = mainAudioData.Length;
mainbwp.AddSamples(mainAudioData, 0, mainAudioData.Length);

var repeaterbwp = new BufferedWaveProvider(imawaveFormat);
repeaterbwp.BufferLength = RepeaterAudioData.Length;
repeaterbwp.AddSamples(RepeaterAudioData, 0, RepeaterAudioData.Length);


var mixer = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(16000,1));
mixer.AddMixerInput(mainbwp.ToSampleProvider());
mixer.AddMixerInput(repeaterbwp.ToSampleProvider());
WaveFileWriter.CreateWaveFile16("D:\mixed.wav", mixer);

但是,在'WaveFileWriter.CreateWaveFile16("D:\mixed.wav", mixer);'中创建文件时,文件大小超过4gb,出现'wav file too long'的异常。

为什么会创建超过 4 GB 的文件?

这是因为 BufferedWaveProvider 会产生一个永无止境的音频流(这就是它的设计目的)。 RawSourceWaveStream 更适合您在 byte[] 中有原始音频数据并想直接播放的场景