如何使用AVAudioPlayerNode更新MPNowPlayingInfoCenter/MPRemoteCommandCenter播放/暂停控件?

问题描述 投票:0回答:1

我正在制作一个简单的音乐播放器应用程序,仅使用 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)
            }
        }
    }
swift avaudioengine avaudioplayernode
1个回答
0
投票

您似乎确实需要停止所有音频来影响正在播放的锁屏小部件,因此在您的情况下,这实际上意味着在您的

pause()
上调用
AVAudioEngine
。也许您可以通过预加载/缓冲来减轻重新启动延迟。

© www.soinside.com 2019 - 2024. All rights reserved.