WaveChannel32 дает мне исключение: смещение и длина выходят за допустимые пределы.

С библиотекой 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 байт, и эта строка вызвала исключение.

Что случилось?


person pupeno    schedule 03.01.2010    source источник


Ответы (2)


Да, это ошибка в NAudio. Спасибо, что сообщили об этом. Я проверил исправление (была проблема с WaveChannel32.GetSourceBuffer). Вы также должны знать, что вы должны установить PadWithZeroes в false на вашем WaveChannel32 перед вызовом WaveFileWriter.CreateWaveFile, иначе вы создадите бесконечный WAV-файл, медленно заполняющий ваш жесткий диск.

person Mark Heath    schedule 04.01.2010

Я получил реплику довольно легко. Это выглядит как основная ошибка в WaveChannel32.Read(), она не обрабатывает файлы .wav с несколькими каналами должным образом. Аргумент numBytes выглядит как размер файла, а не потока.

Сообщите об этом владельцу проекта. Однако вы добавите свою проблему в довольно длинный список.

person Hans Passant    schedule 03.01.2010
comment
Хорошо, готово: naudio.codeplex.com/WorkItem/View.aspx?WorkItemId= 11377 Есть идеи по обходному пути? Оба канала на самом деле одинаковы, поэтому я был бы не против выбрать только один, если это возможно. - person pupeno; 03.01.2010