我正在尝试获得不受应用程序内其他进程影响的精确时钟。

我目前在一个线程内使用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/

10-09 02:10