前几天我刚刚找到了NAudio,我一直在玩它。我写了一个简单的Windows窗体程序,它有一个加载按钮(加载一个特定的.wav歌曲),以及播放,暂停,停止,淡入声音的按钮(我自己使用定时器添加的功能和逐渐增加的音量),以及淡出声音。我还有一个轨迹栏控件来处理音量。我创建了一个包装类来放入所有NAudio内容,以及在声音开始或暂停时添加额外的功能,如淡入/淡出和事件通知。
好的,所有人都说,这很好。该程序正确地加载,播放,暂停,停止和淡入淡出。音量轨迹栏正确反映了正在播放的歌曲的音量级别。这很有用,但我确实有两个问题。
首先,在我点击“加载”按钮加载声音然后进行我想要(或不是)的所有播放后,当我退出程序时,我收到以下弹出错误消息(“断言失败”) :“未在AcmStreamHeader.Finalize()中调用AcmStreamHeader dispose”。这是“中止,重试,忽略”弹出窗口之一,但几秒后它就会消失,项目终止。 (注意:加载功能创建DirectSoundOut并调用CreateInputStream ...直接从站点上的NAudio样本中获取。它还为已定义的事件设置事件处理程序,但这可能无关紧要。)
在类析构函数中,我进行以下调用:
mainOutputStream.Close();
mainOutputStream.Dispose();
waveOutDevice.Dispose();
但我仍然得到错误。这是一个很大的问题,我将在另一个问题中提出另一个问题。知道为什么会这样,我怎么能阻止它呢?
我在Windows 7 32位上运行VS 10。
答案 0 :(得分:4)
错误的最可能原因(它实际上只是一个Debug.Assert - 它不会发生在NAudio的发布版本中),mainOutputStream被分配给多个WaveStream,当你更改它时,你没有处理旧的。退出应用程序时,垃圾收集器将运行,此Debug.Assert将触发。
其他几点: