我正在尝试创建一个节拍器应用程序,我借用了BeatKeeper app / github repo中的核心代码。当节拍器播放节拍时,我在尝试同步UI时遇到问题。 BeatKeeper repo试图解决这个问题,但解决方案不足。我也尝试了几种方法但没有任何效果。
我正在使用AudioTrack类来编写音频(这是一种小鼓声)。音频是从wav文件导入的。给定每分钟节拍,我计算应该写入的圈套样本的数量,然后用0填充剩余样本(用于静音)。因此,对于每个节拍,我都会向AudioTrack写入圈套样本,然后是静音样本。在编写了圈套示例之后,我向UI线程发送消息(使用处理程序),该线程更新当前节拍的TextView。但是,这两者并不同步。
有谁知道怎么做?我已经反编译了一些完美的节拍器应用程序(Mobile Metronome和Metronome Beats)。通过他们的代码,我找到了AudioTrack的导入,所以我假设这是可能的AudioTrack。
我已经创建了一个非常简单的bones application / github repo来共享代码。 Metronome类是神奇发生的地方。我还创建了一个branch,并尝试使用AudioTrack的NotificationMarkerPosition来更新UI。使用侦听器,我使用当前头部位置并在每次事件发生时添加新标记以获得永久性节拍事件。然而,这种尝试在几次节拍后开始漂移并且也开始下降。我甚至试图考虑漂移并纠正它,但这也不起作用。
我知道在一个问题中发布代码通常是习惯做法,但回购似乎对我来说更实用。如果有必要,我可以发布代码。我很感激任何帮助/建议或替代方案,以制作与UI同步的节拍器。