115 lines
2.8 KiB
Swift
115 lines
2.8 KiB
Swift
//
|
|
// ViewController.swift
|
|
// SwiftAudio
|
|
//
|
|
// Created by Jørgen Henrichsen on 03/11/2018.
|
|
// Copyright (c) 2018 Jørgen Henrichsen. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import SwiftAudio
|
|
import AVFoundation
|
|
import MediaPlayer
|
|
|
|
|
|
class ViewController: UIViewController {
|
|
|
|
@IBOutlet weak var playButton: UIButton!
|
|
@IBOutlet weak var slider: UISlider!
|
|
|
|
var isScrubbing: Bool = false
|
|
let audioSession = AVAudioSession.sharedInstance()
|
|
var audioManager: AudioManager = AudioManager()
|
|
|
|
|
|
var artwork: MPMediaItemArtwork!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
audioManager.delegate = self
|
|
audioSessionInit()
|
|
activateAudioSession()
|
|
let image = #imageLiteral(resourceName: "cover")
|
|
artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: { (size) -> UIImage in
|
|
return image
|
|
})
|
|
}
|
|
|
|
@IBAction func playA(_ sender: Any) {
|
|
let item = DefaultAudioItem(audioUrl: "https://p.scdn.co/mp3-preview/4839b070015ab7d6de9fec1756e1f3096d908fba", artist: "Artist", title: "Title", albumTitle: "Album")
|
|
audioManager.load(item: item)
|
|
}
|
|
|
|
|
|
@IBAction func togglePlay(_ sender: Any) {
|
|
audioManager.togglePlaying()
|
|
}
|
|
|
|
@IBAction func startScrubbing(_ sender: UISlider) {
|
|
isScrubbing = true
|
|
}
|
|
|
|
@IBAction func scrubbing(_ sender: UISlider) {
|
|
audioManager.seek(to: Double(slider.value))
|
|
}
|
|
|
|
func update() {
|
|
slider.maximumValue = Float(audioManager.duration)
|
|
slider.setValue(Float(audioManager.currentTime), animated: true)
|
|
}
|
|
|
|
func audioSessionInit() {
|
|
do {
|
|
try audioSession.setCategory(AVAudioSessionCategoryPlayback)
|
|
try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.none)
|
|
|
|
}
|
|
catch {
|
|
}
|
|
}
|
|
|
|
func activateAudioSession() {
|
|
do{
|
|
try audioSession.setActive(true)
|
|
}
|
|
catch {
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension ViewController: AudioManagerDelegate {
|
|
|
|
func audioManager(playerDidChangeState state: AudioPlayerState) {
|
|
print("AudioPlayer state: ", state.rawValue)
|
|
self.update()
|
|
|
|
if state == .playing {
|
|
playButton.setTitle("Pause", for: .normal)
|
|
}
|
|
else {
|
|
playButton.setTitle("Play", for: .normal)
|
|
|
|
}
|
|
}
|
|
|
|
func audioManagerItemDidComplete() {
|
|
|
|
}
|
|
|
|
func audioManager(secondsElapsed seconds: Double) {
|
|
if !isScrubbing {
|
|
slider.setValue(Float(seconds), animated: false)
|
|
}
|
|
}
|
|
|
|
func audioManager(failedWithError error: Error?) {
|
|
|
|
}
|
|
|
|
func audioManager(seekTo seconds: Int, didFinish: Bool) {
|
|
isScrubbing = false
|
|
}
|
|
|
|
}
|