使用NAudio再次播放相同的mp3文件

时间:2012-09-24 16:01:03

标签: .net naudio

使用NAudio一遍又一遍地播放mp3文件的推荐方法是什么?

到目前为止我做了什么:

在一个全球的地方:

Mp3Reader mp3Reader = new Mp3FileReader(url);

然后每次都要播放mp3:

WaveStream channel = new WaveChannel32( mp3Reader) ;
IWavePlayer waveout = new WaveOut();
waveout.Init(channel);
waveout.PlaybackStopped += new EventHandler(naudio_PlaybackStopped);
waveout.Play();

但它只是第一次播放。

此外它给出了这个断言:

WaveOut device was not closed

当第一个实例仍在播放时,可能会再次播放mp3文件。

1 个答案:

答案 0 :(得分:2)

如果您想要背靠背循环,我会通过创建自定义IWaveProvider来执行此操作,该内部创建Mp3FileReader。然后在Read方法中,它会传递从Mp3FileReader读取的数据。当它到达终点时(mp3FileReader.Read返回0),你将Position设置回0并继续读取(你也可以在它们之间插入一点沉默)。

另一种方法是在最新版本的NAudio(available on Nuget)中使用MixingSampleProvider,然后只要您想播放MP3文件,就可以添加AudioFileReader的实例。那么你实际上可以同时播放相同的MP3文件。您可能还想放入一个虚拟的永无止境的静音流,以确保播放永不结束,您可以随时排队新的MP3。

此外,“WaveOut设备未关闭”就是这个意思。你不能第二次打电话给Init。如果您不想使用自定义wave提供程序或混音器方法,则必须处理原始文件并创建一个新原文(例如在PlaybackStopped处理程序中)。