我正在尝试获得不受应用程序内其他进程影响的精确时钟。
我目前在一个线程内使用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 ;
}
}
}
最佳答案
对于您收到的任何消息,onSend
callback为您提供一个时间戳。
对于您send的任何消息,您都可以提供一个时间戳。
这些时间戳基于System.nanoTime()
,因此您自己的代码也应使用此时间戳。
如果您的代码被延迟(由于其自身的处理,其他应用或后台服务),System.nanoTime()
将准确报告延迟。但是没有计时器能使您的代码更早运行。
关于android - 如何获得用于Midi/音频目的的精确时钟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51460150/