【问题标题】:Getting mp3 file length获取 mp3 文件长度
【发布时间】:2013-09-07 07:12:13
【问题描述】:

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

我已经阅读了 BASS 文档并找到了一种方法: “所有”我需要做的就是

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

在大多数情况下,我会得到有效的歌曲长度。问题就从这里开始了。据我所知,流创建操作非常昂贵(如果我弄错了,请纠正我)并且创建流只是为了获得歌曲的长度看起来有点傻。

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

【问题讨论】:

    标签: c# mp3 duration bass


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 嗯,但是这个库做的事情和我用代码写的不同吗?
    • 应该便宜很多。
    • 小点,Media.Duration是100nS,不是纳秒,所以它的TimeSpan timeSpan = new TimeSpan(0,0,0,(int) (nanoseconds/ 10000000)); msdn.microsoft.com/en-us/library/windows/desktop/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多