2

NAudioライブラリでは、WaveMixerStream32を使用してオーディオをミキシングしようとしているため、WaveChannel32を使用して適切な形式でストリームをフィードしています。次のメッセージで例外が発生しました。

オフセットと長さが配列の範囲外であるか、カウントがインデックスからソースコレクションの最後までの要素の数よりも大きい。

エラーをスローするための最小限の例では、WaveMixerStream32がまったく含まれていなかったため、WaveChannel32の使用方法に問題があるという結論に達しました。コードは次のとおりです。

var audio = new WaveFileReader(OriginalAudioFileName);
var audio32 = new WaveChannel32(new WaveFileReader(OriginalAudioFileName));
WaveFileWriter.CreateWaveFile(PublicAudioFileName + "audio.wav", audio);
WaveFileWriter.CreateWaveFile(PublicAudioFileName + "audio32.wav", audio32);

audio.wavは問題なく生成されます。audio32.wavは58バイトであり、その行は例外をスローしました。

なにが問題ですか?

4

2 に答える 2

2

はい、これは NAudio のバグです。ご報告いただきありがとうございます。修正を確認しました (WaveChannel32.GetSourceBuffer の問題でした)。また、WaveFileWriter.CreateWaveFile を呼び出す前に、WaveChannel32 で PadWithZeroes を false に設定する必要があることも知っておく必要があります。そうしないと、終わりのない WAV ファイルが作成され、ハードディスクが徐々にいっぱいになります。

于 2010-01-04T11:06:38.153 に答える
2

簡単に再現できました。これは WaveChannel32.Read() の基本的なバグのようで、複数のチャンネルを持つ .wav ファイルを適切に処理しません。numBytes 引数は、ストリームではなく、ファイルのサイズのように見えます。

プロジェクト オーナーに知らせます。ただし、問題をかなり長いリストに追加します。

于 2010-01-03T13:00:45.770 に答える