MPMediaPlayback.currentPlaybackRate no longer working in iOS 15.4?

Just wondering if anyone else is having issues with currentPlaybackRate in release version of iOS 15.4? In my particular case this is using MPMusicPlayerController.applicationQueuePlayer.

I've always had issues controlling this property reliably but from what I can see it is now completely non-operational in 15.4.

I've isolated this behavior in a trivial project, and will file a radar, but hoping others may have some insight first.

FWIW- This is my trivial test case:

class ViewController: UIViewController {
    lazy var player: MPMusicPlayerApplicationController = {
        let player = MPMusicPlayerController.applicationQueuePlayer
        player.repeatMode = .none
        player.shuffleMode = .off
        player.beginGeneratingPlaybackNotifications()
        return player
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(forName: .MPMusicPlayerControllerPlaybackStateDidChange, object: nil, queue: .main) { [weak self] notification in
            guard let notificationPlayer = notification.object as? MPMusicPlayerApplicationController,
                  notificationPlayer === self?.player else {
                return
            }
            
            debugPrint("Player state now: \(notificationPlayer.playbackState)")
        }
    }

    @IBAction func goAction(_ sender: Any) {
        guard let item = MPMediaQuery.songs().items?.randomElement() else {
            debugPrint("Unable to access media items")
            return
        }

        debugPrint("Now playing item: \(item.title ?? "")")
        player.setQueue(with: [item.playbackStoreID])

        player.prepareToPlay() { error in
            guard error == nil else {
                debugPrint("Player error: \(error!.localizedDescription)")
                return
            }

            DispatchQueue.main.async { [weak self] in
                self?.player.play()
            }
        }
    }

    @IBAction func slowAction(_ sender: Any) {
        debugPrint("Setting currentPlaybackRate to 0.5")
        player.currentPlaybackRate = 0.5
        checkPlaybackRate()
    }

    @IBAction func fastAction(_ sender: Any) {
        debugPrint("Setting currentPlaybackRate to 1.5")
        player.currentPlaybackRate = 1.5
        checkPlaybackRate()
    }

    func checkPlaybackRate(afterSeconds delay: TimeInterval = 1.0) {
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
            debugPrint("After \(delay) seconds currentPlaybackRate now: \(self.player.currentPlaybackRate)")
        }
    }
}

Typical console output:

"Now playing item: I Know You Know"
"Player state now: MPMusicPlaybackState(rawValue: 2)"
"Player state now: MPMusicPlaybackState(rawValue: 1)"
"Setting currentPlaybackRate to 1.5"
"After 1.0 seconds currentPlaybackRate now: 1.0"
"Setting currentPlaybackRate to 0.5"
"After 1.0 seconds currentPlaybackRate now: 1.0"

Replies

Hello @pfvernon2,

This is essentially the same issue as the one described in this other thread: Setting playbackRate in MusicKit for Swift (beta).

We are already tracking this issue internally. If you have any additional information you'd like to share about this, now or in the future, to might be a good idea to do it directly in that other thread.

Best regards,

  • Thank you, my search did not surface that previous post. I will begin following that post for additional updates.

Add a Comment

Hi again @pfvernon2,

Actually, I take that back. I circled back with my colleagues, and they gave me more context about this change.

The feature to change the playback rate only applies to content owned by the user, such as songs purchased on the iTunes Store. If it was possible to do it in earlier releases, it was a bug, and we’ve fixed it in iOS 15.4.

Best regards,

  • Hi, JoeKun, Could you let us know why we cannot use currentPlaybackRate for Apple Music contents? Is there any agreement available? In my App, currentPlaybackRate is useful to adjust playing speed based on expected tempo. I strongly expect to be reverted this fix. Expect that 3rd party app also can use currentPlaybackRate for Apple Music contents.

  • "content owned by the user" - how do we know which songs that are? MPMediaItem doesn't have any properties that can give us that information. So how to find out that??

  • @JoeKun  "content owned by the user" - For songs that I imported from CD in iTunes before, I can't change speed of these songs. why? It's in iCloud music library and I subscribe Apple Music. The song seems to wrong recognized as a song of Apple Music. What is the "content owned by the user" ?

    And I agree blue0615, pfvernon2 and florom. Please reconsider the restriction for Apple Music. I have used this capability in my app since iOS 12. And many users use this feature.

JoeKun, thanks for further researching and acknowledging the issue. That said, I agree with blue0615 that this decision should be reconsidered. I too have a great deal of time, effort, and product design centered around this capability which to this point has never been documented to be "off limits" to 3rd party apps. I have used this capability in my app since iOS 13. To arbitrarily change this functionality without warning or consideration of 3rd party developers is simply unfair, to put it mildly.

Removing the possibility to be able change the speed of Apple Music contents affects many many apps and many many thousands of users. My mailbox was flooded this morning with complaints and customers asking for a refund since my app is now useless. This can't be a bug fix, it's removing of a feature that has been available for at least the last three years, since iOS 13 or even earlier. Please tell us developers that this is actually bug introduced with iOS 15.4 so we can tell our (and Apple's) customers that it will work again in a soon to come update. This isn't what we expect from Apple!

Perhaps this was all just a misunderstanding and a bug that wasn’t caught from any of the unit tests, or there’s a new API that we will need to migrate towards to get the same functionality. I understand that not every release is perfect and that’s okay! Hopefully we get some documentation so our paying customers can be happy with the functionality they’ve come to expect from the products we developers create for the App Store, especially for those of us that make music apps whose customers solely need tempo-changing functionality to get better as musicians (what’s the point of a slow downer app without this functionality?).

However, if iOS 15.4 intentionally prevents developers from manipulating the speed of music in Apple Music and does not intend on adding this functionality back in the future, Apple owes developers that make music apps that rely on this functionality an official announcement at the very least. A timeline would’ve been ideal. Not a rug pull like this!

I’m working on an app that depends on this functionality. If Apple does not right its wrongs, I fully intend on giving my users a way to air their grievances on your forums. Why should I be the one to receive negative reviews because of how Apple rolls out feature changes like this? Nope; I will definitely be taking the time to design a simple, intuitive UX in my app to ensure my users can channel their frustrations onto the group that solely deserves their condemnation.

This mornings email complaints about this “bug fix” in iOS 15.4, here we go:

//

Slowdown/speed up slider no longer working . Music just plays 100%

//

Speed up/slow down no longer works IPad OS 15.4

//

Just updated to iOS 15.4 and now I can’t adjust playback speed of songs from Apple Music. Other imported songs work fine.

//

Songs in Apple Music cannot change the speed in the app in IOS 15.4.

//

Why has the slow down stopped working? I seem to be unable to change speeds on any of the music in the library that I’ve been using for more than a year. This just started today. Please help!!

//

This is ridiculous. The only reason I have your app is to change speeds so I can learn to play them. It’s affected my entire library. What do I do—can I fix it by reinstalling ?

//

I purchased a new iPhone 13 recently, and I would not have had I realized this would affect my use of Apple Music and your app which I use to practice my fiddle. Please, please fix this problem!

//

Since I updated to ios 15.4, I found that I can't change the speed, which is very annoying. I thought the app would improve soon after the update. I didn't expect that apple music could not change the speed after the update. I have been using Apple Music play since I bought this app. I hope this problem can be fixed as soon as possible.

//

My entire library ability to change speed/tempo is now inoperative 

//

Unable to adjust the speed? Help!

//

Hey guys - do you think the slow downer will be restored for itunes anytime soon ?

//

I purchased your app over a year ago and I love it!! I just did the update and realized I can no longer slow down apple music files. Just wondering if you are working on a solution. 

//

I saw the update regarding tempo and Apple Music. This is the sole reason I use this app. Is there a workaround or a possible fix? This a huge ****…

//

Hi - hope you can help. For some reason the slide functions of the app no longer works. The loss of sped adjustment is a make problem! Can this be fixed somehow? Have a pushed a button by mistake that prevents this from working?

//

The speed slider is not working after I downloaded the app

//

Your app doesn't work slowing song's down anymore. I have an iPhone13. Is this an Apple Music problem? 

//

I’ve been using this app for many years and it has helped me tremendously as a tap dance teacher. I play all of my music for class through this app. I’ve been having issues with it for the last couple of days. I’m hoping that maybe you are working on the app and that’s why it’s having issues today. The same issues are happening on my iPad and iPhone 12.

//

Why is the speed adjustment not working with my Apple Music. I have used this feature for my dance class for 2 years. If it truly doesn’t work anymore what options do t have to slow the songs down for practising dances. 

Heather 

//

I’m using your app quite a lot for studying and teaching. I bought the full version of the app from the Apple Store and I’m very happy with it.

As you might know, Apple iOS has updated the software.

Your app is no longer compatible in all the functions.

Please, is there something you can do about it and fix it?

Thank you very much for your attention!

//

What is going on today? I can’t adjust many things on my music, including the speed, which is of course why I have your app, and have for years. Please help! Signed, a really freaked out dance teacher! 

//

The new update will not let me change music that I have composed, imputed into my iTunes and downloaded to a playlist for your app. I use this function to practice my music at slower tempos especially the improvisation elements of my music. Please tell me this will be repaired? 

//

The whole reason I bought this app and spent way more on it than the other slow down apps is so I could use it with my purchased Apple Music library. Now I can’t. I would really like my money back but I assume that is not gonna happen.

//

I can’t change the speed of my music anymore. I read about the bug and the fix. I am paying monthly for Apple Music, does it count to consider I own the music? 

I really liked your app as I’m learning piano, but if I can’t slow down the music I have with apple, it is not useful anymore. 

How can I fix this while staying with Apple Music?

//

This is terrible! We are told to constantly keep up with the latest version of iOS software but that has led to critically down grading my favourite app. Please ask Apple to fix. 

//

I'd like to add my disappointment in how this was handled. I also have an app released on the App Store that relied on this functionality and just like that... it's completely useless for my customers.

What is the point of offering the MusicKit framework if all we can build is a glorified Music app with exactly the same features?

I would like to add my criticism of this abrupt change. There was no indication in the documentation that playbackRate should only be applied to content owned by the user, and no warning about this massive change. It is not fair to developers who have built apps around this feature and users who have paid for apps relying on this feature.

I think it's important that every developer that is affected of this bug should file a bug report and also ask all users that they complain to Apple.

Does anybody know where app users should complain?

  • Feedback Assistant is really the only option for both developers and end-users. And we all know how much good that will do.

    I did file a feedback on this when I made the original post. I have, of course, heard nothing and it remains 'open'.

    I think the chances of Apple revisiting this "decision" are very slim. The most likely scenario is that this was simply a "bug" all along and it is now fixed so far as they are concerned. Given the abysmal state of the MediaPlayer APIs, and their documentation, this should be no surprise to any of the developers here.

    Unfortunately this is simply an issue that fell through the cracks for many years and is not a large enough issue for Apple to be concerned with despite it being their mistake. Frankly I was surprised to get a response at all and I will be even more surprised should we get another.

Add a Comment

Yikes. I'm really disappointed in not only this particular issue - I too have an existing app with existing users who are now mad at ME for something that Apple has changed without notice or intent - but in general with Apple's support to small developers.

Have others noticed a significant uptick in problems and downtick in response/help from Apple?

I want to be compassionate regarding possible workplace challenges for those at Apple who support developers, but right now, I'm left with a sinking feeling that we've been abandoned.

The feature to change the playback rate only applies to content owned by the user, such as songs purchased on the iTunes Store.

So, help me understand: if I record tracks of my own music, composed and played by me, recorded using software I wrote, I can't change the playback rate?

  • The restriction here appears to be that tracks protected by DRM, such as those associated with Apple Music, cannot have their playback rate adjusted via MPMediaPlayer. Theoretically all other tracks can be playback rate adjusted either via MPMediaPlayer or via more robust APIs such AVAudioEngine + AVAudioUnitTimePitch.

  • On my iOS devices I have three types of files/songs in the Music Library:

    1: Regular files m4a/mp3 files ripped from a CD or audio files added to iTunes. 2: Files purchased from iTunes Store about 10 years ago, they are DRM protected .m4p files. Those are physical files that are synched from iTunes on my Mac over to the iOS device.

    3: Streaming "Apple Music" songs.

    All three types can be played with "MPMusicPlayerController applicationMusicPlayer".

    With "type 1" files, changing the speed with currentPlaybackRate works.

    With "type 3" files, currentPlaybackRate does not work.

    With "type 2" files, currentPlaybackRate works for some of the files but not for all. I believe I "own" all type 2 files (I did pay for them) but Apple thinks not. So checking if a file is DRM protected or not, doesn't tell us if speed change is possible.

    If speed change isn't going to be possible we at least need to be able to disable the speed change control. As of now there is no reliable way way to find out if speed change will be possible or not.

Add a Comment

Does anyone have any new info to share?

My bug report is still open and "Recent similar reports" == "None".

Many many customers are complaining, I am about to remove my app from the store.

Why can't anyone from Apple explain why this change was made?

For us developers and all our users, this change does not make sense. It just makes the iOS platform so much worse.

  • My original bug report is in the same state as yours. Radar/Feedback has long been a blackhole so I would not expect a timely response there. I have AVAsset related bugs that have been "open" for 3-4 years.

    You could try a code-level support ticket but I would not expect to get a fundamentally different answer or even any further clarification to this issue.

    As for an explanation from Apple I think we have our answer above from @JoeKun. This was a 'bug' that is now 'fixed'. Given how buggy and unreliable MPMusicPlayerController has always been this seems a likely explanation.

Add a Comment

Hello @pfvernon2, @florom, @acosmicflamingo, @nickfromsf, @oneway111, @davenorfleet and @deirdresm,

We have re-evaluated our previous decision to disable changing the playback rate for subscription content from Apple Music in third-party applications, and we came to the conclusion that we could safely enable that functionality again, just like before the release of iOS 15.4.

As such, this issue is fixed in iOS 15.5 beta 4.

I hope this helps.

Best regards,

  • Well... I'm floored. I did not expect a further acknowledgment let alone a reversal on this. A bit late for me unfortunately as I've already removed this functionality and moved product and marketing in a completely different direction. Still, I'm glad the functionality is reinstated and I hope it gets ongoing support and updates.

    @JoeKun - Thank you for continuing to investigate and advocate for the third party developers on this issue.

  • I don't use this functionality in my app but as someone who cares a lot about the broader state of Music APIs on Apple platforms, it is super cool to see this outcome.

  • WOW!!! THANK YOU and the TEAM!!! I am 1000000x SO appreciative that this was even looked at and addressed in an upcoming beta! This is such great news indeed!!!

I'm so happy that I cry ! Thank you so much ! @JoeKun 

Hello again old thread, it appears that currentPlaybackRate is broken in the same way on iOS 16.1 beta 1. This does not appear as a known issue in the release notes. Can we get confirmation that this is returning for the public release @JoeKun?