AVAudioPlayer fade volume out

前端 未结 13 2082
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-12 12:07

I have an AVAudioPlayer playing some audio (duh!)

The audio is initiated when the user presses a button. When they release it I want the audio to fade out.

I

13条回答
  •  悲&欢浪女
    2020-12-12 12:15

    Swift 3

    I like Ambroise Collon answer's , so i voted up but Swift is statically typed so the performSelector: methods are to fall by the wayside, maybe an alternative could be dispatch async (in this version I've added also the destination volume as parameter)

    func dispatchDelay(delay:Double, closure:@escaping ()->()) {
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay, execute: closure)
    }
    
    extension AVAudioPlayer {
        func fadeOut(vol:Float) {
            if volume > vol {
                //print("vol is : \(vol) and volume is: \(volume)")
                dispatchDelay(delay: 0.1, closure: {
                    [weak self] in
                    guard let strongSelf = self else { return }
                    strongSelf.volume -= 0.01
                    strongSelf.fadeOut(vol: vol)
                })
            } else {
                volume = vol
            }
        }
        func fadeIn(vol:Float) {
            if volume < vol {
                dispatchDelay(delay: 0.1, closure: {
                    [weak self] in
                    guard let strongSelf = self else { return }
                    strongSelf.volume += 0.01
                    strongSelf.fadeIn(vol: vol)
                })
            } else {
                volume = vol
            }
        }
    }
    

提交回复
热议问题