WaveChannel32 выдает мне исключение:Смещение и длина были за пределами допустимых значений
-
22-09-2019 - |
Вопрос
С помощью библиотеки NAudio я пытаюсь микшировать аудио с помощью WaveMixerStream32, поэтому я использую WaveChannel32 для передачи потоков в нужном формате.У меня вышло исключение со следующим сообщением:
Смещение и длина вышли за рамки для массива или count больше количество элементов от index до конца исходной коллекции.
Минимальный пример, который я мог бы привести, который также выдавал эту ошибку, вообще не включал 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);
Аудио.wav генерируется просто отлично.audio32.wav имеет размер 58 байт, и эта строка вызвала исключение.
Что случилось?
Решение
Да, это ошибка в Наудио. Спасибо, что сообщили об этом. Я проверил исправление (была проблемой с WaveChannel32.getSourceBuffer). Вы также должны знать, что вы должны установить Padwithzeroes на False на свой WaveChannel32, прежде чем вызовать WaveFileWriter.CreateWaveFile, или вы создадите бесконечный файл WAV, медленно заполняя ваш жесткий диск.
Другие советы
Я довольно легко получил замечание.Это похоже на основную ошибку в WaveChannel32.Read(), она неправильно обрабатывает файлы .wav с несколькими каналами.Аргумент numBytes выглядит как размер файла, а не потока.
Пусть владелец проекта знает.Однако вы добавите свою проблему в довольно длинный список.