             }
             
             //The only currently reliable notficiation of track/queue completion is
-            // this test for playbackPosition > mediaItemDuration on .paused.
+            // to test for playbackPosition > mediaItemDuration on .paused.
             if playbackPosition > mediaItemDuration {
                 DispatchQueue.main.async {
                     self.delegate?.playbackStopped(trackCompleted: true)

    }
    
    @discardableResult public func play() -> Bool {
        MusicPlayer.player.play()
        MusicPlayer.player.currentPlaybackRate = playbackRate
        
        delegate?.playbackStarted()

            return
        }
        
        // This API is apparently very sensitive to order of operation.
        // The below is the only sequence that appears to operate consistently and reliably
        // for this use case as of iOS 14.4.
        // Variations of this order have introduced significant (3-5 second) delays
        // and blocking of the main thread when invoking prepareToPlay()
        //
        // Noli Se Tangere

        MusicPlayer.player.setQueue(with: [id])
        MusicPlayer.player.currentPlaybackTime = 0.0
        MusicPlayer.player.repeatMode = .none
        MusicPlayer.player.shuffleMode = .off
        MusicPlayer.player.prepareToPlay()
    }
    
    @objc private func handleStateChange(notification: Notification) {
        //As of iOS 14.3 MPMusicPlayerControllerPlaybackStateDidChange and .playbackState are completely fucked.
        //I would prefer to use this for delegate notification but it is unreliable so delegate state notification is now tied to
        // calls to the play/pause/stop methods. I still must handle .paused here to know when
        // track/queue is complete, however.
        // Addendum:
        // A great deal of the inconsistency of state reporting appears to be related to the state(s) of .repeatMode and .shuffleMode.
        // I am now setting these explicitly in setupPlayer() and this seems to have increased the consistency of the state reporting.
        // The state rules are still completely inscrutable so I am still not going to rely upon them for delegate reporting.
        
        switch playbackState {
        case .stopped:
