我使用 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/