【发布时间】:2015-11-12 02:32:04
【问题描述】:
question 的答案表明,我们可以使用AudioTrack 在 Android 上制作可靠且精确的节拍器。我们也可以使用MediaPlayer、SoundPool、Thread 和Timer,但它们总是会导致延迟。除了使用AudioTrack 生成合成声音,我们如何使用自定义音频文件来实现相同的效果?
【问题讨论】:
question 的答案表明,我们可以使用AudioTrack 在 Android 上制作可靠且精确的节拍器。我们也可以使用MediaPlayer、SoundPool、Thread 和Timer,但它们总是会导致延迟。除了使用AudioTrack 生成合成声音,我们如何使用自定义音频文件来实现相同的效果?
【问题讨论】:
您可以尝试使用System.nanoTime() 创建自己的计时器,当您需要精确时,您可以随时使用它。
public static long nanoTime()返回当前最值 精确的可用系统计时器,以纳秒为单位。这种方法只能 用于测量经过的时间,与任何其他概念无关 系统或挂钟时间。返回的值代表 纳秒,因为一些固定但任意的时间(也许在 未来,所以值可能是负数)。该方法提供纳秒 精度,但不一定是纳秒精度。没有任何保证 关于值变化的频率。连续的差异 跨越大约 292 年(263 纳秒)的调用 由于数值溢出,将无法准确计算经过的时间。
例如,测量一些代码执行需要多长时间:
long startTime = System.nanoTime(); // ... 代码是 测量...长估计时间 = System.nanoTime() - startTime;
返回: 系统定时器的当前值,以纳秒为单位。自从: 1.5
来源:
Oracle 文档https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()
【讨论】: