【问题标题】:How to get a precise clock for midi/audio purpose如何为 midi/audio 获得精确的时钟
【发布时间】:2018-07-21 21:11:19
【问题描述】:

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

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

【问题讨论】:

    标签: android processing midi


    【解决方案1】:

    对于您收到的任何消息,onSend callback 会为您提供时间戳。
    对于您send 的任何消息,您可以提供时间戳。

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

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

    【讨论】:

    • 感谢帮助,我尝试了时间戳,可能还不够,但它不适用于所有设备,只有少数具有时间戳兼容性,我需要对其进行更多测试。
    • 我正在发现集成 C++ 以提高性能的可能性,是否可以将此 void 重写为 C++ 库以提高性能?
    • 是否只有 your 代码会导致延迟?无论如何,这将是一个不同的问题。
    猜你喜欢
    • 2012-11-03
    • 2012-08-26
    • 1970-01-01
    • 2020-10-19
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多