My book on iOS interface design, Design Teardowns: Step-by-step iOS interface design walkthroughs is now available!
Fading audio in and out
For one of those times we need to apply a fade in and out transition for audio playback, the AVPlayer
API provides a possible way to do this:
let player = AVPlayer()
func playFileAtURL(url: NSURL) {
let asset = AVAsset.assetWithURL(url) as AVAsset
let duration = asset.duration
let durationInSeconds = CMTimeGetSeconds(duration)
let item = AVPlayerItem(asset: asset)
let params = AVMutableAudioMixInputParameters(track: asset.tracks.first! as AVAssetTrack)
let firstSecond = CMTimeRangeMake(CMTimeMakeWithSeconds(0, 1), CMTimeMakeWithSeconds(1, 1))
let lastSecond = CMTimeRangeMake(CMTimeMakeWithSeconds(durationInSeconds-1, 1), CMTimeMakeWithSeconds(1, 1))
params.setVolumeRampFromStartVolume(0, toEndVolume: 1, timeRange: firstSecond)
params.setVolumeRampFromStartVolume(1, toEndVolume: 0, timeRange: lastSecond)
let mix = AVMutableAudioMix()
mix.inputParameters = [params]
item.audioMix = mix
player.replaceCurrentItemWithPlayerItem(item)
player.play()
}