2

使用 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 文件。

4

1 回答 1

2

如果你想背靠背循环,我会通过创建一个 custom 来做到这一点IWaveProvider,它在内部创建一个Mp3FileReader. 然后在该Read方法中,它传递从Mp3FileReader. 当它到达末尾(mp3FileReader.Read返回 0)时,您将 Position 设置回 0 并继续读取(您也可以在其间插入一点静默)。

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

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

于 2012-09-24T21:48:43.483 回答