我想知道如何用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。所以在这段时间内,整个文件都可以加载。
我做错了吗?
是否有更有效的方法来加载更大的文件并进行流式传输?
答案 0 :(得分:3)
这是因为Mp3FileReader
在前面创建了一个目录,允许它报告持续时间,并准确地重新定位。避免这种情况最简单的方法就是使用MediaFoundationReader
代替播放MP3文件,否则,只需制作一个非常简单的MP3FileReader类,解析MP3Frame并使用AcmMp3FrameDecompressor进行解码。也许未来版本的NAudio将使TOC生成成为可选项。