4

一部のオーディオ ファイルでは、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 です。

その理由と、これに対する回避策があるかどうかを知っている人はいますか?

助けてくれてありがとう。

4

1 に答える 1

1

わかりました、これは答えではありませんが、なぜそのように動作するのか、それらの数字がどこから来たのかについての手がかりを与える短い調査の結果です (2:58 と 1:59)。最初にこのスレッドを見てください: Calculating the length of MP3 Frames in milliseconds そこから使用する 2 つのこと:

1) フレーム長 (ms) = (フレームあたりのサンプル数 / サンプルレート (hz)) * 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

16kbps、2482 フレーム

ここで、フレーム数 = 2482、フレームあたりのサンプル数 = 576 (MPEG-2.5 レイヤー 3) の場合、デュレーションは 2:58 になります。しかし、何らかの理由で Silverlight と iTunes がフレームあたりのサンプル数 = 384 を使用しているように見えるので、1:59 になります。次のステップは、ファイルのヘッダーの実際の値を確認し、それらが正しく、正しい期間を計算できるかどうかを確認することです-ハックを作成して個別に(サーバーなどから)期間を取得するよりも. しかし、私はかなり確信しています-そのファイルにはいくつかの欠陥(ヘッダーとコンテンツの不一致)があり、一部のプレーヤーはそれを処理できますが、他のプレーヤーは処理できません.

于 2013-07-04T16:25:35.197 に答える