Naudio,如何判断播放是否完成

问题描述 投票:5回答:2

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

我知道下面列出了一个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/

c# naudio
2个回答
10
投票

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


0
投票

如@Mark Heath所述,我想添加Naudio的编码示例,它将在Debug / Sound Folder文件夹中播放mp3文件,并等待直到完成为止。播放完成可以通过waveOut.PlaybackState == PlaybackState.Stopped

检查
play_string = @"SOUND/space.mp3";
var reader = new Mp3FileReader(play_string);
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader);
waveOut.Play();
while (waveOut.PlaybackState != PlaybackState.Stopped) ; // Wait untill the playing isn't finished. 
© www.soinside.com 2019 - 2024. All rights reserved.