Я только что нашел NAudio на днях, и я играл с ним. Я написал простую программу для создания форм Windows, в которой есть кнопка загрузки (загружает определенную WAV-песню) и кнопки для воспроизведения, паузы, остановки, постепенного исчезновения звука (моя собственная добавленная функциональность с использованием таймеров и постепенно увеличивающейся громкости), и затухание звука. У меня также есть трекбар для управления громкостью. Я создал класс-обертку для добавления всего материала NAudio, а также для добавления дополнительных функций, таких как постепенное появление / исчезновение и уведомления о событиях, когда звук запускается или приостанавливается.
Хорошо, все сказали, что работает нормально. Программа корректно загружает, воспроизводит, ставит на паузу, останавливается и исчезает и появляется Трекбар громкости правильно отражает уровень громкости воспроизводимой песни. Это работает, но у меня есть две проблемы.
Сначала, после того, как я нажимаю кнопку «Загрузить», чтобы загрузить звук, а затем делаю все, что хочу (или нет), при выходе из программы я получаю следующее всплывающее сообщение об ошибке («Ошибка подтверждения») : «AcmStreamHeader dispose не был вызван в AcmStreamHeader.Finalize ()». Это одно из тех всплывающих окон «Прервать, Повторить, Игнорировать», но через несколько секунд оно исчезает и проект завершается. (Примечание. Функция загрузки создает DirectSoundOut и вызывает CreateInputStream ..., взятый непосредственно из примеров NAudio на сайте. Он также устанавливает обработчики событий для определенных событий, но это, вероятно, не имеет значения.)
В деструкторе класса я делаю следующие вызовы:
mainOutputStream.Close();
mainOutputStream.Dispose();
waveOutDevice.Dispose();
Но я все еще получаю ошибку. Это большой вопрос, и я задам другой вопрос в другой ветке. Есть идеи, почему это происходит и как я могу это остановить?
Я использую VS 10 на 32-битной Windows 7.