0

我正在使用 WaveFileWriter 处理以下异常。此异常间歇性发生——大多数情况下都可以正常工作。下面的代码片段:

MemoryStream s = new MemoryStream();
MemoryStream newStream = new MemoryStream();

int length = 0;
byte[] buffer = null;
int read = 0;   

MixingSampleProvider mixer2 = new MixingSampleProvider(_samples);
SampleToWaveProvider16 mixer3 = new SampleToWaveProvider16(mixer2);

length = mixer3.WaveFormat.AverageBytesPerSecond*Convert.ToInt32(position.TotalSeconds); //position is a Timespan calculated to be the total duration of the WAV files
buffer = new byte[length]; 

WaveFileWriter waveFileWriter = new WaveFileWriter(new IgnoreDisposeStream(s), mixer3.WaveFormat);

while ((read = mixer3.Read(buffer, 0, buffer.Length)) > 0)
{
    waveFileWriter.Write(buffer, 0, read);
}

waveFileWriter.Flush();
waveFileWriter.Close();
waveFileWriter.Dispose();   

s.WriteTo(newStream);

以下是异常的详细信息:

System.IndexOutOfRangeException was caught
  HResult=-2146233080
  Message=Index was outside the bounds of the array.
  Source=NAudio
  StackTrace:
       at NAudio.Wave.SampleProviders.Pcm16BitToSampleProvider.Read(Single[] buffer, Int32 offset, Int32 count)
       at NAudio.Wave.SampleProviders.OffsetSampleProvider.Read(Single[] buffer, Int32 offset, Int32 count)
       at NAudio.Wave.SampleProviders.MixingSampleProvider.Read(Single[] buffer, Int32 offset, Int32 count)
       at NAudio.Wave.SampleProviders.OffsetSampleProvider.Read(Single[] buffer, Int32 offset, Int32 count)
       at NAudio.Wave.SampleProviders.MixingSampleProvider.Read(Single[] buffer, Int32 offset, Int32 count)
       at NAudio.Wave.SampleProviders.SampleToWaveProvider16.Read(Byte[] destBuffer, Int32 offset, Int32 numBytes)
       at GamedayRadio.HalfInning.Process() in xxxxxx
  InnerException: 
4

1 回答 1

0

不确定这是否会导致您的错误,但请确保读取长度是BlockAlign您的WaveFormat. 因此,例如在读取 16 位立体声音频时,始终读取 4 字节的倍数(2 通道 x 2 字节/样本)。在某些情况下,您的缓冲区看起来可能是奇数个字节

于 2015-06-01T13:44:16.943 回答