Abandoning Apple Music

I wrote about my dissatisfaction with Apple, and Tim Cook, a few weeks ago and said that I would be looking for ways to reduce what I’m spending with Apple. There is no great alternative for all of Apple’s products and services, because many alternatives are run by companies that align themselves with the same authoritarian interests as Apple. If I’m going to change something then there should be a reason why. It can be as simple as evaluating my recurring subscriptions through Apple and seeing which you can pay directly with the developer or service. There are some services where there are choices, and Apple Music is certainly one of those.

A major reason I used Apple Music is because it used to be the only streaming service that could work with Siri. I’m dependent on using Siri while I’m driving. That exclusivity hasn’t been the case for some time, but Apple dragged its feet on that just long enough to ensnare some of us. Music’s not even a very good app, or service. It’s from the Eddy Cue side of Apple which makes things that never seem fully baked. It worked for a demo; ship it.

I canceled my $10.99 Apple Music subscription, and it will expire at the next renewal period in six days. That gives me a window to evaluate alternatives. If nothing works well enough then I can flip the switch back on, but it puts a certain amount of pressure on me to get off my ass (or really, get on my ass? I have to sit at the computer for a lot of this.)

Replacement Research

Many things have changed with music apps and services since the last time I seriously looked around. I gave Apple Music a go and bailed on it once before in 2015 when it chewed up my iTunes Music Library. I was on Amazon Music Unlimited once before, but they’re also a mess, and a big no-no at the moment so I shan’t be returning.

I get YouTube Music as part of my YouTube Premium subscription (I can’t watch ads on YouTube or I’ll die) but the YouTube Music experience is a mess. It’s not a fully developed product, just something where they noticed they had music and users and smushed the two together. YouTube will soon have a new plan that omits music for a reduced monthly rate that I plan on switching to. It’s called YouTube Premium Lite, which sounds like a terrible beer.

Spotify is the leader in music streaming, but I dislike the company’s treatment of artists, and how it funds people like Joe Rogan. Tidal is majority owned by Block, Jack Dorsey’s company, and there’s very little to distinguish it, and nothing to distinguish Jack Dorsey.

This leaves Deezer (which I had heard of, but don’t know a soul using it) and Qobuz (which I thought was some kind of prank name). I signed up for the free one-month trials of each service. More on that below.

I also wanted to know if I really needed a streaming service at all. When I asked on Mastodon for what alternatives people are using several mentioned Doppler as a music player for their purchased music (from Bandcamp, Qobuz’s store, or other online stores). I decided to give that a go too. It has a free one-week trial but costs $30 to buy the app.

For all three of these experiments I needed to get my data out of Apple Music. There ended up being several routes for that.

Qobuz

Qobuz has a strong focus on audiophiles and music collectors that are interested in a magazine-like approach to discovery. Major Pono vibes.

Screenshot of Qobuz iOS app.
Hmm.

It’s worth mentioning that the service is is $12.99 a month when purchased directly, and $16.99 a month when you subscribe through Apple. Just another reminder that Apple is anticompetitive in this space. The direct subscription less if you pay directly for a year upfront, but that discount would only come into effect if I liked it after using it for a long while since the year is $129.99.

For importing music they partner with Soundiiz —one of the many music playlist transmutation services that exist— and you can import music from any supported source to Qobuz and only Qobuz without paying Soundiiz for one of their plans. The import was a little glitchy where I wasn’t sure if it had actually finished or not. Because I had started it on my iPhone I wasn’t sure if the long pauses were from the phone going to its locked state periodically, or the servers processing the data. It took a while to collect it.

They can only match music from one service to music on another service, so if the music is absent, or simply not an exact match, from that streaming service it isn’t transferred. They do provide CSV files for what it did, but it’s not very friendly at summarizing exactly what didn’t import from the songs in the browser.

The resulting library in Qobuz is mostly indistinguishable from my Apple Music Library at first glance. That’s the fun part about subtle data loss. However, I know full-well that there are many things in my library that aren’t things I listen to, or have alternate versions, so having a one-to-one copy on Qobuz is less important than it might seem.

I’m disappointed that Qobuz doesn’t offer anything for handling this import on the desktop themselves and you have to use this service they partnered with, but at least it isn’t an additional fee, and it’s not something you do often.

The Qobuz desktop app is a chromium blob thing. Fine, whatever, but on initial launch it has a modal dialog telling the user that they need to go to settings and grant the Qobuz app accessibility permissions so media playback keys will work for the app. That’s a big “no” from me. As near as I can tell, the keys work for the app while it is open, so this is more about those times you hit media playback keys when the app is not open and it would otherwise launch Music. I guess? Anyway, I’m never turning that on.

Surprisingly, Siri can’t find or playback anything from Qobuz. That’s pretty important while I’m driving the car. Articles talk about how there’s CarPlay support, and all the Siri toggles are turned to on in the preferences, but they don’t have support?

That’s an immediate dealbreaker for a music streaming service. I’m not going to pursue evaluating their music store right now, but I’d have to put those tracks in another app that has Siri compatibility to get anything out of it.

Deezer

I know, the name, but we must look past that. I would say that Deezer is more like Spotify in appearance. They want to be cool and fun. Frustratingly, they make you pick 15 artists that you like before you can do anything at all. That’s not cool and fun. Once I was through that roadblock it was obvious that the reason why they do that is so their “Flow” dynamic playlist system can work. Flow picks based on mood or genre, and uses your favorites for weighting the selections.

screenshot of Deezer for iOS
Seems fun? Not too stuffy and not pushy about things I don't like. See, it even has Mr. 305.

Deezer has an ad-supported plan with some limitations, like Spotify, but I hate ads interspersed with my music. The premium tier has more options, and comes in at $11.99 when purchased directly, or $14.99 for Apple to wet its beak. Deezer has a yearly plan for $107.99, which is a decent discount (about $9 a month) if I decide I like it.

As for importing, it’s just like Qobuz where the apps can’t import anything, but they partner with a playlist transmuting service to do that. In this case it’s TuneMyMusic. Curiously, when I tried to import from Apple Music using desktop Safari it didn’t work… It let me authorize the access, but the button to proceed after that was endlessly stuck on “Processing”. The iOS version got past that step but it wanted me to sign up for a paid TuneMyMusic plan. That’s wrong. I tried in desktop Safari again, and then I noticed there was the option to upload iTunes XML. That’s a horse of a different color! I exported a fresh XML from iTunes Apple Music, and dragged it in. Like Soundiiz, there were songs it didn’t match, but it would let you filter to show only the ones that didn’t match. It also had a single CSV export option.

Deezer does have Siri integration and works just fine with CarPlay. I do have to say, “Play Mona Lisa Overdrive by Juno Reactor on Deezer” which is quite a mouthful, but it works. You can’t argue with results.

The iOS app is quite good, and clearly where Deezer spent the majority of their time and effort. The interface is thoughtful, fun, but still very functional. I have no serious ding other than the aforementioned weirdness with the import I initiated on iOS not working.

They provide a desktop app, like Qobuz, but it’s also a steaming pile of Chromium. I’m not someone who’s an elitist about using native Mac apps, but there’s just simply nothing that the desktop app does that the browser version can’t do. Well, except for one thing: It adds itself to the login items. Yes, that’s right, every time you open the Deezer app it’ll re-add itself to the login items. You always want to have the Deezer Chromium app running at all times, don’t you?

Fortunately, because this is just a web app, I can very easily use “Add to Dock” in Safari to create an identical Deezer “app” but one that won’t insist on launching at startup. The app icon is the Deezer purple heart on a white background but its easy enough to pull the purple heart on black background from the Deezer app bundle.

Unfortunately it doesn’t have the unified playback experience of Spotify, but Apple Music didn’t have that either. Each instance of Deezer that you’re running will remember the last thing you were doing in it before it was closed, not the last thing you played on any Deezer client. There is a Deezer Connect option but it’s kind of quirky in my limited experience testing it. When I connected from my iPhone to my Mac and hit play, it played the last track I had played in the Mac client, but showed album info for something completely different in the iOS app. When I picked something new on the desktop app, while connected, then they were both in sync. Disconnecting let the iOS resume playing, but now they’re not in sync. This makes it into a strange kind of remote control. I’ll need to play with that more. Ultimately, my life will go unchanged.

Disappointingly, Deezer does default to some extremely hostile marketing defaults for your notifications.

A screenshot of the requested marketing notifications for Deezer, all enabled for push notification, email, and text message.
Deezer Nutifications.

To its credit: all the bullshit is in one spot, as opposed to Apple sprinkling different notification settings throughout the apps and Settings panes like the world’s worst Easter egg hunt.

Doppler

I’ll level with you right from the start: I absolutely do not see myself using Doppler. There’s a moment of excitement where you think about how you have total control over your library and have no recurring fees, but then it sets in that you have to manage cover artwork, metadata, and most importantly: transfer files.

screenshot of the Doppler iOS app
Like traveling back in time. I mean that both as a positive and a negative.

I did give it a try though. After all, it’s free for seven days. I downloaded the Mac app. On launch it wanted to import my data from Apple Music. That’s great!

It only imported what was downloaded to my computer, which was hardly any of my music. That left me with a handful of tracks and only three incomplete playlists that the tracks happened to be in. I wasn’t going to listen to James Horner’s “Surprise Attack” on a loop for the rest of my life so there had to be something else I could do, right?

Well, I can force Apple Music to download all my purchased music. I didn’t want to bother downloading the tracks I don’t own, because those will stop working next week. I made a smart playlist of all my “Purchased” tracks and I hit download. Apple Music spat out a bunch of errors. Most of the tracks it was having trouble with were ones I had purchased from Amazon’s MP3 store. Amazon had a DRM-free store (technically they still do) and so I had made many purchases through them over many years. I don’t know why Apple Music won’t let me get my “matched” files back. I know it’s not a backup solution, but I wouldn’t have expected it to be a one way trip, especially since I want to keep my playback metadata that Apple Music does have.

From your Amazon Orders page you can search for “MP3” and it will bring up every order you have. If you try and click on the album it will redirect you to Amazon Music’s streaming service with its tier for Prime subscribers, and the tier for Amazon Music Unlimited. That will show you your purchased music but not everything had a download button, and didn’t have one for the whole album. It wasn’t helpful.

However, if you click on “View order details” instead of the album, then you’ll get a button to download a zip file containing all the MP3s in that order. If you bought two albums in the same order, they will be in the same zip.

I know that Sam Davis’ TypeScript project to bulk download Kindle files has making the rounds lately, in no small part thanks to Jason Snell, but I was not going to be able to modify it to bulk-download the MP3 files.

I manually downloaded each zip file, expanded them, and consolidated any artists (they have an artist hierarchy before album). Once that was done I needed to get Apple Music to point to those files instead of the “Cloud” location. I couldn’t figure that part out so I dragged the new files in and had duplicates. Yay!

There is a menu option to show duplicates in your library, but that doesn’t offer anything for merging duplicates. Instead, I went to “File” > “Library” > “Update Cloud Library” and waited for it to complete. Then closed and reopened the app. Remember all the work Apple had to do to get the Cloud Library to stop fucking up peoples’ libraries? Well, a side effect of that work is apparently that it correctly consolidated the file location with the playback information from the cloud. Perfecto.

I did a fresh XML export at this stage too.

That left me with a weird problem: There was no way to trigger that Apple Music import that I got the first time I opened the app. I could manually import the tracks, but that’s just files, not playlists. I couldn’t import the XML, it was grayed out.

Deleting the Doppler library from ~/Music didn’t do anything. However, I found in the support documents that there was a location for where you could back up your library database and that was in ~/Library/Application \Support/Doppler. Simply delete Library.dopplerdb then relaunch Doppler and it’ll give you that onboarding screen. I pointed it at Apple Music again and this time it got all my purchased music files from both Apple and Amazon.

Unfortunately, this is when I realized I couldn’t go back to files. Doppler on the Mac uses a completely separate app called Doppler Transfer to send files to the iOS version of the Doppler app.

Doppler doesn’t have any kind of cloud syncing, and it can’t use iCloud for seamless storage. This was like handing me a butter churn and a tricorn hat. This is why we all got away from files. There isn’t even a sync, where I can make some set list of what to transfer and what not to like you used to do in iTunes.

I did all this work, so at least I have this at the ready, if the world ends, but I still have electricity, I can listen to the album “Ta Dah” by the Scissor Sisters.

Everyone Loves XML

Another benefit of the XML export still existing in the Music app is that it retains so much data that can be transformed into ways to put your mind at ease about transitioning to other platforms. The XML itself is not particularly helpful to look at, but I know that it can be transformed into something else I can sort more easily.

I asked Gemini for a python script to turn the XML file into a CSV.

import xml.etree.ElementTree as ET
import csv

def xml_to_csv(xml_file, csv_file):
    """Converts iTunes XML to CSV."""
    try:
        tree = ET.parse(xml_file)
        root = tree.getroot()
        tracks = []

        for track in root.findall('.//dict/dict'):
            track_data = {}
            for item in track:
                if item.tag == 'key':
                    key = item.text
                elif item.tag == 'string' or item.tag == 'integer' or item.tag == 'date' or item.tag == 'true' or item.tag == 'data':
                    track_data[key] = item.text if item.tag != 'true' else True # Store True as boolean, data as string

            if track_data:  # Ensure there's data for this track
                tracks.append(track_data)

        # Get all possible keys (columns) for the CSV. This handles cases where
        # not every track has the same fields.
        all_keys = set()
        for track in tracks:
            all_keys.update(track.keys())
        keys_list = sorted(list(all_keys))  # Sort keys for consistent column order

        with open(csv_file, 'w', encoding='utf-8', newline='') as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=keys_list)
            writer.writeheader()
            writer.writerows(tracks)

        print(f"CSV file '{csv_file}' generated successfully.")

    except FileNotFoundError:
        print(f"Error: XML file '{xml_file}' not found.")
    except ET.ParseError:
        print(f"Error: Could not parse XML file '{xml_file}'.")
    except Exception as e:
        print(f"An error occurred: {e}")


if __name__ == "__main__":
    xml_file = "YouriTunesLibrary.xml"  # Replace with your XML file
    csv_file = "itunes_tracks.csv"  # Output CSV file name
    xml_to_csv(xml_file, csv_file)

I modified that to handle the files better and put it inside of a Shortcut that works as a quick action. There’s unnecessary stuff in the python, but I didn’t want to waste time dicking around with it. I can open the CSV in Numbers and create a pivot table of any of the attributes in the data that I want to sort or filter by.

Like lets say that I want to know what songs I had in my Apple Music library that I did not purchase. These would be pure streaming adds. Purchased is either “TRUE” or no value. In the pivot table, I just collapse “TRUE” and I have everything else. There’s more I can do to sort and filter. Like if I want to see ones that I played often, or recently.

I have no plans to make purchase decisions based on this right now, especially since I’m using Deezer for the time being, but it feels a little comforting to have something I can look through more easily than the XML file. Even if you don’t have any plans of leaving Apple Music you can export and look through the XML. Kieran Healy and Doctor Drang could make some graphs or something.

Win Me Back, Apple

I absolutely won’t rule out returning to Apple Music —after all, I did it once before! Right now though, it makes me feel a little more in-control of expressing my dissatisfaction with a company. I don’t owe Apple fealty. They have to convince me to give them money, particularly if its for something as generic and uncompetitive as Apple Music.

No one at Apple will care about me unsubscribing, or even notice in the aggregate of users joining and canceling every month. This isn’t an “every vote counts” situation.

Surely, once I publish this, I’ll find out Deezer has contracts with Elon Musk, or murders babies, or something.

UPDATE: I was right. While I knew that 41% of Deezer was owned by Access Industries Investment Fund I didn’t go to the next level of research, as Patrick Toomey pointed out, the owner of Access is Len Blavatnik. See, I knew something bad would surface! I will not be pursuing Deezer further. Blavatnik also mostly owns Warner Music Group, and finances films for A24. Fun!

There’s never going to be a pure, saintly, capitalistic streaming service. I don’t want to pirate anything. I don’t really want to manage files. All I can do is make a choice that works best, not perfectly, for my circumstances and goals.

If anyone else feels similarly, you’re free to use this to help guide you in any way that it benefits you. If not, I hope my woke-flailing is at least entertaining.

2025-02-21 17:00:00

Category: text