我正在尝试制作一个节拍器应用程序,并且已经从BeatKeeper应用程序/ github存储库中借用了核心代码。当节拍器播放节拍时,尝试同步UI时出现问题。 BeatKeeper存储库尝试解决此问题,但解决方案不完善。我也尝试了几种方法,但没有任何效果。
我使用AudioTrack类编写音频(军鼓声)。音频是从wav文件导入的。给定每分钟的节拍,我计算应写入的小军鼓采样数,然后将其余采样填充为0(以保持静音)。因此,对于每个节拍,我先将音色样本写到AudioTrack,然后再写无声样本。编写了小军鼓示例后,我向UI线程发送了一条消息(使用处理程序),该线程更新了当前节拍的TextView。但是,两者并不同步。
有谁知道如何做到这一点?我已经反编译了一些节拍器应用程序(Mobile Metronome和Metronome Beats),它们可以完美地完成此任务。仔细研究他们的代码,我发现了AudioTrack的导入,因此我假设AudioTrack可以实现。
我创建了一个非常简单的应用程序/ github存储库来共享代码。 Metronome类是神奇的地方。我还创建了一个branch,并尝试使用AudioTrack的NotificationMarkerPosition来更新UI。使用监听器,我使用当前的头部位置,并在每次事件发生时添加新的标记,以获得永久的节拍事件。但是,这种尝试在几拍之后就开始漂移,并且也下了车。我什至尝试解决漂移问题并进行纠正,但这也不起作用。
我知道通常在问题中发布代码是很习惯的,但是回购对我来说似乎更实用。如果需要,我可以发布代码。我将不胜感激任何帮助/建议或替代方法来制作与UI同步的节拍器。
最佳答案
这个项目怎么样?
https://github.com/felixpalmer/android-visualizer
它使用Visualizer作为核心。