Projects 🔸 Articles 🔸 Categories 🔸

Introducing Stylophone

Music Player Daemon clients don't get much love on Windows.
You're usually left with ports of whatever clients people have created for Linux, which usually involves GTK, Qt or other cross-platform control libraries which look like they're coming straight out of the Windows 7 era.

The only MPD client offering on the Microsoft Store is Chimney, which I'm pretty sure nobody remembers anymore due to the Store being utterly unsearchable. It works, but the Windows 8 aesthetic feels just as out of place nowadays... Circled buttons? What *is* this, Windows Phone 7?

I've used Cantata for a long while as it was the only client left that was sorta-up-to-date, but it recently slipped into maintenance mode.

Even macOS was getting a brand new native MPD client with Swift 'n bells 'n whistles! Enough!
Making a new MPD client running on UWP/WinRT was a good way to check out how the platform's evolved since I last made RSS Live Tiles in 2017.

Soul Hackers is underrated soundtrack work from Shoji Meguro

Stylophone is now live on GitHub and on the Microsoft Store, so if you don't really care how the app was made you can stop reading and click on 👆👀☝

Building the app

A .NET base for the client section thankfully already existed through LibMpc.net, an ole' codeplex library which got reworked and improved upon through the years on Github.
So Stylophone technically contains code from 2008, which is...not very important but nice!

To bootstrap the UWP app portion, I've been really impressed with the Windows Template Studio, which allows you to prop up a skeleton and start coding app functionality straight away without having to reimplement INotifyPropertyChanged and BoolToVisibilityConverters for the 9847563th time. A+ stuff.

I've also used the Windows Community Toolkit for a few real nice-to-haves, such as middle-mouse scrolling and listview headers.

The architecture is standard MVVM, with a few services for essential features such as navigation and listening to the MPD server through an idle connection.

Design and name

Music players often appear in designer concepts, so I had a lot of inspiration to choose from.
Even on the macOS side, since they're also jumping on the "transparent sidebar" bandwagon now.
Microsoft always does it first m8s

For existing apps, I mostly looked at Groove Music, but also some existing UWP players like SoundByte or Bread Player.

Truth is, the compact view is entirely ripped off from SoundByte! God bless open source

The app uses WinUI 2 by default, although there are a few parts where I still needed stock Windows.UI.Xaml. (Mostly for background Acrylic)

The name was "FluentMPC" for the longest time, briefly became "Moroder" before I settled on "Stylophone", referencing the lil' dingus toy instrument David Bowie used in Space Oddity.

It also served in Heathen(The Rays) which in my opinion is a better Bowie track but I'm probably alone on that

The look of the instrument made for good inspiration as well when it came to making an icon.
Starting from the same proportions as the modern office icons, I used the look of the metal latches as the pattern and heavily simplified the "S" from the original logo.

The resulting icon doesn't indicate whatsoever that this is a music-related application. 🤐
But as someone who can't design, I like it!

Essential features and tailoring the app

What I wanted most from an MPD client besides the obvious playback/playlist features was good album art handling.
Traditionally, MPD clients used to pull album art from outside sources like search engines or last.fm, as the server had no capacity to provide art to clients. This usually led to a bunch of false positives, and allowed said search engines to track what you listened to.

This changed recently with the albumart command, which allows clients to pull binary data for cover art from the server.
It only handles cover.jpg/png files in the same folder as the tracks for now, but a second command, readpicture, is stated to come in MPD 0.22 to handle embedded art.

Stylophone handles both commands to build its album art cache, so it is future-proofed in that sense.

My second most-wanted "feature", if it can be called that, is a good Now Playing view.
I'd like to use Stylophone in a smart speaker setup later down the line, where it could show the current/next tracks on a touch screen alongside the basic playback controls.

Waiting for the Deadly Premonition 2 soundtrack...

Closing words

Actually, we encourage people who redistribute free software to charge as much as they wish or can.
- Free Software Foundation

Stylophone currently costs 5 USD on the Microsoft Store.
The entire app is free software under the MIT license so you can just compile it yourself if you don't want to pay. 👌
I won't provide binaries in any other fashion at the moment since distributing UWP apps is just annoying.
Although if you've read the article all the way to the end, you might just deserve a freebie!

Maybe in a year or so, I'll be able to port the app to Mac, Linux and mobile throught the Uno Platform, giving me total dominion over the MPD client space.
And endless anguish from having to support users from so many different platforms.

John Carmack's inauguration speech has some great thoughts about the current state of computing you should go watch it

Comments