我正在尝试获得不受应用程序内其他进程影响的精确时钟。
我目前在一个线程内使用System.nanoTime()如下。 我用来计算每个十六步的时间。
当前定时操作有时会延迟一段时间,我会尝试解决。
我想知道是否有一种更精确的方法来获得定时操作,可能是通过检查内部声卡时钟并使用它来生成我需要的定时。
我需要它来将MIDI笔记从android设备发送到外部音频合成器,而对于音频,我需要精确的计时
有没有人可以帮助我改善这一方面?
谢谢
cellLength = (long)(0.115*1000000000L);
for ( int x = 0; x < 16; x++ ) {
noteStartTimes[x] = x*cellLength ;
}
long startTime = System.nanoTime();
index = 0;
while (isPlaying) {
if (noteStartTimes[index] < System.nanoTime() - startTime) {
index++ ;
if (index == 16) { //reset things
startTime = System.nanoTime() + cellLength;
index = 0 ;
}
}
}
答案 0 :(得分:2)
对于收到的任何邮件,onSend
callback会给您一个时间戳。
对于您send的任何消息,您都可以提供时间戳记。
这些时间戳基于System.nanoTime()
,因此您自己的代码也应使用此时间戳。
如果您的代码被延迟(由于其自身的处理,其他应用或后台服务),则System.nanoTime()
将准确报告延迟。但是没有计时器能使您的代码更早运行。