繁体   English   中英

如何使计时器准确? (Flash / ActionScript 3.0)

[英]How to make a Timer accurate? (Flash / ActionScript 3.0)

我正在使用以下方法以X次/分钟发送声音(X通过bpm确定,这是一个NumericStepper对象)

var mainTimer:Timer = new Timer(60 / (bpm.value * 1000),0);
mainTimer.addEventListener(TimerEvent.TIMER, fl_TimerHandler,false, 0, true); 
mainTimer.start();

function fl_TimerHandler(event:TimerEvent):void
     {
        metroTransform.volume = vol;
        flash.media.SoundMixer.soundTransform = metroTransform;
        metroChannel = metro.play();
        mainTimer.delay = 60 / bpm.value * 1000;
      }

根据这个http://www.metronomeonline.com/声音不好。 我有什么办法可以解决这个问题吗?

我得到的输出文件的路径: http//conatur.net/metroBig.swf

http://cookbooks.adobe.com/post_Accurate_timer-17332.html可能对您有所帮助。

问题
定时器类的2个事件之间的延迟取决于许多因素(fps,存储器,播放的影片剪辑结束即)。 设置为定时器类的属性延迟的超时仅是近似的,因此需要一种方法来提高定时器的准确性。


我提高准确性的解决方案是扩展计时器类并强制计时器根据自定义属性的准确性进行更多循环。 以这种方式,定时器的2个事件之间的延迟将被设置为延迟 - +准确/ 2。 因为事件的上升取决于许多因素,真正的2个事件之间的延迟来自:延迟 - 准确/ 2到闪存播放器的下一个触发事件。

哼声不应该是延迟值

60000 / bpm.value
// with BPM = 80 we have 60000/80 = 750

代替

60 / (bpm.value * 1000)
// with BPM = 80 we have 60/80000 = 0.00075

由于时间延迟值在文档中描述:

delay:Number - 定时器事件之间的延迟,以毫秒为单位。 建议不要延迟低于20毫秒。 定时器频率限制为每秒60帧,这意味着低于16.6毫秒的延迟会导致运行时问题。

我猜750毫秒适合优于0.00075毫秒。

虽然,当我测试你的SWF并将BPM设置为60时,它每秒都没有问题,所以我猜bpm.value不是它的样子


无论如何,当我在两个标签(或窗口)上打开你的swf和“metronomeonline”网站并将它们设置在同一个BPM时,它们听起来与我同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM