gpt4 book ai didi

java - Java 中的 MIDI 节拍时钟

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:11 24 4
gpt4 key购买 nike

我正在创建鼓机,但在输出 MIDI 节拍时钟时遇到了一些问题。为简单起见,我通过调用 Thread.sleep(_time) 将内部时钟设置为运行,其中 _time 是由以下代码计算的十六分音符的时间量:

/**
* Calculates the length of a semiquaver in the sequencer
* @return the time of a semiquaver in milliseconds
*/
private void calculateTempo()
{
Log.i(DEBUG_TAG , "Calculated tempo.");

/**
* Fjärdedelsnot
*/
_quarterNote = 60000/_tempo;

/**
* Sextondel
*/
_sixteenthNote = (_quarterNote/4);


}

_tempo 是 BPM 的整数值。正如我所说,我的鼓机运行良好,但在输出节拍时钟时我遇到了问题。从属设备中的节拍时钟预计每四分音符接收 24 个脉冲,这为我们提供了每十六分音符 6 个脉冲的速率。我正在使用 timer.scheduleAtFixedRate 将消息添加到输出队列。

假设我们的节奏为 120 BPM,这为我们提供了每四分音符 60000/120 = 500 的时间,即每十六分音符 125 毫秒。每个十六分音符应该有六个脉冲,125/6 = 20.83333.. 你可以明白为什么这让我有点难受了。scheduleAtFixedRate 只需要毫秒作为参数,所以我必须制作一个精度更高的计数器,但即使我使用纳秒,一段时间后事情也会开始漂移..

我真的一直在梳理 Java MIDI api,试图找到可以帮助我解决这个问题的东西,但我似乎找不到为此设计的任何方法。如果您有任何建议,请告诉。

干杯。/M

最佳答案

根据 this link您可以使用 Java 5 提供的 Object.wait(millis, nanos) 和 Thread.sleep(millis, nanos)。如果你想安排线程,它建议使用 ScheduledThreadPoolExecutor。

我还找到了this library ,也许值得一试。

祝你好运!

关于java - Java 中的 MIDI 节拍时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com