AS3を使用してサウンドをループするために使用されるAS3コードは何ですか?
これでは完璧なギャップレス再生はできませんが、サウンドがループします。
var sound:Sound = new Sound();
var soundChannel:SoundChannel;
sound.addEventListener(Event.COMPLETE, onSoundLoadComplete);
sound.load("yourmp3.mp3");
// we wait until the sound finishes loading and then play it, storing the
// soundchannel so that we can hear when it "completes".
function onSoundLoadComplete(e:Event):void{
sound.removeEventListener(Event.COMPLETE, onSoundLoadComplete);
soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
}
// this is called when the sound channel completes.
function onSoundChannelSoundComplete(e:Event):void{
e.currentTarget.removeEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
soundChannel = sound.play();
}
完璧でギャップのない再生でサウンドを何度もループさせたい場合は、
sound.play(0, 9999); // 9999 means to loop 9999 times
ただし、9999回目の再生後に無限に再生する場合は、まだサウンドコンプリートリスナーを設定する必要があります。この方法の問題は、サウンドを一時停止/再開する必要があるかどうかです。これにより、持続時間が実際のサウンドファイルの持続時間の9999倍のsoundChannelが作成され、持続時間がサウンドの長さより長いときにplay(duration)を呼び出すと、ひどいクラッシュが発生します。
var sound:Sound = whateverSoundYouNeedToPlay;
function playSound():void
{
var channel:SoundChannel = sound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
function onComplete(event:Event):void
{
SoundChannel(event.target).removeEventListener(event.type, onComplete);
playSound();
}
import flash.media.Sound;
import flash.media.SoundChannel;
var mySound:Sound = new Bgm(); //Bgm() is the class of the internal sound which can be done in the library panel.
playSound();
function playSound():void
{
var channel:SoundChannel = mySound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
function onComplete(event:Event):void
{
SoundChannel(event.target).removeEventListener(event.type, onComplete);
playSound();
}
これは完全に機能します。
@scriptocalypseのギャップレス再生を少し拡張するには:
適切なギャップレス再生ができないという問題は、ファイルの先頭または末尾のいずれかにあるファイルに関する情報(id3タグなど)を含むmp3に起因するため、ループしようとすると少し一時停止します。状況に応じてできることがいくつかあります。
play()
を実行できます(loops
パラメーターを使用する方が、SOUND_COMPLETE
イベントを待って再生するよりも優れていることがわかりました。もう一度)。音声/音楽ファイルがライブラリにある場合に備えて、これを探していると思います。
var mysound:my_sound = new my_sound();
mysound.play(0,2); // this will repeat the sound 2 times.
これは私のために働いたようです:
var nowTime:Number = (new Date()).time;
var timeElapsed:Number = nowTime - _lastTime;
_lastTime = nowTime;
_musicTimeElapsed+=timeElapsed;
if(_musicTimeElapsed >= _musicA.length - GAP_LENGTH)
{
_musicTimeElapsed = 0;
_musicA.play(0);
}
他の答えは素晴らしいですが、(何らかの理由で)コードを使用したくない場合は、サウンドをムービークリップに入れ、soundプロパティを "Stream"に設定してから、必要な数のフレームをに追加できます。完全に再生されるようにするためのムービークリップ。
もちろん、これはあまり好ましくない方法ですが、アニメーターにとっては、状況によっては望ましい場合があると確信しています(たとえば、アニメーターがループしたい口のアニメーションと同期する場合)。
私のためのこの仕事:
import flash.media.Sound;
import flash.media.SoundChannel;
var soundUrl:String ="music.mp3";
var soundChannel:SoundChannel = new SoundChannel();
var sound:Sound = new Sound();
sound.load(new URLRequest(soundUrl));
soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE,onComplete);
function onComplete(e:Event):void{
sound = new Sound();
sound.load(new URLRequest(soundUrl));
soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE,onComplete);
}