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

时间:2021-01-08 12:43:17

标签: c# naudio pcm

我在 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 的文件?

1 个答案:

答案 0 :(得分:1)

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