2012-06-30 113 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 –

相關問題