Skip to content

Instantly share code, notes, and snippets.

@heptal heptal/mpd.md
Last active Jan 16, 2020

Embed
What would you like to do?

I recently discovered mpd and found it to be a nice little program. There is a dearth of nice-looking OSX clients, though (besides terminal clients).

Using the hs.socket extension (in master, but not yet in the latest official release), I've created a Hammerspoon frontend that speaks the mpd protocol. With what I have so far, it's already much faster and easier to use than iTunes. I'll link the code on the Hammerspoon wiki once everything is finalized, but an in-progress version is available here.

Using hs.menubar, I've created a series of menubar items to assist with controlling playback. Hovering over the play/pause icon shows the current track. Hovering over the next icon shows the next track in the playlist:

The icons are defined with ASCIImage which work seamlessly anywhere in Hammerspoon:

icon.next = [[ASCII:  
..................  
..1.......6.......  
..................  
..................  
..................  
..................  
.......3.......8..  
..................  
..................  
..................  
..................  
..2.......7.......  
..................  
]]

More options are in the 🎵 icon (just hs.menubar:setTitle("🎵")). Easy selection of internet radio stations, for one:

Song changes are announced with hs.notify:

Using hs.chooser:queryChangedCallback, I send a search command to mpd and parse the results into a chooser list. Selecting an item adds it to the current playlist and immediately plays it. Searching across the whole database (currently about 7000 songs, still in the process of migrating a bunch of music using beets) is no problem at all. A recent addition to hs.image allows extraction of album art from media files:

https://my.mixtape.moe/xiwknf.mp4

I have another hs.chooser that filters album names. Selecting one enqueues the whole album onto the current playlist:

https://my.mixtape.moe/hepszk.mp4

Another similar hs.chooser allows navigation and selection of the current playlist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.