【问题标题】:Swift - How to get the current position of AVAudioPlayerNode while it's looping?Swift - 如何在循环时获取 AVAudioPlayerNode 的当前位置?
【发布时间】:2021-02-13 17:20:33
【问题描述】:

我有一个 AVAudioPlayerNode 循环播放歌曲的片段:

audioPlayer.scheduleBuffer(segment, at: nil, options:.loops)

我想在歌曲播放时获取歌曲的当前位置。通常,这是通过计算 = currentFrame / audioSampleRate

在哪里

var currentFrame: AVAudioFramePosition {
        
        guard let lastRenderTime = audioPlayer.lastRenderTime,
            
            let playerTime = audioPlayer.playerTime(forNodeTime: lastRenderTime) else {
                return 0
        }
        return playerTime.sampleTime
    }

但是,当循环结束并重新启动时,currentFrame 不会重新启动。但它仍然会增加,这使得 currentFrame / audioSampleRate 不正确为当前位置。

那么计算当前位置的正确方法是什么?

【问题讨论】:

    标签: ios swift avaudioplayer avaudioplayernode


    【解决方案1】:

    好的旧模数可以完成这项工作:

    public var currentTime: TimeInterval {
        guard let nodeTime = player.lastRenderTime,
            let playerTime = player.playerTime(forNodeTime: nodeTime) else {
                return 0
        }
        let time = (Double(playerTime.sampleTime) / playerTime.sampleRate)
            .truncatingRemainder(dividingBy: Double(file.length) / Double(playerTime.sampleRate))
        return time
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      相关资源
      最近更新 更多