0

我试图在 AKPlayer 的文件播放中的给定点获得回调(当前,就在结束之前)。我在 上看到了 Apple 文档addBoundaryTimeObserver(),它可以工作,但似乎无法从 AKPlayer 访问(我猜是 AVAudioPlayerNode 与 AVPlayer 的事情)。有什么建议么?我在 AVAudioPlayerNode 中看到了一些回调......也许我可以根据所需的时间和使用来确定缓冲区dataConsumed

目标是在文件播放完毕之前触发另一个事件(完成时有一个回调,但显然为时已晚)。

如果有人做过类似的事情,或者知道类似的事情(要点等),那就太好了。

4

1 回答 1

0

有一个名为AKPlaygroundLoop的 AudioKit 游乐场,它向您展示如何定期调用任意处理程序,基于CADisplayLink. 在您的处理程序中,您可以检查 AKPlayer currentTime,如果它接近尾声(比如 1 秒前),您可以触发您想要的任何事件。

这是一个粗略的大纲:

var player: AKPlayer!
var loop: AKPlaygroundLoop!

func play() {
    // ...
    playgroundLoop = AKPlaygroundLoop(frequency: 10.0, handler: myHandler)
}

func myHandler() {
    if player.currentTime >= player.duration - 1.0 {
        // trigger some event
    }
}

另请参阅此答案以获取有关如何与 AudioKit 同步事件的建议。

于 2020-12-30T17:08:40.847 回答