我刚刚发现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