ios - 在 MusicSequence 中显示当前节拍位置(coreMIDI/Swift)

标签 ios swift audiotoolbox coremidi

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

相关文章:

ios - UIViewControllerAnimatedTransitioning 与 UIStatusBarAnimation

ios - 为什么我的 UITextView 中的字体会无缘无故地快速更改样式?

swift - 在scrollView中显示图像不正确

swift - Swift/Objective-C ASN1编码公钥

iphone - 使用AudioToolKit的简单音效循环

ios - 用户从位置设置返回查看 Controller 后捕获事件

ios - 一个View上有两个UITableView

ios - 具有不同 channel 数的 AudioConverterRef

ios - 使用 UIStackView 使单个 View 居中

ios - AVAudioPlayer无法播放MP3文件