我希望在ActionScript 3中创建一个鼓机(作为Adobe AIR Android应用程序),它将保持用户定义的速度(BPM)。
我正在努力找到一种方法来保持项目的及时,我现在已经做到了这样,5个不同的声音以8个方格的行表示,用户可以点击每个方块来选择何时到发挥这种声音(希望这是有道理的)。
目前我正在使用Timer来保持项目及时,这是非常滞后和不一致的。
答案 0 :(得分:2)
使用计时器是一个坏主意,我说它...
问题是计时器有漂移并在几毫秒后触发。
尝试一个简单的测试,你有一个每500ms执行一次的计时器,然后比较getTimer()
计数。我在实验中发现计时器不断关闭,看起来它不能自我纠正。我尝试过使用自校正定时器,根据自上次运行以来的getTimer()
差异来改变点火时间,但它仍然不可靠。无论何时处理器的负载加速,计时器都会关闭。
处理此问题的正确方法是使用byteArray数据作为声音源。根据采样分辨率的计算,您可以预先使用数据填充流,并且声音将按时播放,几乎可以保证。我自己还没有创造出能够做到这一点的东西。但是您可以使用几个可以帮助您解决此问题的库。
我的前两个递减的库是SiON和tonfall
你可以在这里看到一个SiON样本http://wonderfl.net/c/qf4b
以及http://tonematrix.audiotool.com/
虽然我没有在Android上试过它们,但我认为要么应该工作