ActionScript 3:如何保留准确的BPM计数器?

时间:2013-03-18 15:53:25

标签: android actionscript-3 air timer audio-processing

我希望在ActionScript 3中创建一个鼓机(作为Adobe AIR Android应用程序),它将保持用户定义的速度(BPM)。

我正在努力找到一种方法来保持项目的及时,我现在已经做到了这样,5个不同的声音以8个方格的行表示,用户可以点击每个方块来选择何时到发挥这种声音(希望这是有道理的)。

目前我正在使用Timer来保持项目及时,这是非常滞后和不一致的。

1 个答案:

答案 0 :(得分:2)

使用计时器是一个坏主意,我说它...

问题是计时器有漂移并在几毫秒后触发。 尝试一个简单的测试,你有一个每500ms执行一次的计时器,然后比较getTimer()计数。我在实验中发现计时器不断关闭,看起来它不能自我纠正。我尝试过使用自校正定时器,根据自上次运行以来的getTimer()差异来改变点火时间,但它仍然不可靠。无论何时处理器的负载加速,计时器都会关闭。

处理此问题的正确方法是使用byteArray数据作为声音源。根据采样分辨率的计算,您可以预先使用数据填充流,并且声音将按时播放,几乎可以保证。我自己还没有创造出能够做到这一点的东西。但是您可以使用几个可以帮助您解决此问题的库。

我的前两个递减的库是SiON和tonfall

你可以在这里看到一个SiON样本http://wonderfl.net/c/qf4b
以及http://tonematrix.audiotool.com/

的降价示例

虽然我没有在Android上试过它们,但我认为要么应该工作