短いサンプルを順番に再生する必要があるドラムマシンアプリを作成しています。アプリを閉じたままシーケンス再生を続けたいと思います。
バックグラウンドオーディオおよびデータ処理機能を有効にするための標準プロセスに従いましたが、バックグラウンドでトリガーされる少なくとも2番目の粒度の適切なタイマーが必要です。
アプリを閉じた状態でどのタイマーを使用できますか?
これが私がプレイし続けたいいくつかのサンプルコードです:
ソリューションで更新
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()
}
}
私が見つけた解決策は、ループでサイレントトラックを再生することです。これにより、タイマーをバックグラウンドで実行できます。次に、アプリはサイレントトラックを停止して、通常どおりバックグラウンドに入る必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加