2

我正在构建一个鼓机来学习如何在 iOS 上使用 MIDI。我设法让它工作到一个点,但是,我有以下问题。当用户点击某个按钮时,我需要在 MIDI 播放器播放时向我的 MIDI 循环添加声音,不幸的是我不能简单地这样做:

MusicTrackNewMIDINoteEvent(track, 0, &message);

虽然轨道是循环的并且有一个确定的长度,所以理论上它应该在某一点回到 0。我也试过这个:

MusicTrackNewMIDINoteEvent(track, noteTimestamp, &message);

noteTimestamp我从玩家那里收到的时间戳在哪里。最后,我设法让它与这样的东西一起工作:

MusicTrackNewMIDINoteEvent(track, noteTimestamp+.5, &message);

但不用说.5延迟并不是我真正想要的鼓机,它应该尽可能地响应。

那么,如何解决这个问题呢?你怎样才能尽快将音符推到轨道上,而不会有任何延迟?

4

1 回答 1

1

您正在轨道上放置一个事件,当您放置事件时,“播放头”已经超过了它可以做任何事情的点。

所以继续做你正在做的事情(不改变时间)作为“记录”下一次循环“出现”时的事件的一种手段,但你需要手动触发一条 midi 消息——除了从轨道为:

(int) note = 60;
(int) velocuty = 127;
(int) offset = 0;
MusicDeviceMIDIEvent(_yourSamplerUnit, kMIDIMessage_NoteOn << 4 | 0, note, velocity, offset);

再次,触发手动 midi 事件将允许听众听到声音,并将事件放入轨道将允许您的轨道“录制”它以供下一次使用。

于 2013-11-04T20:16:29.413 回答