ios - 使用 MusicTrackNewMIDINoteEvent 在播放时添加音符

标签 ios midi coremidi

我正在构建一个鼓机来学习如何在 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/

相关文章:

iphone - "This game is not recognized by game center."iPhone开发

ios - iOS 7 上计算文本高度有问题

cocoa - 自定义 NSButton 无法通过 CoreMIDI 回调函数工作

ios - iOS 中的 MIDI 合成行为不当 WRT 弯音 : LSB ignored

swift - 元组分解通配符

ios - IOS 版 Chrome 无法在 iframe 中正确打开新窗口

ios - 带有部分和带有页眉和页脚的行的可折叠表格 View

javascript - 实时 MIDI 输入到 JSON?

java - 定序器接收器时间戳始终输出-1

delphi - 如何测试存在的MIDI驱动程序