检测当前柱的正确方法?

the proper way to detect the current bar?

我正在开发基于 SequencerDemo 应用程序的音序器应用程序,使用 AKAppleSequencer。到目前为止一切都很好,但现在我需要添加一个新功能来突出显示当前栏。

有没有我可以用来跟踪当前正在播放的小节的委托?处理这个问题的正确方法是什么?非常感谢任何帮助。

AKAppleSequencer 有 属性 currentPositioncurrentRelativePosition,它们会在查询时告诉您位置。

您可以在每个小节的开头包含一个带有一个事件的音序器轨道,并将其发送到 AKMIDICallbackInstrument。您将拥有一个将由这些事件触发的回调函数。在这里您可以检查当前柱线并注意在 UI.

中突出显示它

根据@c_booth 的建议,我最终使用了 AKMIDICallbackInstrument。我将 midi 音符(每小节 2 拍)添加到一个单独的(专用)轨道,以跟踪传输。

我在初始化中加入了以下内容:

callbackInstr = AKMIDICallbackInstrument(
        midiInputName: "midiCallBack",
        callback: { status, noteNumber, velocity in
            let statusType = AKMIDIStatus(byte: status)?.type
            if(statusType == AKMIDIStatusType.noteOn){
                self.sequencerCallback()
            }
    })

我正在 sequencerCallback()

中跟踪 sequencer.currentPosition.musicTimeStamp

它似乎有效。