用NAudio慢慢读取mp3文件

时间:2014-01-29 23:09:49

标签: c# stream streaming naudio

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

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

然后我使用FileStream并将其传递给Mp3FileReader

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

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

我检查了我的任务管理员,每次读取文件时,读者似乎都会在播放之前读取整个文件。例如。播放我的一个文件需要10-20秒。据我的任务管理员说,在此期间文件加载了5.6 - 6.5 MB / s。所以在这段时间内,整个文件都可以加载。

我做错了吗? 是否有更有效的方法来加载更大的文件并进行流式传输?

1 个答案:

答案 0 :(得分:3)

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