我已经使用coreMIDI和AudioToolBox创建了音乐序列,现在想在UI中显示循环序列的当前节拍位置。如果循环只有四个节拍,我希望显示屏在1,2,3,4之间切换,并在顺序循环中返回1(非常类似于Logic Pro之类的程序的传输)。我制作了一个函数,使用MusicSequenceGetBeatsForSeconds()
根据自按下播放以来经过的时间量(使用CFAbsoluteTimeGetCurrent()
)来计算节拍,但这会使值线性增加(在下一个显示的节拍上显示为“5.0“)。如何读取序列的当前节拍?
最佳答案
跳过跟踪消息的结尾;你不能依靠它。
而是创建一个MusicSequenceUserCallback
。然后将一条轨道添加到包含用户事件的序列中。事件中的实际数据无关紧要。
var event = MusicEventUserData(length: 1, data: (0xAA))
let status = MusicTrackNewUserEvent(markerTrack, endBeat, &event)
然后在回调中查找此任意数据值,然后执行您想做的事情。
let d = eventData.memory
if d.data == 0xAA {
在Swift 2.2中,回调不能为闭包。因此,使其成为全局函数。
关于ios - 在MusicSequence中显示当前节拍位置(coreMIDI/Swift),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37061518/