我目前正在尝试用C#编写音频播放器.我正在使用BASS库处理播放音乐,但是现在我对获取歌曲的长度有小问题.
好吧,我已经阅读了BASS文档,并找到了一种方法:
我要做的是
int stream = Bass.BASS_StreamCreateFile(filepath,....);
int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
在大多数情况下,我会得到有效的歌曲长度.问题开始了.据我所知,流创建操作相当昂贵(如果我弄错了,请纠正我),创建流只是为了获得歌曲的长度,看起来有点傻.
所以我的问题是:是否有其他方法可以在不创建Steam文件的情况下获得它(不是那么昂贵).我稍后会考虑阅读id3标签.创建该流是“无论如何都必须做的邪恶”,即使我试图与其他库一起获得它,它也会做完全相同的事情?
解决方法:
您可以使用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);
有一个code project that could help you as well