Как воспроизвести песню определенного времени в avaudionode swift - PullRequest
0 голосов
/ 04 июля 2019

Я сделал простой 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)
  }
}
...