博主喝口茶,一毛也是爱

收缩

使用ShellClass获取mp3语音时长

3491 人阅读
分类:

下载dll: 点击下载

添加引用dll Interop.Shell32.dll

/// <summary>
/// 获取语音文件大小
/// </summary>
/// <param name="fileName">语音文件</param>
/// <returns>秒</returns>
public static int GetVoiceDuration(string fileNamePath)
{
    int duration = 0;
    try
    {
        string dirName = Path.GetDirectoryName(fileNamePath);
        string SongName = Path.GetFileName(fileNamePath);
        FileInfo fInfo = new FileInfo(fileNamePath);
        ShellClass sh = new ShellClass();
        Folder dir = sh.NameSpace(dirName);
        FolderItem item = dir.ParseName(SongName);
        string VoiceDuration = Regex.Match(dir.GetDetailsOf(item, -1), "\\d:\\d{2}:\\d{2}").Value;

        string[] voiceSplit = VoiceDuration.Split(':');
        if (voiceSplit.Length > 2)
        {
              //这里获取的秒(需要获取时,分,另外处理,VoiceDuration返回结果: 00:00:12)
           duration = Convert.ToInt32(voiceSplit[2]);
        }

    }
    catch (Exception ex)
    {
        G2Log.Error("获取语音文件大小失败", ex);
    }
    return duration;
}

如果提示 System.InvalidCastException: 无法将类型为“Shell32.ShellClass”的 COM 对象强制转换为接口类型“Shell32.IShellDispatch6”。此操作失败的原因是对 IID 为“{286E6F1B-7113-4355-9562-96B7E9D64C54}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败,则需要选中刚引用的Dll文件,属性设置"嵌入式操作类型"为"false"


有些服务器无法通过ShellClass获取mp3时长,原因如下:

服务器和我们使用的系统不同,有些软件和配置默认是不安装,需要我们手动去安装,因为服务器不需要用户桌面体验,毕竟又不常操作次系统,所以服务器是不默认安装“优质windows音频视频体验”和“桌面体验”。而win7是默认安装。


解决方法(此方法来自csdn,经测试有效):

开始菜单=》管理工具=》服务器管理器=》功能=》添加功能,找到“优质windows音频视频体验”和“桌面体验”勾选即可。

11.png

12.png


和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行