C# 获取mp3文件长度

C# 获取mp3文件长度,c#,mp3,duration,bass,C#,Mp3,Duration,Bass,我目前正试图用C语言编写一个音频播放器。我正在使用BASS库处理播放音乐,但现在我在获取歌曲长度方面遇到了一个小问题 我读了BASS doc,找到了一个方法: “所有”我需要做的就是 int stream = Bass.BASS_StreamCreateFile(filepath,....); int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream)); 在大多数情况下,我得到了

我目前正试图用C语言编写一个音频播放器。我正在使用BASS库处理播放音乐,但现在我在获取歌曲长度方面遇到了一个小问题

我读了BASS doc,找到了一个方法: “所有”我需要做的就是

int stream = Bass.BASS_StreamCreateFile(filepath,....);
int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
在大多数情况下,我得到了歌曲的有效长度。问题开始了。据我所知,流创建操作是相当昂贵的(如果我错了,请纠正我),创建流只是为了得到歌曲的长度看起来有点愚蠢

所以我的问题是:有没有其他方法可以在不创建steam文件的情况下获得它(不那么昂贵)。稍后我将考虑阅读id3标签。创建那个流是“无论如何都必须做的邪恶”吗?即使我尝试用其他库获取它,它也会做完全相同的事情吗

您可以使用:

然后这样编码:

string file = "myfile.mp3"
ShellFile so = ShellFile.FromFilePath(file);
double 100nanoseconds;
double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), out 100nanoseconds);

有一个

嗯,但是这个库是否做了一些与我用代码编写的库不同的事情?它应该便宜得多。小点,媒体。持续时间是100nS,而不是纳秒,所以它的TimeSpan TimeSpan=new TimeSpan(0,0,0,(int)(纳秒/10000000));
string file = "myfile.mp3"
ShellFile so = ShellFile.FromFilePath(file);
double 100nanoseconds;
double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), out 100nanoseconds);