【问题标题】:Swift: Trying to control time in AVAudioPlayerNode using UISliderSwift:尝试使用 UISlider 在 AVAudioPlayerNode 中控制时间
【发布时间】:2019-05-29 07:59:55
【问题描述】:

我正在使用附加到AVAudioEngineAVAudioPlayerNode 来播放声音。

要获取玩家的当前时间,我正在这样做:

extension AVAudioPlayerNode {
var currentTime: TimeInterval {
    get {
        if let nodeTime: AVAudioTime = self.lastRenderTime, let playerTime: AVAudioTime = self.playerTime(forNodeTime: nodeTime) {
            return Double(playerTime.sampleTime) / playerTime.sampleRate
        }
        return 0
    }
 }

}

我有一个指示音频当前时间的滑块。当用户更改滑块值时,在.ended 事件中,我必须将播放器的当前时间更改为滑块中指示的时间。 这样做:

extension AVAudioPlayerNode {

func seekTo(value: Float, audioFile: AVAudioFile, duration: Float) {
    if let nodetime = self.lastRenderTime{
        let playerTime: AVAudioTime = self.playerTime(forNodeTime: nodetime)!
        let sampleRate = self.outputFormat(forBus: 0).sampleRate
        let newsampletime = AVAudioFramePosition(Int(sampleRate * Double(value)))
        let length = duration - value
        let framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)
        self.stop()

        if framestoplay > 1000 {
            self.scheduleSegment(audioFile, startingFrame: newsampletime, frameCount: framestoplay, at: nil,completionHandler: nil)
        }
    }
    self.play()
}

但是,我的函数 seekTo 无法正常工作(我在函数之前和之后打印 currentTime,它始终显示负值 ~= -0.02)。我做错了什么,我能找到更简单的方法来更改播放器的 currentTime 吗?

【问题讨论】:

  • 您可以通过使用滑块以简单的方式使用它并定义一个计时器,如果您想处理点击和拖动,请更好地定义点击手势并使用滑块动作。
  • 感谢您的尝试@masoud,但您没有回答我的问题。你说的已经实现了。但我想要的是,改变滑块值后,如何改变播放器的当前时间。
  • 任何解决方案如何更改当前时间???
  • @ShamDass 不是,如果你发现了什么,请回答这个问题

标签: ios swift seekbar avaudioengine avaudioplayernode


【解决方案1】:

我遇到了同样的问题。显然framestoplay 始终为0,这是因为sampleRate 而发生的。在我的情况下,playerTime.sampleRate 的值始终为 0。

所以,

let framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)

必须替换为

let framestoplay = AVAudioFrameCount(Float(sampleRate) * length)

【讨论】:

  • 你能看看这个问题stackoverflow.com/q/69632925/5709159
  • @AlekseyTimoshchenko 对不起,我以前没有遇到过这样的问题。也许如果您将示例工作项目链接到您的问题,您可能会收到更多回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多