如何获得用于Midi /音频目的的精确时钟

时间:2018-07-21 21:11:19

标签: android processing midi

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

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

1 个答案:

答案 0 :(得分:2)

对于收到的任何邮件,onSend callback会给您一个时间戳。
对于您send的任何消息,您都可以提供时间戳记。

这些时间戳基于System.nanoTime(),因此您自己的代码也应使用此时间戳。

如果您的代码被延迟(由于其自身的处理,其他应用或后台服务),则System.nanoTime()将准确报告延迟。但是没有计时器能使您的代码更早运行。