silverlight - MediaElement.NaturalDuration 小于音频的实际持续时间

标签 silverlight silverlight-5.0

在某些音频文件上,MediaElement.NaturalDuration 的值小于音频的实际持续时间。当我在 Windows Media Player 中打开文件时,持续时间是正确的(当我查看文件的属性时也是如此)。虽然 NaturalDuration 属性的值不正确,但音频已完全播放,但在某些时候 Position 属性的值变得大于 NaturalDuration 属性的值,据我所知,这种情况永远不会发生。

我创建了一个简单的应用程序来重现问题:https://skydrive.live.com/redir?resid=ACF8BFD4384116CE!2908&authkey=!AG-wF6Ae-7EAYk8

应用程序中使用的音频文件的持续时间为 00:02:54,但 NaturalDuration 属性的值为 00:01:59。

有谁知道为什么以及是否有解决方法?

在此先感谢您的帮助。

最佳答案

好的,这不是答案,而是简短调查的一些结果,这些结果提供了一些线索,为什么它会出现这种行为以及这些数字来自何处(2:58 和 1:59)。先看这个贴:Calculating the length of MP3 Frames in milliseconds
我们将从那里使用两件事:

1) 帧长(以毫秒为单位)=(每帧采样数/采样率(以赫兹为单位))* 1000,以及

以秒为单位的持续时间 = 帧长度(以毫秒为单位)* 帧数/1000

2)对于不同MPEG版本的样本数量有一些标准:
每帧样本:

MPEG 版本 1

        384,    // Layer1
        1152,   // Layer2
        1152    // Layer3

MPEG 版本 2 和 2.5
        384,    // Layer1
        1152,   // Layer2
        576     // Layer3

现在让我们检查一下 winamp 中关于文件格式信息的说明:

MPEG-2.5 第 3 层

16 kbps,2482 帧

现在,如果您采用帧数 = 2482 且每帧样本数 = 576(MPEG-2.5 第 3 层),您将获得持续时间 2:58。但看起来出于某种原因,silverlight 和 iTunes 每帧使用样本 = 384,这给了我们 1:59。下一步可能是检查文件标题的实际值,如果它们正确,并且可以计算正确的持续时间 - 比你可以编写一些技巧来单独获取持续时间(例如从服务器)。但我很确定 - 该文件有一些缺陷(不一致的标题和内容),一些玩家可以处理它,而其他人则不能。

关于silverlight - MediaElement.NaturalDuration 小于音频的实际持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17470580/

相关文章:

silverlight - 如何将 3D Silverlight 5 Web 应用程序部署到第三方托管服务器?

silverlight - XAML到HTML转换器

c# - WCF ria 服务返回复杂类型列表

mvvm - 使用 DataForm 和外部保存按钮

sql-server-2008 - 如何使用aspnet_regsql.exe

c# - 获取没有反射或已知类型的程序集引用

mvvm - DataGrid 上的动态转换器参数

.net - 设计模式下的XamlParseExceptions-使设计模式无用

c# - 安装 VS 2015.1/.NET 4.6.1 后出现 Silverlight 5 SDK SLSvcUtil 错误

silverlight - Silverlight-如何基于 View 中的属性调用命令