我将
AVAudioSequencer
与 AVAudioEngine
一起使用,我只有一个问题:如何让音序器在曲目或文件到达末尾时发出通知?
我知道有一个 AVAudioPlayerNodeCompletionHandler
的东西,但是,AVAudioSequencer
并不是源自 AVAudioPlayerNode
。
到目前为止,我唯一能想到的就是定期比较
currentPositionInBeats
中的 AVAudioSequencer
属性与 lengthInBeats
中的 AVMusicTrack
属性(isPlaying
中的 AVAudioSequencer
属性在以下情况下不会变为 false):定序器超出了这个限制,)但我不喜欢轮询。
如有任何帮助,我们将不胜感激。
感谢您提出这个问题 - 我也遇到过这个问题,并在寻找答案时遇到了这个问题。不幸的是,我在任何地方都没有找到任何答案。
这是我解决这个问题的方法(我使用的是AudioKit的AppleSequencer,它是AVAudioSequencer之上的一层,并且有一个MIDICallbackInstrument,并且回调处理各种乐器和轨道的播放)
我向音序器添加了另一条轨道,即“控制”轨道,并在该轨道的序列末尾添加了一个特殊的 MIDI 音符(哪个并不重要,因为控制轨道会解释它)。在我的 MIDI 回调中,每次遇到这个 MIDI 音符时,我都会增加 runLoop,当它等于 LoopCount 时,我会继续并停止序列(并将 isPlaying 变量设置为 false)。然后,任何 UI 元素都可以监视此变量并适当更新自身。这对我来说效果很好。
希望这对您或遇到此问题的其他读者有所帮助!
-斯里达尔