Part of the Project Logs series.
More follow-up from my recent “Now” post: I’ve finally (mostly) extricated my music library from the entirety of Apple’s music ecosystem. This post documents how and why I did that.
A long, long time ago, I used iTunes to play music on my computers, the native Music app on my iPhone, and iTunes Match and/or iCloud Music Library to synchronize music to my phone.
Truth be told, I still don’t understand the relationship between iTunes Match and iCloud Music Library. It doesn’t matter; sometime around the time Apple Music was introduced, I decided to try the new streaming service, which promptly screwed up my cloud music library in nonsensical, opaque ways. I canceled Apple Music and was able to restore my music library from a backup. A while later, I found that I couldn’t download a few specific tracks from my iCloud Music Library, no matter what I tried. Apple Support was unable to help (“have you tried clicking the cloud icon in iTunes?” 🙄). At that point, I completely stopped trusting anything Apple does related to music in the cloud. I stored my music library on a Mac Mini here at home and synchronized it to my phone with iTunes.
Then, last year, my phone decided to delete its entire local music library. I think this was somehow related to me having to disable Apple Music to keep its ads from popping up in the Music app. This happened a couple more times (annoyingly, every iOS update seemed to reenable Apple Music and its ads), and every time it took over a day for iTunes to sync the library back to the phone. (I think this is because I used the “Convert higher bit rate songs to nnn Kbps” feature, meaning the computer had to do a lot of on-the-fly transcoding.) At that point I decided to remove as much Apple software as possible from my music ecosystem.
But none of the Plex client apps for the iPhone can reliably download an entire music library.
On my iPhone, I now keep my music library in the excellent Doppler music app, and it works perfectly for my needs. I’ve been able to delete Apple’s Music app from my phone.
To transfer music, I’m using iExplorer to mount Doppler’s container as a disk on the Mac Mini server; and I wrote this script based on
rsync to actually perform the sync. (Important to note: Doppler stores its library data in the
.doppler folder, so I had to make sure to exclude that from the sync. The first time I tried this,
rsync deleted Doppler’s library and Doppler had to rescan the entire library — obviously not ideal.)
I did try to get iFuse working myself, but I gave up after half an hour and I figured I’d just pay for iExplorer. iExplorer’s disk mounting feature seems somewhat flaky, and I’m not particularly happy with it. But it has gotten the job done so far.
The remaining problem was that I still needed to store a lower-bitrate version of my music library on the iPhone, since it doesn’t have space for the full library with its high-bitrate and lossless files. (Remember, iTunes could do this natively as part of the sync process.)
I wrote a new tool,
msync, to take care of this. It’s basically like
rsync, except that while mirroring music it transcodes any files that exceed a certain (user-specified) bitrate to lower bitrate AAC files. For files that it doesn’t need to transcode, it can (optionally) create symlinks rather than copying the files, saving disk space.
I have a
launchd job scheduled to run
msync nightly, maintaining a 160Kbps AAC version of my entire music library. That’s the library I actually sync to the phone.
Doppler’s developer says a macOS version of the app is in development, and I look forward to trying it out as soon as it’s ready. That’ll mean I no longer even use iTunes on that home Mac Mini server to manage the library. This is good, because soon I’m going to have to move off of macOS Mojave to Big Sur, and that means iTunes will be replaced by Music.app, which I’ve heard is nowhere near as good as iTunes was.
My personal laptop has enough space to store my music library locally, so once I’m able to use Doppler on Mac I’m hoping to sync Doppler’s library from the Mac Mini server to that laptop. Then I have a local copy, in case I’m working somewhere where streaming from Plex isn’t possible or practical.