mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-08-30 07:07:22 +02:00
Move AudioPlayer tasks off the main queue
This commit is contained in:
@@ -18,6 +18,8 @@ enum PlayMethod:Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AudioPlayer: NSObject {
|
class AudioPlayer: NSObject {
|
||||||
|
private let audioPlayerQueue = DispatchQueue(label: "ABSAudioPlayerQueue")
|
||||||
|
|
||||||
// enums and @objc are not compatible
|
// enums and @objc are not compatible
|
||||||
@objc dynamic var status: Int
|
@objc dynamic var status: Int
|
||||||
@objc dynamic var rate: Float
|
@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
|
// 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 seconds = 0.5 * (self.rate > 0 ? self.rate : 1.0)
|
||||||
let time = CMTime(seconds: Double(seconds), preferredTimescale: timeScale)
|
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
|
let sleepTimeStopAt = self?.sleepTimeStopAt
|
||||||
Task {
|
Task {
|
||||||
// Let the player update the current playback positions
|
// Let the player update the current playback positions
|
||||||
@@ -205,7 +207,7 @@ class AudioPlayer: NSObject {
|
|||||||
|
|
||||||
private func startPausedTimer() {
|
private func startPausedTimer() {
|
||||||
guard self.pausedTimer == nil else { return }
|
guard self.pausedTimer == nil else { return }
|
||||||
DispatchQueue.main.async {
|
audioPlayerQueue.async {
|
||||||
self.pausedTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
|
self.pausedTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
|
||||||
NSLog("PAUSE TIMER: Syncing from server")
|
NSLog("PAUSE TIMER: Syncing from server")
|
||||||
Task { await PlayerProgress.shared.syncFromServer() }
|
Task { await PlayerProgress.shared.syncFromServer() }
|
||||||
@@ -398,7 +400,7 @@ class AudioPlayer: NSObject {
|
|||||||
var times = [NSValue]()
|
var times = [NSValue]()
|
||||||
times.append(NSValue(time: sleepTime))
|
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")
|
NSLog("SLEEP TIMER: Pausing audio")
|
||||||
self?.pause()
|
self?.pause()
|
||||||
self?.removeSleepTimer()
|
self?.removeSleepTimer()
|
||||||
|
|||||||
Reference in New Issue
Block a user