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

问题描述

我在 C# 中使用 Naudio 库。

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

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

字节数组的大小并不大。

每个大小约为 100 到 200 kb。

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

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

var repeaterbwp = new BufferedWaveProvider(imawaveFormat);
repeaterbwp.BufferLength = RepeateraudioData.Length;
repeaterbwp.AddSamples(RepeateraudioData,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[] 中有原始音频数据并希望直接播放的场景