Играйте музыку, если не играете, но не проигрывайте, если она уже играет (Xcode, Swift4) - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть вопрос о AVFoundation и AVAudioPlayer.

. В моем проекте у меня есть вид, с которого вы начинаете, и второй момент, когда происходит действие.Когда я запускал приложение, я сказал первому представлению начать воспроизведение фоновой музыки, и оно должно продолжаться, когда пользователь находится во втором представлении.Но всякий раз, когда вы возвращаетесь к первому виду, песня начинает снова, даже если она уже играет.Таким образом, я получаю много эха.Как я могу предотвратить это?

Вот мой код, который у меня есть:

import UIKit
import AVFoundation

class StartViewController: UIViewController {
    var backgroundPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        //background music file
        let sound = Bundle.main.path(forResource: "background_music", ofType: "mp3")

        do {
            backgroundPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
        }
        catch {
            print(error)
        }

        playBackgorundMusic()
    }

    func playBackgorundMusic() {
        if backgroundPlayer.isPlaying {
            //do nothing
        } else {
            backgroundPlayer.play()
        }
    }
}

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны создать синглтон-класс для Музыкального проигрывателя, чтобы поддерживать состояние, такое как воспроизведение, пауза, остановка и т. Д.

class MusicPlayerManager{

    static let shared = MusicPlayerManager()
    var backgroundPlayer = AVAudioPlayer()

    init(){}

    func playMusic(){
        if backgroundPlayer.isPlaying {
            //do nothing
        } else {
            backgroundPlayer.play()
        }
    }

}
...