iOS如何使用CoreMidi从主机接收MIDI速度(BPM)?

use*_*202 2 midi temp tempo ios coremidi

我想知道如何使用CoreMidi从我的计算机上运行的主机(简单的Ableton Live或Logic Pro)接收MIDI速度(bpm)?

MIDI标准是否支持此功能?如果是,那么请告诉我Objective C代码示例.我正在使用petegoodliffe-PGMidi发送MIDI.但在这种情况下,我想从主机接收节奏.

谢谢.

Bra*_*rad 12

信不信由你,没有一些MIDI消息说"当前速度是120BPM".这种消息无论如何都不会非常有用,因为在大多数情况下,了解当前速度的原因是同步设备,是吗?你要做的是根据MIDI时钟信息的时间计算当前的速度.

MIDI时钟同步消息是由单个字节(或二进制)组成的系统实时消息.它们每四分音符从MIDI时钟源发送24次.0xFA1111 1000

如果你的BPM是120,那么每分钟你会看到2,880条消息,或者每秒48条消息.这意味着每个时钟消息将相隔20.8333毫秒.

1000 / ((BPM * 24) / 60) = MS_BETWEEN_MESSAGES

要从MIDI时钟计算BPM,您需要知道每个时钟消息之间的时间.一旦你知道了,这个公式也会倒退.假设我们知道我们的消息相差大约17.86毫秒:

(1000 / 17.86 / 24) * 60 = 139.978 BPM

现在,这里有一个很大的问题,实际上,你不会知道这些消息之间的确切时间.您将关闭的金额因系统而异,程序与程序不同,但会关闭.即使在完美的世界中,也有时间通过​​线路发送一个字节.我过去所做的是获取最后几条消息的平均时间.这导致更稳定的BPM测量,但并非没有结果.当BPM快速变化时,我们对它的测量将落后.你如何处理这取决于你的需求.

您现在要做的就是配置Ableton Live发送MIDI时钟信息.要执行此操作,请转到"首选项","MIDI",然后为所需的MIDI接口启用"同步".

  • 谢谢@Brad,像往常一样,这个答案涵盖了所有相关主题。 (2认同)