A long and winding road…
The first version of Plexamp was a small, highly opinionated music player released for macOS, Windows and Linux. It incorporated an advanced player under the hood which provided features like gapless and crossfading and it drove a number of improvements to the Plex Media Server for music libraries, including advanced loudness analysis and library and artist radio.
At its core, though, it suffered from a number of inadequacies which limited its potential: the player engine had portability and licensing issues beyond desktop platforms and didn’t have an easy way to add functionality (effects plugins, e.g.). The app itself was built in React, which is tied to the web.
Over the next two years, we worked to overcome both of those limitations.
First, we set out to create a new audio player library we call TREBLE, built on top of a low-level commercial audio engine. It’s portable across almost all desktop and mobile platforms, and provides the features you might hope for: sample-accurate gapless playback, high quality resampling, Sweet Fades, soft transitions, pre-caching. We’ve also implemented a few effects plugins on top for spoken word audio: one for voice boosting, and the other for silence compression. It’s the future of audio playback across all Plex applications which can host it.
The TREBLE player has been shipping in our official applications for quite some time now, and we’ve been continuing to improve functionality, reliability and performance.
As for the app itself, over the last year of nights and weekends, we’ve completely rewritten Plexamp using React Native, which is the most mature, productive and performant way to build cross-platform mobile apps for iOS and Android (sorry Flutter, although I think you’ve come a long way). We also made use of react-native-web, which extends the portability to desktop through Electron. Thus, a single codebase can target 5 platforms (Android, iOS, macOS, Windows and Linux) with only tiny amounts of per-platform code. If this isn’t developer nirvana, I’m not sure what is. (Want to check it out for yourself? I highly recommend Expo, which is essentially a layer on top of React Native which makes the entire process from start to shipping much easier in many cases.)
Applications should have a raison d’être. For Plexamp v3, it came down to: play music fast, don’t stop. This sounds simplistic, but it informed a lot of decisions:
- We use the OPUS codec for the highest quality audio at low bitrates for fast startup on mobile.
- We cache current and next track to minimize buffering and speed up track skipping.
- We pre-cache upcoming tracks (configurable up to 40) for the same reason. When it gains WiFi connectivity, it’ll kick off a pre-cache, so if you drive into your garage playing music you’ll probably grab a bunch of tracks for the next time you leave.
- Our simple but powerful duration-based offline feature is geared towards quickly downloading exactly what you need for a disconnected sojourn.
- The player is the primary user interface element, and it sits on top of everything else.
Beyond this core, we wanted to use the application as a playground, if you will, to explore our libraries, discover new music, and have fun, all inside a beautifully crafted interface.
As companies grow, they tend to have to adopt more rigorous processes and structure, and at a certain size even have R&D departments dedicated to innovation. Plex Labs aspires to be a source of some innovation with these unofficial apps and we expect that over time — as already seen with the TREBLE player — the best ideas and technologies will be incorporated back into our official applications. At the same time, the experimental apps can play with new ideas and get feedback from our community, iterating quickly. Everyone wins.
Without further ado, let’s dive into some of the new Plexamp v3 features, because there’s a lot to cover.
For as long as Plex has existed, we’ve always liked our backgrounds. Movies and TV shows generally have dedicated “fanart”. Some prefer it blurred, some don’t, and these backgrounds can be carefully curated and are visually detailed. For music, on the other hand, album art is album art and there’s no such thing as album fanart. Album covers also tend to have writing on them and occasional borders, all of which makes simplistic blurring problematic.
We set out to build a way to extract the most important colors from album artwork, and then render it in an aesthetically pleasing manner which might look something like looking at the artwork through smoked glass. We think it’s really sexy, so much so that we have a running Slack thread where people post in their favorite albums. We use UltraBlur in the player (of course) but also throughout the rest of the application to give each artist and album page its own persona.
Many of us have been running Plex Media Servers for quite a few years, so we thought it would be pretty fun to be able to go back in time and peruse your own personal charts for different time periods (“What albums was I spinning hard last summer?”), as well as your most-played music across different time periods (“When I hit the bong hard and go to the 60s, where exactly do I go?”).
Not only do we allow shuffling these charts, you can even download them for offline consumption (“I’d like three hours of my favorite music from last year”).
Sometimes you’re in the mood for that one U2 album (before they jumped the Shark with Zooropa, clearly). Other times you’re in the mood for pure discovery (hello, Discovery Radio!). Somewhere in the middle sits the Mix Builder, in which you can craft the perfect blend of Czarface, Carole King, and Chappaquiddick Skyline. Pick a set of artists and launch a mix, or if you’re feeling more adventurous, kick off a multi-artist radio station (newer server required). Heading into your submarine for the weekend? We also allow downloading these custom mixes.
Stations have proven to be a popular feature, so much so that we decided to add a bunch more. The new music libraries have rich metadata around styles and moods, so we used that data to generate a whole new swath of stations.
Being mobile implies a broad range of connectivity between full bars on LTE, no service deep in the Mariana Trench and the wide swath in between with occasional dead spots.
We built Plexamp v3 to handle this range of scenarios with the powerful offline functionality, aggressive track pre-caching, and by saving playbacks and ratings during intermittent connectivity until they can be sent to the server.
For times when you’re completely offline (or just don’t want to use any cellular data), we wanted to take a simple, user-centric approach to downloading music. It should be easy to grab that latest Ásgeir album, clearly, but why not allow easily grabbing a few hours of Radiohead artist radio, or a few hours of the Beatles or even of Library Radio? Tired of one of your downloaded stations? Simply refresh it to get a new set of tracks.
Search and Ye Shall Find
With a year of development, we had time to really sweat the details and try lots of different approaches to things. For search, we ended up designing a Recent Searches area which doubles as a list of bookmarks, as it saves search results that you interact with across all servers, TIDAL and podcasts.
Goldilocks and the Three Bears is an allegorical tale about the dangers of leaving your door unlocked, but I think it also applies to the Recently Played Music list we display in Plex apps. If you are a serial shuffler, it doesn’t matter that much if we showed recent tracks vs recent artists; if, on the other hand, you are an albumista, recent tracks ends up being pretty redundant as a single album will fill the allocated area pretty quickly. Rendering my metaphor completely moot, Goldilocks would just pick albums as the not-too-hot-not-too-cold medium ground, but she had it all wrong — oatmeal was the wrong sport altogether.
Instead, we designed a brand new concept called Recent Plays, which is so close lexically to Recently Played that it’s somewhat confusing and idiomatic until we explain that it actually shows you the actual things you’ve played (artists, albums, tracks, playlists, stations, etc.). Think of it as a diary of things you consciously chose to play. (The actual tracks you played are down there in the History section.)
What makes it even cooler is that we save your activity across all servers and TIDAL. And what makes it the proverbial bear’s pajamas is that we keep this list synced across all instances of Plexamp you run (so e.g. across desktop and mobile).
There’s So Much More…
We’ve just scratched the surface here of all the new stuff inside Plexamp v3. There are light and dark and even lighter and even darker themes. A powerful equalizer. Fun pivots on the artist and album pages. Tons of little knobs and switches. We’ve built every piece of the new Plexamp with care, love and an attention to detail. We’re passionate about music, we’re passionate about Plex, and we really hope you enjoy the app!
You’ll need a shiny PlexPass to use the app. Don’t have one yet? The horror! Pick one up, your media (and we) will thank you.