私はメディア プレゼンテーション プログラムを作成しており、ほぼ完成していますが、何らかの理由で mp3 ファイルの長さが正しくありません。私は Microsoft.DirectX.AudioVideoPlayback.Audio クラスを使用してオーディオ ファイルを再生します。このクラスは wav ファイルに適しています。Google 検索から、可変ビット レートを使用して mp3 がエンコードされている場合に問題があるように見えることがわかりますが、メディアのビット レート設定に関係なく、プログラムが正確にレポートする必要があります。コードは次のとおりです。
Media_Audio aud = (Media_Audio)item.MediaFile;
TimeSpan total = aud.EndTime - aud.StartTime;
if (aud.EndTime.TotalSeconds == 0)
{
total = TimeSpan.FromSeconds(aud.Player.Duration)-aud.StartTime;
}
TimeSpan now = TimeSpan.FromSeconds(aud.Player.CurrentPosition) - aud.StartTime;
string nows = now.Hours.ToString() + ":" + now.Minutes.ToString() + ":" + now.Seconds.ToString();
string tots = total.Hours.ToString() + ":" + total.Minutes.ToString() + ":" + total.Seconds.ToString();
item.currentPosition.Text = nows + "/" + tots;
キーラインは次のとおりです。
total = TimeSpan.FromSeconds(aud.Player.Duration)-aud.StartTime;
aud.Player は、Microsoft.DirectX.AudioVideoPlayback.Audio のインスタンスです。
実際には 5:49 秒の長さの曲の場合、長さとして 39:13 と報告されます。Windows Explorer や VLC Player と同じ長さです。また、K-Lite Mega Codec パックをインストールしてください。そのため、干渉する可能性があります。私はこの質問を認識しています: .NET で MP3 の期間を取得するにはどうすればよいですか? しかし、私のプログラムのこの段階では、オーディオ ファイルを再生する現在の方法から新しい方法に切り替える時間がないので、DirectX のみを使用してデュレーションを決定する他のオプションはありますか? または、BASS.NET または TagLib Sharp に頼る必要がありますか? (メタデータには、VBR でエンコードされた mp3 の正確な情報も含まれていますか?)