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