2014-01-29 48 views
1

我想知道如何用NAudio有效读取本地mp3文件?
我尝试了几种方法来读取mp3并使用WaveOut进行播放,但有时速度很慢。
对于我目前的测试案例,我使用了几个文件大小在80MB到180MB之间的mp3文件。
首先我用Mp3FileReader用NAudio慢速读取mp3文件

myWaveOut.Init(new Mp3FileReader("test.mp3")); 

然后我用一个FileStream,并传递给Mp3FileReader

FileStream stream = File.OpenRead("test.mp3"); 
myWaveOut.Init(new Mp3FileReader(stream)); 

同样的问题...
此外我用这些(例如,不同的缓冲器大小/读取器)的variatons。

我检查了我的taskmanager,每次我读取一个文件,似乎读者在播放之前读取整个文件。例如。花了10-20秒来播放我的一个文件。根据我的taskmanager,这个文件在这段时间内被加载5.6到6.5 MB/s。所以在这段时间内,整个文件可能已被加载。

我做错了什么?
是否有更有效的方法来加载较大的文件并对它们进行流式处理?

回答

3

这是因为Mp3FileReader在前面创建了一个目录,允许它报告持续时间并准确地重新定位。最简单的方法是使用MediaFoundationReader来播放MP3文件,或者只是制作一个非常简单的MP3FileReader类,解析出MP3Frame并使用AcmMp3FrameDecompressor进行解码。也许NAudio的未来版本将使TOC生成可选。

+1

要添加到此 - WM ASF读卡器也被称为正在读取MP3文件:当涉及到标准产品时,还有一个选项可供选择。 –

+0

是的,它很好地工作。没有更多的等待:)谢谢 – TorbenJ