我目前正在尝试用C#编写音频播放器。我正在使用BASS库来处理播放音乐,但现在我对获得歌曲的长度有一点小问题。
我读过BASS doc并找到了一种方法: 我需要做的“全部”是
int stream = Bass.BASS_StreamCreateFile(filepath,....);
int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
在大多数情况下,我获得有效的歌曲长度。这里问题就出现了。据我所知,流创建操作非常昂贵(如果我弄错了,请纠正我)并创建一个流只是为了获得歌曲的长度看起来有点傻。
所以我的问题是:有没有其他方法可以在不创建蒸汽文件的情况下获得它(不是那么昂贵)。我稍后会考虑阅读id3标签。创造那条流“无论如何必须做的邪恶”,即使我试图用其他库来获取它也会做同样的事情?
答案 0 :(得分: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);