首页 > 代码库 > asp.net 获取mp3 播放时长

asp.net 获取mp3 播放时长

1 Shell32

//添加引用:COM组件的Microsoft Shell Controls And Automation
        //然后引用 using Shell32;
        //如果出现“无法嵌入互操作类型 请改用适用的接口”报错————修改引用里面的shell32属性嵌入互操作类型改为false
        public static string GetMP3FileDurationAll(string fileName)
        {
            ShellClass sh = new ShellClass();
            Folder dir = sh.NameSpace(Path.GetDirectoryName(fileName));
            FolderItem item = dir.ParseName(Path.GetFileName(fileName));
            string str = dir.GetDetailsOf(item, 27); // 获取歌曲时长。
            FileOperate.Write_Txt(DateTime.Now.ToString("yyyyMMddHHmmss") + "_GetMP3", DateTime.Now + "  \n\r" + str + "\n");
            if (str != "")
            {
                var matchs = Regex.Match(str, @"(\d{2}):(\d{2}):(\d{2})");
                var hour = Convert.ToInt32(matchs.Groups[1].Value);
                var minute = Convert.ToInt32(matchs.Groups[2].Value);
                var second = Convert.ToInt32(matchs.Groups[3].Value);

                var len = hour * 3600 + minute * 60 + second + "|" + str;
                return len;
            }
            else {
                return "";
            }
           


        }

  2.winmm.dll

[DllImport("Kernel32", CharSet = CharSet.Auto)]
        static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);
        [DllImport("winmm.dll")]
        public static extern int mciSendString(string m_strCmd, StringBuilder m_strReceive, int m_v1, int m_v2);
        public static string MusicTime(string musicFilePath)//musicFilePath是歌曲文件地址
        {
            if (File.Exists(musicFilePath))//是否存在这个文件
            {
                //利用MCI命令,返回值为文件时间
                StringBuilder shortpath = new StringBuilder(80);
                GetShortPathName(musicFilePath, shortpath, shortpath.Capacity);
                string musicname = shortpath.ToString();
                StringBuilder buf = new StringBuilder(80);
                mciSendString("close all", buf, buf.Capacity, 0);
                mciSendString("open " + musicname + " alias media", buf, buf.Capacity, 0);
                mciSendString("status media length", buf, buf.Capacity, 0);
                return buf.ToString().Trim();
                double ms = Convert.ToDouble(buf.ToString().Trim());
                TimeSpan ts = new TimeSpan(0, 0, 0, 0, (int)ms);
                return ts.ToString().Substring(3, 5);//这里你自己去决定返回的是什么格式
            }
            return "0";//如果文件不存在就返回"0"
        }

  3 ffmpeg

public static string Fromffmpeg(string fileName, string ffmpegVirtualPath)
        {
            string duration = "";
            using (System.Diagnostics.Process pro = new System.Diagnostics.Process())
            {
                pro.StartInfo.UseShellExecute = false;
                pro.StartInfo.ErrorDialog = false;
                pro.StartInfo.RedirectStandardError = true;

                pro.StartInfo.FileName = System.Web.HttpContext.Current.Server.MapPath(ffmpegVirtualPath);// AppDomain.CurrentDomain.BaseDirectory +"ffmpeg.exe";
                pro.StartInfo.Arguments = " -i " + fileName;

                pro.Start();
                System.IO.StreamReader errorreader = pro.StandardError;
                pro.WaitForExit(1000);

                string result = errorreader.ReadToEnd();
                if (!string.IsNullOrEmpty(result))
                {
                    result = result.Substring(result.IndexOf("Duration: ") +("Duration: ").Length, ("00:00:00").Length);
                    duration = result;
                    var matchs = Regex.Match(duration, @"(\d{2}):(\d{2}):(\d{2})");
                    var hour = Convert.ToInt32(matchs.Groups[1].Value);
                    var minute = Convert.ToInt32(matchs.Groups[2].Value);
                    var second = Convert.ToInt32(matchs.Groups[3].Value);

                    var len = hour * 3600 + minute * 60 + second + "|" + duration;
                    duration = len;
                }
                return duration;

            }
        }

  

 

asp.net 获取mp3 播放时长