我正在尝试将动画以特定的BPM同步到音乐。我已经尝试过使用计时器,但是在处理较小的间隔(毫秒)时它并不准确。我做了一些阅读,发现了一个替代方法,该方法使用小型静音音频文件和SOUND_COMPLETE事件作为计时器。

我将这段代码用于167ms长的声音文件。

package
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;

    public class BetterTimer extends EventDispatcher
    {
        private var silentSound:Sound;

        public function BetterTimer(silentSoundUrl:String):void {
            super();
            silentSound = new Sound( new URLRequest(silentSoundUrl) );
            silentSound.addEventListener(Event.COMPLETE, start);
        }
        public function start():void {
            this.timerFired( new Event("start") );
        }
        private function timerFired(e:Event):void {
            dispatchEvent( new Event("fire") );
            var channel:SoundChannel = silentSound.play();
            channel.addEventListener(Event.SOUND_COMPLETE, timerFired, false, 0, true);
        }
    }
}

这仍然不能止步不前。 Flash Player能够准确显示声音吗?

最佳答案

这是非常棘手的正确方法!有一个名为BeatTimer的小库尝试执行此操作。我没有亲自尝试过此代码,但是如果它执行了它声称的操作,那么它应该正是您所需要的。

关于actionscript-3 - AS3中的准确BPM事件监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1858660/

10-13 01:52