AVAudioSequencer - 如何在播放结束时收到通知

问题描述 投票:0回答:1

我将

AVAudioSequencer
AVAudioEngine
一起使用,我只有一个问题:如何让音序器在曲目或文件到达末尾时发出通知? 我知道有一个
AVAudioPlayerNodeCompletionHandler
的东西,但是,
AVAudioSequencer
并不是源自
AVAudioPlayerNode

到目前为止,我唯一能想到的就是定期比较

currentPositionInBeats
中的
AVAudioSequencer
属性与
lengthInBeats
中的
AVMusicTrack
属性(
isPlaying
中的
AVAudioSequencer
属性在以下情况下不会变为 false):定序器超出了这个限制,)但我不喜欢轮询。

如有任何帮助,我们将不胜感激。

ios avfoundation
1个回答
0
投票

感谢您提出这个问题 - 我也遇到过这个问题,并在寻找答案时遇到了这个问题。不幸的是,我在任何地方都没有找到任何答案。

这是我解决这个问题的方法(我使用的是AudioKit的AppleSequencer,它是AVAudioSequencer之上的一层,并且有一个MIDICallbackInstrument,并且回调处理各种乐器和轨道的播放)

我向音序器添加了另一条轨道,即“控制”轨道,并在该轨道的序列末尾添加了一个特殊的 MIDI 音符(哪个并不重要,因为控制轨道会解释它)。在我的 MIDI 回调中,每次遇到这个 MIDI 音符时,我都会增加 runLoop,当它等于 LoopCount 时,我会继续并停止序列(并将 isPlaying 变量设置为 false)。然后,任何 UI 元素都可以监视此变量并适当更新自身。这对我来说效果很好。

希望这对您或遇到此问题的其他读者有所帮助!

-斯里达尔

© www.soinside.com 2019 - 2024. All rights reserved.