mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-08-31 23:57:15 +02:00
Audio player modifications should be on main queue
This commit is contained in:
@@ -299,11 +299,14 @@ class AudioPlayer: NSObject {
|
|||||||
// Start playback, with a seek, for as smooth a scrub bar start as possible
|
// Start playback, with a seek, for as smooth a scrub bar start as possible
|
||||||
let currentTrackStartOffset = session.audioTracks[self.currentTrackIndex].startOffset ?? 0.0
|
let currentTrackStartOffset = session.audioTracks[self.currentTrackIndex].startOffset ?? 0.0
|
||||||
let seekTime = currentTime - currentTrackStartOffset
|
let seekTime = currentTime - currentTrackStartOffset
|
||||||
|
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.seek(to: CMTime(seconds: seekTime, preferredTimescale: 1000), toleranceBefore: .zero, toleranceAfter: .zero) { [weak self] completed in
|
self.audioPlayer.seek(to: CMTime(seconds: seekTime, preferredTimescale: 1000), toleranceBefore: .zero, toleranceAfter: .zero) { [weak self] completed in
|
||||||
guard completed else { return }
|
guard completed else { return }
|
||||||
self?.resumePlayback()
|
self?.resumePlayback()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func calculateSeekBackTimeAtCurrentTime(_ currentTime: Double, lastPlayed: Double) -> Double {
|
private func calculateSeekBackTimeAtCurrentTime(_ currentTime: Double, lastPlayed: Double) -> Double {
|
||||||
let difference = Date.timeIntervalSinceReferenceDate - lastPlayed
|
let difference = Date.timeIntervalSinceReferenceDate - lastPlayed
|
||||||
@@ -337,8 +340,10 @@ class AudioPlayer: NSObject {
|
|||||||
self.stopPausedTimer()
|
self.stopPausedTimer()
|
||||||
|
|
||||||
self.markAudioSessionAs(active: true)
|
self.markAudioSessionAs(active: true)
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.play()
|
self.audioPlayer.play()
|
||||||
self.audioPlayer.rate = self.tmpRate
|
self.audioPlayer.rate = self.tmpRate
|
||||||
|
}
|
||||||
self.status = 1
|
self.status = 1
|
||||||
|
|
||||||
// Update the progress
|
// Update the progress
|
||||||
@@ -349,7 +354,9 @@ class AudioPlayer: NSObject {
|
|||||||
guard self.isInitialized() else { return }
|
guard self.isInitialized() else { return }
|
||||||
|
|
||||||
NSLog("PAUSE: Pausing playback")
|
NSLog("PAUSE: Pausing playback")
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.pause()
|
self.audioPlayer.pause()
|
||||||
|
}
|
||||||
self.markAudioSessionAs(active: false)
|
self.markAudioSessionAs(active: false)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
@@ -394,10 +401,12 @@ class AudioPlayer: NSObject {
|
|||||||
self.status = -1
|
self.status = -1
|
||||||
let playerItems = self.allPlayerItems[indexOfSeek..<self.allPlayerItems.count]
|
let playerItems = self.allPlayerItems[indexOfSeek..<self.allPlayerItems.count]
|
||||||
|
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.removeAllItems()
|
self.audioPlayer.removeAllItems()
|
||||||
for item in Array(playerItems) {
|
for item in Array(playerItems) {
|
||||||
self.audioPlayer.insert(item, after:self.audioPlayer.items().last)
|
self.audioPlayer.insert(item, after:self.audioPlayer.items().last)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setupQueueItemStatusObserver()
|
setupQueueItemStatusObserver()
|
||||||
} else {
|
} else {
|
||||||
@@ -405,6 +414,7 @@ class AudioPlayer: NSObject {
|
|||||||
let currentTrackStartOffset = playbackSession.audioTracks[self.currentTrackIndex].startOffset ?? 0.0
|
let currentTrackStartOffset = playbackSession.audioTracks[self.currentTrackIndex].startOffset ?? 0.0
|
||||||
let seekTime = to - currentTrackStartOffset
|
let seekTime = to - currentTrackStartOffset
|
||||||
|
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.seek(to: CMTime(seconds: seekTime, preferredTimescale: 1000)) { [weak self] completed in
|
self.audioPlayer.seek(to: CMTime(seconds: seekTime, preferredTimescale: 1000)) { [weak self] completed in
|
||||||
guard completed else { return NSLog("SEEK: WARNING: seeking not completed (to \(seekTime)") }
|
guard completed else { return NSLog("SEEK: WARNING: seeking not completed (to \(seekTime)") }
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
@@ -417,14 +427,17 @@ class AudioPlayer: NSObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func setPlaybackRate(_ rate: Float, observed: Bool = false) {
|
public func setPlaybackRate(_ rate: Float, observed: Bool = false) {
|
||||||
let playbackSpeedChanged = rate > 0.0 && rate != self.tmpRate && !(observed && rate == 1)
|
let playbackSpeedChanged = rate > 0.0 && rate != self.tmpRate && !(observed && rate == 1)
|
||||||
|
|
||||||
if self.audioPlayer.rate != rate {
|
if self.audioPlayer.rate != rate {
|
||||||
NSLog("setPlaybakRate rate changed from \(self.audioPlayer.rate) to \(rate)")
|
NSLog("setPlaybakRate rate changed from \(self.audioPlayer.rate) to \(rate)")
|
||||||
|
DispatchQueue.runOnMainQueue {
|
||||||
self.audioPlayer.rate = rate
|
self.audioPlayer.rate = rate
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.rate = rate
|
self.rate = rate
|
||||||
self.updateNowPlaying()
|
self.updateNowPlaying()
|
||||||
|
|||||||
Reference in New Issue
Block a user