0

停止するまでmp3を無限にループする関数を作成しました:

private function loopSound(a:Class, lead:Number, trail:Number) {
            var b = new a();
            var sChannel = new SoundChannel();
            var timer:Timer = new Timer(b.length - lead - trail, 1);
            sChannel = b.play(lead);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE, function r(e:TimerEvent) { loopSound(a, lead, trail); } );
            timer.start();
        }

この関数の問題は、正しくループしないことです。私の計算は正しいですが(私の見解から)、フラッシュは位置を正しく計算しません。完璧な mp3 ループを実現する方法はありますか?

  • リード=ミリ秒単位の最初のギャップ(私の場合は 27.375ms)
  • トレイル=ミリ秒単位の最後のギャップ(私の場合は 20.278ms)
4

1 に答える 1

2

Flash Player でイベントがトリガーされる方法が原因で、TimerEvent を使用してループすることは十分に正確ではありません。

シームレスな「無限」ループを再生する最も簡単な方法は次のとおりです。

  1. .wav 形式のサウンドの最初と最後の無音部分を完全にトリミングする
  2. Flash のライブラリにインポートし、ActionScript 用にエクスポートします (ファイル サイズを小さくするために mp3 として)。
  3. サウンドの新しいインスタンスを作成し、Sound.play() を使用して再生し、2 番目の引数としてループ回数を指定するだけです (非常に大きな整数を使用すると、ほとんどの目的で「無限」になります)。

興味深いかもしれないより強力なソリューションもあります: ループサウンドフラッシュ as3 の優先方法

于 2012-09-25T18:47:27.473 に答える