AS3代码用于使用AS3循环声音?
答案 0 :(得分:27)
这不会给你完美无间隙的播放,但它会导致声音循环播放。
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次播放后想要无限播放,仍然需要设置一个声音完整的监听器。这种做事方式的问题是你必须暂停/重启声音。这将创建一个soundChannel,其持续时间比实际声音文件的持续时间长9999倍,并且当持续时间长于声音长度导致可怕的崩溃时调用播放(持续时间)。
答案 1 :(得分:10)
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();
}
答案 2 :(得分:4)
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();
}
这很有效。
答案 3 :(得分:3)
稍微扩展@ scriptocalypse的无间隙播放:
没有正确无间隙播放的问题来自mp3,包括文件头部或尾部的文件信息(id3标签等),因此当你尝试循环播放时会出现小暂停。根据您的具体情况,您可以做一些事情。
play()
传递你想要的无间隙回放循环(我发现使用loops
参数比等待SOUND_COMPLETE
事件更好再玩一次)。答案 4 :(得分:2)
我想这就是你在寻找语音/音乐文件在库中的内容:
var mysound:my_sound = new my_sound();
mysound.play(0,2); // this will repeat the sound 2 times.
答案 5 :(得分:1)
这似乎对我有用:
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);
}
答案 6 :(得分:0)
其他答案很棒,但是如果您不想使用代码(无论出于何种原因),您可以将声音放入movieclip,将声音属性设置为“Stream”,然后添加尽可能多的帧喜欢影片剪辑,以确保它充分发挥。
当然,这是一种不太优选的方式,但对于动画师来说,我确信它在某些情况下可能更为可取(例如,当与动画师想要循环的口部动画同步时)。
答案 7 :(得分:0)
这对我有用:
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);
}