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

MusicTrackNewMIDINoteEvent(track, 0, &message);

尽管磁道是循环的并且具有确定的长度,但是从理论上讲,它应该在某一点回到0。我也尝试过这个:
MusicTrackNewMIDINoteEvent(track, noteTimestamp, &message);

其中noteTimestamp是我从播放器收到的时间戳。最终,我设法使它可以像下面这样工作:
MusicTrackNewMIDINoteEvent(track, noteTimestamp+.5, &message);

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

那么,如何解决这个问题呢?您如何尽快将音符推入轨道?

最佳答案

您要在赛道上放一个事件,而到放下事件时,“播放头”已经超出了它可以执行任何操作的地步。

因此,继续做您正在做的事情(不改变时间),作为在下次循环“到来”时“记录”事件的一种方式,但是您需要手动触发一条Midi消息-分开从轨道上为:

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

同样,触发手动Midi事件将使听众听到声音,将事件放到音轨中将使您的音轨可以在下一次“回合”中“录制”它。

关于ios - 使用MusicTrackNewMIDINoteEvent在播放时添加音符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16749606/

10-13 07:25