C#NAudio获取音频文件的持续时间/性能

时间:2016-01-05 15:44:50

标签: c# performance file audio naudio

我正在使用NAudio创建支持播放列表的音乐播放器。我按照以下方式检索每首曲目的持续时间:

return new AudioFileReader(FilePath).TotalTime;

但是在使用许多曲目时,这是一个真正的性能杀手。 15/20音频文件需要1秒钟。有没有办法优化它?我不认为我可以重复使用AudioFile阅读器对象,因为它没有为此提供任何方法,而且我也不知道还能用什么方法来获取音频文件的持续时间。

2 个答案:

答案 0 :(得分:0)

它在很大程度上取决于文件类型。可能是为了获得最快的结果,假设您不需要支持Windows XP,请尝试使用MediaFoundationReader

答案 1 :(得分:0)

您可能已经解决了这个问题,但是对于每个感兴趣的人,我都说并行化是一个选择。通常,与CPU繁忙相比,I / O过程非常缓慢。这应该利用这一点。

将重复调用每个轨道的长度计算的代码更改为以下代码:

        var playTime = new TimeSpan();
        Parallel.ForEach( [yourFileList], file => {
            [...]
            var time = new AudioFileReader(file).TotalTime;
            playTime.Add(time);
            [...]
        });

        bar();

优势:

  • 简单:不需要处于异步方法中,通常不需要太多更改

  • 将自动产生内部函数的多个任务,但要等到一切完成后再执行bar()(阻塞线程)。

缺点:

  • 适当的异常处理更加“困难”

  • 不能取消