From 67a6aec1325c076b0cea4a81f292ec5ac5d9f83f Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Tue, 23 Aug 2022 22:06:41 -0400 Subject: [PATCH] Move AudioPlayer tasks off the main queue --- ios/App/Shared/player/AudioPlayer.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ios/App/Shared/player/AudioPlayer.swift b/ios/App/Shared/player/AudioPlayer.swift index 4037e4fe..6f41a2a7 100644 --- a/ios/App/Shared/player/AudioPlayer.swift +++ b/ios/App/Shared/player/AudioPlayer.swift @@ -18,6 +18,8 @@ enum PlayMethod:Int { } class AudioPlayer: NSObject { + private let audioPlayerQueue = DispatchQueue(label: "ABSAudioPlayerQueue") + // enums and @objc are not compatible @objc dynamic var status: Int @objc dynamic var rate: Float @@ -141,7 +143,7 @@ class AudioPlayer: NSObject { // Rate will be different depending on playback speed, aim for 2 observations/sec let seconds = 0.5 * (self.rate > 0 ? self.rate : 1.0) let time = CMTime(seconds: Double(seconds), preferredTimescale: timeScale) - self.timeObserverToken = self.audioPlayer.addPeriodicTimeObserver(forInterval: time, queue: .main) { [weak self] time in + self.timeObserverToken = self.audioPlayer.addPeriodicTimeObserver(forInterval: time, queue: audioPlayerQueue) { [weak self] time in let sleepTimeStopAt = self?.sleepTimeStopAt Task { // Let the player update the current playback positions @@ -205,7 +207,7 @@ class AudioPlayer: NSObject { private func startPausedTimer() { guard self.pausedTimer == nil else { return } - DispatchQueue.main.async { + audioPlayerQueue.async { self.pausedTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in NSLog("PAUSE TIMER: Syncing from server") Task { await PlayerProgress.shared.syncFromServer() } @@ -398,7 +400,7 @@ class AudioPlayer: NSObject { var times = [NSValue]() times.append(NSValue(time: sleepTime)) - sleepTimeToken = self.audioPlayer.addBoundaryTimeObserver(forTimes: times, queue: .main) { [weak self] in + sleepTimeToken = self.audioPlayer.addBoundaryTimeObserver(forTimes: times, queue: audioPlayerQueue) { [weak self] in NSLog("SLEEP TIMER: Pausing audio") self?.pause() self?.removeSleepTimer()