我剛剛發現NAudio,我一直在玩它。我已經寫了一個簡單的窗體程序,它有一個加載按鈕(加載一個特定的.wav歌曲)和按鈕來播放,暫停,停止,淡入聲音(我自己添加的功能使用定時器和逐漸增加的音量),和淡出聲音。我也有一個trackbar控件來處理音量。我創建了一個包裝類來放置所有的NAudio,並且在聲音開始或暫停時添加額外的功能,如淡入/淡出和事件通知。使用NAudio加載.wav後退出程序時出現錯誤
好吧,所有的說,這工作正常。該程序正確加載,播放,暫停,停止和淡入淡出。音量軌跡欄正確反映正在播放的歌曲的音量級別。這很有用,但我確實有兩個問題。
首先,我點擊「Load」按鈕後加載聲音,然後做一切我想要(或不)播放,當我退出程序,我得到以下彈出錯誤消息(「斷言失敗」 ):「AcmStreamHeader dispose未在AcmStreamHeader.Finalize()中調用」。這是那些「中止,重試,忽略」彈出窗口中的一個,但幾秒鐘後消失,項目終止。 (注意:加載功能會創建DirectSoundOut並調用CreateInputStream ...直接從網站上的NAudio採樣中獲取,並且還會爲所定義的事件設置事件處理程序,但這可能無關緊要。)
In類的析構函數,我做了以下調用:
mainOutputStream.Close();
mainOutputStream.Dispose();
waveOutDevice.Dispose();
但我仍然得到錯誤。這是最大的問題,我會在另一個線索中詢問另一個問題。任何想法爲什麼這是發生,我怎麼能阻止它?
我在Windows 7 32位上運行VS 10。
好的,我添加了一個dispose方法,並確保它在程序退出時被調用,並且問題消失。謝謝你的提示。 順便說一下,是否有API文檔顯示NAudio類並解釋其成員?那會很有幫助。 謝謝,馬克。 – Matthew 2011-06-16 14:13:40
還有一個問題,Mark。我使用下面的代碼來播放聲音:waveOutDevice = new WaveOut(); mainOutputStream = CreateInputStream(fileName); waveOutDevice.Play();我的問題是這樣的... waveOutDevice是否需要音頻設備的獨佔使用,或者我的班級有多個對象可以播放他們的聲音...甚至可能同時播放?我所做的只是播放聲音文件,而不是任何幻想。 – Matthew 2011-06-16 14:19:33
所有的NAudio類都有面向公衆的API的XML文檔。其他文檔和教程可以在CodePlex網站的文檔選項卡上找到。 – 2011-06-16 14:35:48