获取mp3文件长度

3

我目前正在尝试用C#编写音频播放器。我正在使用BASS库来处理音乐播放,但现在我有一个小问题,就是得到歌曲的长度。

好吧,我已经阅读了BASS文档并找到了一种方法:我需要做的只是

int stream = Bass.BASS_StreamCreateFile(filepath,....);
int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));

在大多数情况下,我可以得到歌曲的有效长度。这里的问题开始了。据我所知,创建流操作非常昂贵(如果我错了,请纠正我),仅为了获取歌曲长度而创建一个流似乎有点愚蠢。
那么,我的问题是:是否有其他方法可以在不创建流文件的情况下获取它(不会太昂贵)。稍后我会考虑读取id3标签。创建该流是“无论如何都必须完成的邪恶行径”,即使我尝试使用其他库来获取它,它也会完全做同样的事情吗?
1个回答

4
你可以使用Microsoft.WindowsAPICodePack.Shell
using Microsoft.WindowsAPICodePack.Shell;

然后像这样编写代码:
string file = "myfile.mp3"
ShellFile so = ShellFile.FromFilePath(file);
double 100nanoseconds;
double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), out 100nanoseconds);

这里有一个代码项目也可以帮助你


这个库和我写的代码有什么不同吗? - user2184057
1
它应该会便宜得多。 - crthompson
1
小细节,Media.Duration 的单位是 100 纳秒,而不是纳秒,因此它的时间跨度应该是 TimeSpan timeSpan = new TimeSpan(0,0,0,(int) (nanoseconds/ 10000000)); https://msdn.microsoft.com/en-us/library/windows/desktop/bb787399(v=vs.85).aspx - Vman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接