问题描述
我在 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[]
中有原始音频数据并希望直接播放的场景