5

ActionScript 3 で基本的な MP3 プレーヤーを作成しています。基本的なプログレス バーは、曲の再生量を示します。進行状況は、0 から 1 の間で正規化された小数のパーセンテージとして計算されます。

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

問題は、オーディオがまだロード/バッファリングされている場合、sound.length が正しくないことです。これにより、サウンドが完全にロードされ、sound.length が変更されなくなるまで、進行状況バーがスキップされ、逆方向に移動することさえあります。

まだロード中のサウンドオブジェクトの最終的な長さを決定する最良の方法は何ですか?

4

2 に答える 2

6

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

1: プログレス バーを 0% のままにして、サウンドが完全にロードされるまで動かさないでください。あれは:

sound.addEventListener(Event.COMPLETE, onSoundComplete);

private function onSoundComplete(event:Event):void {
    // Calculate progress
}

2: すでにロードされているファイルのパーセンテージに基づくおおよそのパーセンテージ。このようなもの:

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
}
于 2009-03-21T22:29:38.867 に答える
2

サウンドが適切にタグ付けされている場合、 ID3タグを介してサウンドの長さを確認することもできます。

于 2009-03-22T09:02:51.887 に答える