我正在制作一个简单的音乐播放器应用程序,仅使用 AVAudioEngine 播放音频。当我暂停 AVAudioPlayerNode 时,它不会更新 MPNowPlayingInfoCenter/MPRemoteCommandCenter 的播放/暂停控件。我该如何更新?
我不想暂停整个 AVAudioEngine,然后恢复更新 MPNowPlayingInfoCenter/MPRemoteCommandCenter 播放/暂停控件,因为它会滞后于我的 UI,并且播放音频时会出现延迟。
有人对这个话题有什么想法或解决方案吗?该文档绝对是残暴的,没有人知道 AVAudioEngine 的一件事。有人吗?
func pause() {
playerNode.pause()
audioEngine.pause()
displayLink?.isPaused = true
DispatchQueue.main.async {
self.musicPlayerControlsManager.isPlaying = false
}
}
func playPlayerNode() {
if !audioEngine.attachedNodes.isEmpty && audioFile != nil {
DispatchQueue.main.async {
self.musicPlayerControlsManager.isPlaying = true
self.displayLink?.isPaused = false
}
do {
try audioEngine.start()
playerNode.play()
} catch {
print(error.localizedDescription)
}
}
}
您似乎确实需要停止所有音频来影响正在播放的锁屏小部件,因此在您的情况下,这实际上意味着在您的
pause()
上调用 AVAudioEngine
。也许您可以通过预加载/缓冲来减轻重新启动延迟。