首页 > 解决方案 > 如何在 Swift 中关闭应用程序播放音频样本时运行后台计时器

问题描述

我正在制作一个鼓机应用程序,它需要按顺序播放短样本。我想在应用程序关闭的情况下继续播放序列。

我遵循了启用后台音频和数据处理功能的标准流程,但我需要一个合适的计时器,其粒度至少为秒,可以在后台触发。

关闭应用程序后我可以使用什么计时器?

这是我想继续播放的一些示例代码:

已更新解决方案

class ViewController: UIViewController {

    var player: AVAudioPlayer? = nil
    var silence: AVAudioPlayer? = nil // SOLUTION

    override func viewDidLoad() {
        super.viewDidLoad()

        let bass = Bundle.main.bundlePath + "/bd.mp3"
        let backing = Bundle.main.bundlePath + "/silence.mp3" // SOLUTION

        do {
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: []) // SOLUTION
            try AVAudioSession.sharedInstance().setActive(true) // SOLUTION

            player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: bass))
            silence = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: backing)) // SOLUTION
        } catch {
            print(error)
        }

        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(beat), userInfo: nil, repeats: true)

        silence?.numberOfLoops = -1 // Infinite // SOLUTION
        silence?.play() // SOLUTION
    }

    @objc func beat() {
        player?.play()
    }

}

标签: swiftavaudioplayer

解决方案


我找到的解决方案是循环播放无声曲目,允许计时器在后台运行。然后我的应用程序需要停止静音轨道才能正常进入后台。


推荐阅读