我做了一个函数,无限循环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.375 毫秒)
- 尾迹 = 末尾的间隙(以毫秒为单位)(在我的情况下为 20.278 毫秒)
使用 TimerEvent 循环不够准确,因为在 Flash Player 中触发事件的方式。
玩无缝"无限"循环的最简单方法是:
- 在开始和结束时将.wav格式的声音完美地修剪为静音
- 将其导入到Flash的库中并将其导出为ActionScript(作为mp3表示文件大小较小)
- 只需创建一个新的声音实例并使用 Sound.play() 播放它,并指定循环多少次作为第二个参数(对于大多数目的来说,一个非常大的整数几乎使它"无限")。
还有更强大的解决方案可能会引起人们的兴趣:循环声音闪光灯as3的首选方法