【发布时间】:2016-05-15 21:49:49
【问题描述】:
我正在尝试制作一个节拍器应用程序,我从BeatKeeper app/github repo 借用了核心代码。当节拍器播放节拍时,我在尝试同步 UI 时遇到问题。 BeatKeeper repo 试图解决这个问题,但解决方案不足。我也尝试了几种方法,但没有任何效果。
我正在使用 AudioTrack 类来编写音频(这是一种军鼓声)。音频是从 wav 文件导入的。给定每分钟的节拍,我计算应该写入的军鼓样本数,然后用 0 填充剩余的样本(表示静音)。因此,对于每个节拍,我都会向 AudioTrack 写入军鼓样本,然后是静音样本。编写小鼓样本后,我向 UI 线程发送一条消息(使用处理程序),该线程更新当前节拍的 TextView。但是,两者并不同步。
有人知道怎么做吗?我已经反编译了一些完美的节拍器应用程序(Mobile Metronome 和Metronome Beats)。通过他们的代码,我发现了 AudioTrack 的导入,所以我假设这可以通过 AudioTrack 实现。
我创建了一个非常简单的应用程序/github 存储库来共享代码。 Metronome 类是魔法发生的地方。我还创建了一个branch 并尝试使用 AudioTrack 的 NotificationMarkerPosition 来确定何时更新 UI。使用侦听器,我使用当前的头部位置并在每次事件发生时添加一个新标记以获取永久节拍事件。然而,这种尝试在几次节拍后开始漂移并且也下车了。我什至试图解释漂移并纠正它,但这也不起作用。
我知道通常习惯于在问题中发布代码,但对我来说,repo 似乎更实用。如有必要,尽管我可以发布代码。对于制作与 UI 同步的节拍器的任何帮助/建议或替代方法,我将不胜感激。
【问题讨论】:
标签: android audio audiotrack