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 に答える