Я сделал простой mp3-плеер, который имеет функцию воспроизведения, паузы и остановки определенной песни.Под песней, воспроизводимой в фоновом режиме, подразумевается, когда я меняю экран проигрывателя на другую песню, воспроизводимую непрерывно, но как непрерывно воспроизводить песню в текущее время.но на самом деле он начинается снова с начальной точки.
Код:
import UIKit
import AVFoundation
import CoreMotion
import MediaPlayer
import Foundation
class ViewController: UIViewController {
var audioEngine = AVAudioEngine()
var playerNode = AVAudioPlayerNode()
let timeShift = AVAudioUnitTimePitch()
override func viewDidLoad() {
super.viewDidLoad()
audioEngine.inputNode.reset()
if playerNode.engine == nil {
audioEngine.attach(playerNode)
audioEngine.attach(timeShift)
}
audioEngine.connect(playerNode, to: timeShift, format: nil)
audioEngine.connect(timeShift, to: audioEngine.mainMixerNode, format: nil)
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
print("Could not start audio engine")
}
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay, .defaultToSpeaker])
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
let urlMain = Bundle.main.url(forResource: "Demo", withExtension: "mp3")!
let audioAsset = AVURLAsset(url: urlMain, options: nil)
let audioDuration = audioAsset.duration
let audioDurationSeconds = CMTimeGetSeconds(audioDuration)
print(audioDurationSeconds)
do {
let audioFile = try AVAudioFile(forReading: urlMain)
playerNode.scheduleFile(audioFile, at: nil, completionHandler: nil)
playerNode.play()
}catch{
print("No value")
return
}
}
@IBAction func pushToSecondVC(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
}