2012-06-30 132 views
3

我正在使用NAudio库来编写一个简单的WinForms录音机/播放器。我的问题是我怎么知道播放完成?之后我需要关闭波浪流。Naudio,如何判断播放完成

我知道下面有上市PlaybackStopped事件:

wfr = new NAudio.Wave.WaveFileReader(this.outputFilename); 
audioOutput = new DirectSoundOut(); 
WaveChannel32 wc = new NAudio.Wave.WaveChannel32(wfr); 
audioOutput.Init(wc); 
audioOutput.PlaybackStopped += new EventHandler<StoppedEventArgs>(audioOutput_PlaybackStopped); 
audioOutput.Play(); 

但这PlaybackStopped事件似乎只能通过调用audioOutput.stop()被触发,没有人知道如何确定是否播放完毕?

我创造了这个问题,一个开源项目,你可以在这里找到:https://code.google.com/p/stack-overflow-questions/

+1

确定播放完成后没有触发'PlaybackStopped'?因为从[源](http://daisy.trac.cvsdude.com/urakawa-sdk/browser/trunk/csharp/audio/NAudio/Wave/WaveOutputs/DirectSoundOut.cs?rev=1346)那末' processSamples()'在终于触发事件... – nemesv

+0

是的,我相信。我在一个新项目中测试过。它仍然会产生同样的问题。这是一个错误吗? –

+0

如果使用WaveOut作为音频输出,则相同。 –

回答

6

PlaybackStopped事件引发时,你可以手动停止播放,或IWaveProvider您使用的返回值为0的Read方法。这里的问题是WaveChannel32在源数据流结束时不会停止返回数据,因此回放永远不会结束。应该将PadWithZeroes属性设置为false来解决此问题。

+0

谢谢Mark Heath。有用! XD –

相关问题