Norway


Topics

Topics

Playing is an important part of many apps. One common trick is to fade in the volume of audio playback so we don’t surprise or startle the user. This year, Apple has made this much simpler to implement using AVAudioPlayer. Let’s take a look.

First we’ll set up a standard AVAudioPlayer, and begin playing it at a volume of 0:

guard let asset = NSDataAsset(name: "alarm") else { print("Error Loading Audio."); return }

let player: AVAudioPlayer

do {
  player = try AVAudioPlayer(: asset.data)
} catch { print("Error Playing."); return }

player.volume = 0
player.numberOfLoops = -1

player.play()

At this point the audio is playing but we can’t hear it.

Before we check out the new feature, let’s review the β€œold” way we might do this.

Before 10, macOS 10.12, and tvOS 10, this audio in was, well, let’s just call it β€œverbose”:

func fadeInPlayer() {
  if player.volume <= 1 - fadeVolumeStep {
    player.volume += fadeVolumeStep
    dispatchAfterDelayHelper(: fadeVolumeStepTime) { fadeInPlayer() }
  } else {
    player.volume = 1
  }
}

fadeInPlayer()

Recursive functions, GCD delays, manually managing state. Yuck.

Thankfully, there’s now a better way.

Here’s all it takes:

player.setVolume(1, fadeDuration: 1.5)

This single line of code will fade in the audio from our initial volume of 0 up to 1 over a period of 1.5 seconds.

πŸ™Œ

!



Source link

LEAVE A REPLY

Please enter your comment!
Please enter your name here