C#音频获取音频文件持续时间/性能
本文关键字:音频 性能 持续时间 文件 获取 | 更新日期: 2023-09-27 18:29:12
我正在使用NAudio创建一个支持播放列表的音乐播放器。我检索每个轨道的持续时间如下:
return new AudioFileReader(FilePath).TotalTime;
但在处理许多曲目时,这是一个真正的性能杀手。对于15/20个音频文件,大约需要1秒。有没有优化的方法?我不认为我可以重用AudioFile阅读器对象,因为它没有提供任何方法,我也不知道还能用什么来获取音频文件的持续时间。
您可能已经解决了这个问题,但对于所有感兴趣的人来说,并行化将是一个选项。通常,与CPU繁忙相比,I/O进程非常缓慢。这应该利用这一点。
将重复调用每条轨道的长度计算的代码更改为这样的代码:
var playTime = new TimeSpan();
Parallel.ForEach( [yourFileList], file => {
[...]
var time = new AudioFileReader(file).TotalTime;
playTime.Add(time);
[...]
});
bar();
优势:
简单:不需要在异步方法中,通常不需要太多更改
将自动生成内部函数的多个任务,但等待所有任务完成,直到执行bar()为止(阻塞线程)。
缺点:
正确的异常处理更"困难"
不能取消
这在很大程度上取决于文件类型。为了获得最快的结果,假设您不需要支持WindowsXP,请尝试使用MediaFoundationReader
。