小编Gag*_*pta的帖子

AVAudioPlayerNode lastRenderTime

我使用了多个AVAudioPlayerNodeAVAudioEngine为混合播放的音频文件.完成所有设置(引擎准备,启动,音频文件段已安排)后,我play()在每个播放器节点上调用方法开始播放.

因为遍历所有播放器节点需要花费时间,所以我拍摄了第一个节点lastRenderTime值的快照,并使用它来计算节点play(at:)方法的开始时间,以保持节点之间的播放同步:

let delay = 0.0
let startSampleTime = time.sampleTime     // time is the snapshot value    
let sampleRate = player.outputFormat(forBus: 0).sampleRate
let startTime = AVAudioTime(
        sampleTime: startSampleTime + AVAudioFramePosition(delay * sampleRate),
        atRate: sampleRate)
player.play(at: startTime)
Run Code Online (Sandbox Code Playgroud)

问题在于当前播放时间.

我使用这个计算得到值,在seekTime我们寻找玩家的情况下,我跟踪的值是哪里.它0.0开始时:

private var _currentTime: TimeInterval {
    guard player.engine != nil,
          let lastRenderTime = player.lastRenderTime,
          lastRenderTime.isSampleTimeValid,
          lastRenderTime.isHostTimeValid else {
        return seekTime
    }

    let sampleRate = player.outputFormat(forBus: 0).sampleRate
    let sampleTime = player.playerTime(forNodeTime: …
Run Code Online (Sandbox Code Playgroud)

ios avaudioengine avaudioplayernode

16
推荐指数
1
解决办法
841
查看次数

标签 统计

avaudioengine ×1

avaudioplayernode ×1

ios ×1