0

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

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

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

4

1 回答 1

2

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

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

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

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

您可以在http://wonderfl.net/c/qf4b看到 SiON 的示例,在http://tonematrix.audiotool.com/
看到 tonfall 示例

虽然我还没有在 android 上尝试过,但我认为两者都应该工作

于 2013-03-18T20:00:33.720 回答