在 AKPlayer 上循环选定区域

Looping selected region on AKPlayer

我正在尝试使用 AKPlayer 来实现我的多声道音频播放项目。我从 AKPlayer.play 学到的是,我可以通过分配 from:to: 属性来设置播放区域。但我想知道我是否可以只 repeat/loop 分配的区域。这是一个例子:

    func preparePlayer() {

    player.isLooping = true
    player.buffering = .always


    }

    func startPlayer() {

    let startTime = AVAudioTime.now() + 0.25
    player.play(from: 0, to: 4, at: startTime, hostTime: nil)

    }

在这种情况下,播放器可以永远循环播放(当 player.isLooping 为真时),也可以只播放选定区域(4 秒)一次。有没有一种方法可以做到这两点——播放某个片段 4 秒但无缝地重复该特定部分?如果是这样,我可以像在 AVAudioplayer 中那样分配 numberOfLoop,而不是 isLooping = true 吗?谢谢你帮我探索。 <3

我找到了一个答案!我可以在 preparePlayer() 函数上添加 "player.loop.start / player.loop.end",这样我就可以分配我想要重复的区域。我不必在 player.play(from: to:) 上放置参数。这里:

func preparePlayer() {

    player.isLooping = true
    player.buffering = .always
    player.loop.start = 0
    player.loop.end = 7.5

    }

func startPlayer() {    

    let startTime = AVAudioTime.now() + 0.25
    player.play(at: startTime)

    }

就是这样!看起来我必须将 player.buffering 设置为 .always 而不是 .dynamics 以便循环无缝进行。但我还是想知道如何设置重复次数。我猜 numberOfLoop 函数在 AKPlayer 上不起作用..?非常感谢。

AKPlayer中没有numberOfLoop变量。如果你想自己捕捉完成事件,那么你不使用缓冲或 isLooping - 然后你可以在完成时收到通知并增加你自己的计数器并重新启动播放器。当播放器进行缓冲循环时,没有循环循环的内部回调。