有没有办法在 Swift 中使用 rate 属性来倒带音乐? [复制]

Posted

技术标签:

【中文标题】有没有办法在 Swift 中使用 rate 属性来倒带音乐? [复制]【英文标题】:Is there a way to rewind music using rate property in Swift? [duplicate] 【发布时间】:2016-04-15 04:20:34 【问题描述】:

我正在通过设置 rate 值快速转发我的 AVAudioPlayer。但是我不知道如何倒带。

我正在制作一个 DJ 应用,其中音乐的播放 rate 在旋转转盘时发生变化,导致音乐快进和快退(同时仍能听到声音)。

这是我目前的转盘旋转方法。如何倒带AVAudioPlayer

 override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 

for touch in touches 
    let location = touch.locationInNode(self)
    let node = self.nodeAtPoint(location)


    //this is for the left turntable
    if node.name == "lefttt" 

        //lets user rotate left turntable when there is one finger on turntable.
        let dy = leftTurntable.position.y - location.y
        let dx = leftTurntable.position.x - location.x
        let angle2 = atan2(dy, dx)
        leftTurntable.zRotation = angle2


        let delta = (angle2 - previousAngle)
        if delta > 0 

            // Code to rewind music goes here....
            print("rotateleft")


         else 
            //This code works perfectly and fast forwards the music when spinning turntable to right
            print("rotateright")
            musicPlayer.rate = 2.0
            musicPlayer.play()
        

        previousAngle = angle2
 

【问题讨论】:

您是否尝试过将 2.0 添加到 musicPlayer.currentTime 而不是减法?也许它从剩余时间开始倒计时。 是的,我尝试添加,但它仍然快进。 【参考方案1】:

您可以通过将currentTime 设置为小于其当前值的值来回退。

我认为这不会以某种可听的方式倒带。你不会神奇地听到音乐倒转或类似的声音。 AVAudioPlayer 不这样做。但是,它会改变播放位置,这样当您再次开始播放(前锋)时,您会比原来的位置更早开始。

AVPlayer(相对于 AVAudioPlayer)可以反向播放,但前提是特定的 AVPlayerItem 允许。

【讨论】:

我告诉你的结果与你在这里得到的问题基本相同:***.com/questions/36587401/… 不要多次问同一个问题,试着听听你的答案给定的。 这个问题是关于倒带,而不是快进。这个问题不是***.com/questions/36587401/… 的重复问题。 OP 显然知道如何快进(根据包含的touchesMoved 方法) @AleksanderAzizi 这是重复的,因为他已经被告知他不能用 AVAudioPlayer 向后播放。他一直问同样的问题,因为他不接受这个事实。 我现在看到 OP 已多次发布此问题。但是,问题仍然不是重复的,应该标记为已关闭,而不是重复。

以上是关于有没有办法在 Swift 中使用 rate 属性来倒带音乐? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在swift 3中平滑对象/模型?

Swift:如何在结构范围之外修改结构属性

有没有办法使用swift将进度条分成几段? (如图所示)

Swift 中的线程安全

有没有办法在 Swift 中使用#selector 调用带参数的函数

如何在可编码结构中使用计算属性(swift)