2009-03-21 4 views
5

私はActionScript 3で基本的なMP3プレーヤーを作成しています。私は、どのくらいの曲が演奏されたかを示す基本的なプログレスバーを持っています。進行は例えば0と1の間で正規化小数割合として計算される。まだロードされているSoundオブジェクトの最終的な長さを取得するには?

var progress:Number = channel.position/sound.length; 

オーディオがまだsound.lengthが間違ってバッファリング/ロードされた場合に問題があります。これにより、サウンドが完全にロードされ、sound.lengthがもう変化しなくなるまで、プログレスバーがスキップしたり、逆方向に移動したりします。

まだ読み込まれているサウンドオブジェクトの最終的な長さを判断するにはどうすればよいですか?

答えて

6

、少なくとも2つのオプションがあります。

1:0%であなたのプログレスバーのままにして、サウンドが完全にロードされるまで、それを移動しないで。つまり、既にロードされているファイルの割合に基づくパーセンテージの割合です。このような何か:

private var _sound:Sound = /* Your logic here */; 
private var _channel:SoundChannel = _sound.play(); 

_sound.addEventListener(ProgressEvent.PROGRESS, onSoundProgress); 

private function onSoundProgress(event:ProgressEvent):void { 
    var percentLoaded:Number = event.bytesLoaded/event.bytesTotal; 
    var approxProgress:Number 
     = _channel.position/_sound.length * percentLoaded; 
    // Update your progress bar based on approxProgress 
} 
+0

2番目のアイデアは素晴らしいです!私の言うことから数ミリ秒以内にはかなり正確でなければなりません。 – Soviut

2

音が正しくtaggedされている場合にも、そのID3タグを介して音の長さを見つけることができます。

関連する問題