如何在C#中获取MP3的长度影响。它返回不正确的值(2分钟的mp3将列为1'30,3分钟的列为2'20),没有明显的模式。所以又来了:HowdoIgetthelengthofanMP3usingC#?要么我在MP3Header类上做错了:MP3Headermp3hdr=newMP3Header();boolboolIsMP3=mp3hdr.ReadMP3Information("1.mp3");如果(boolIsMP3)Response.Write(mp3hdr.intLength);很明显,这个类使用fileSize/bitRate计算时长。这只能用于恒定比特率,我假设你的MP3具有可变比特率......编辑:看看TagLibSharp,它可以给你持续时间你如何确定“错误”MP3的长度?我经常发现头信息可能是错误的:例如,有一个特定版本的LAME有这个问题。如果您在Windows资源管理器中启用文件的属性,它会显示什么?我包装了mp3解码器库并将其提供给.net开发人员。您可以在这里找到它:http://sourceforge.net/projects/mpg123net/包括将mp3文件转换为PCM和读取ID3标签的示例。我想你可以用它来读取mp3文件的持续时间。最坏的情况是您读取所有帧并计算持续时间-VBR文件。要准确确定mp3持续时间,您必须读取所有帧并根据它们的总持续时间计算持续时间。在很多情况下,人们会在mp3文件中放入各种“元数据”,因此如果您根据比特率和文件大小进行估算,您就会猜错。我会考虑使用外部应用程序来执行此操作。考虑尝试Sox并运行使用soxi(无exe)执行的程序版本并尝试解析该输出。考虑到您的选择,我认为您最好只相信那些花时间用mp3文件解决所有奇怪问题的人,除非功能是您正在做的事情的核心。祝你好运!该线程中的第二个帖子可能会对您有所帮助:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/c72033c2-c392-4e0e-9993-1f8991acb2fdUnabletoestimateVBRThelengthofthefile.其中的每个mp3帧可能具有不同的比特率,因此通过读取文件的任何部分,您无法知道文件任何其他部分的数据密度。确定VBRmp3的确切长度的唯一方法是对其进行整体解码,或者(如果你知道的话)一一读取帧的所有标头,并收集它们的解码持续时间。只有当您使用的CPU是您需要节省的宝贵资源时,才使用后一种方法。否则,解码整个文件,你就会有持续时间。您可以使用我的mpg123端口来完成这项工作:http://sourceforge.net/projects/mpg123net/更多:许多mp3文件都添加了“stuff”,作为id3标签,如果您还没有浏览所有文件,您可能会在持续时间计算中错误地使用此标签。我的解决方案C#带有sox声音处理库。以上就是C#学习教程:如何在C#中获取MP3的长度分享所有内容,如果对你有用还需要进一步了解C#学习教程,希望大家多加关注——公众号staticdoubleGetAudioDuration(stringsoxPath,stringaudioPath){doubleduration=0;varstartInfo=newProcessStartInfo(soxPath,string.Format(""{0}"-nstat",audioPath));startInfo.UseShellExecute=false;startInfo.CreateNoWindow=true;startInfo.RedirectStandardError=true;startInfo.RedirectStandardOutput=true;varprocess=Process.Start(startInfo);过程.WaitForExit();字符串str;使用(varoutputThread=process.StandardError)str=outputThread.ReadToEnd();如果(string.IsNullOrEmpty(str))使用(varoutputThread=process.StandardOutput)str=outputThread.ReadToEnd();尝试{string[]lines=str.Split(newstring[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);字符串lengthLine=行。First(line=>line.Contains("长度(秒)"));持续时间=双倍。Parse(lengthLine.Split(':')[1]);}catch(Exceptionex){}返回持续时间;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
