循环播放AKPlayer上的选定区域

时间:2018-08-17 07:25:06

标签: audiokit

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

    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为true时),也可以只播放所选区域一次(4秒)。有什么办法可以我做到的-播放某个剪辑4秒钟,然后无缝地重复该特定部分?如果是这样,我可以像在AVAudioplayer中那样分配numberOfLoop,而不是isLooping = true吗?感谢您帮助我探索。 <3

2 个答案:

答案 0 :(得分:1)

我找到了一个答案!我可以在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上不起作用..?非常感谢。

答案 1 :(得分:0)

AKPlayer中没有numberOfLoop变量。如果您想自己捕获完成事件,则不要使用缓冲或isLooping-这样,当完成时您会收到通知,并增加自己的计数器并重新启动播放器。播放器执行缓冲循环时,不会存在循环循环的内部回调。