The Emacs Multimedia System (EMMS)
Your initial rant suggests that you did not really give EMMS a try... Maybe you should?
- With the recent release of version 4, Yoni Rabkin, the maintainer, put a lot of effort into the manual. It's very good these days.
- It is simple since it mostly uses default Emacs bindings. Want to remove a song from the playlist?
C-a
C-k
(in git version just C-k
).
- It is flexible because you can display and play back your music how you want. Want to use
mplayer
? Or vlc
? Note, EMMS is pretty good at picking up sensible playback options out of the box, see emms-default-players
.
- It's very modular so you can get it as "bloated" as you want. AFAIK, YR does not use the ID3-browser, but I want as much "bloat" as possible.
- If you like
dired
keybindings there's emms-mark-mode
.
- From within EMMS, you can jump to the track under
point
in dired
with d
.
- You can play marked files in
dired
with emms-play-dired
.
- (Rudimentary) tag editing: Just hit
E
on a track.
- The ID3-browser is pretty out of the box, (you may have to produce covers in the right sizes, see
emms-browser-covers
and below).

Quick setup of the EMMS-browser
Add something like this to your init.el
(after installing EMMS):
;;** EMMS
;; Autoload the id3-browser and bind it to F7.
;; You can change this to your favorite EMMS interface.
(autoload 'emms-smart-browse "emms-browser.el" "Browse with EMMS" t)
(global-set-key [(f7)] 'emms-smart-browse)
(with-eval-after-load 'emms
(emms-standard) ;; or (emms-devel) if you want all features
(setq emms-source-file-default-directory "~/music"
emms-info-asynchronously t
emms-show-format "♪ %s")
;; Might want to check `emms-info-functions',
;; `emms-info-libtag-program-name',
;; `emms-source-file-directory-tree-function'
;; as well.
;; Determine which player to use.
;; If you don't have strong preferences or don't have
;; exotic files from the past (wma) `emms-default-players`
;; is probably all you need.
(if (executable-find "mplayer")
(setq emms-player-list '(emms-player-mplayer))
(emms-default-players))
;; For libre.fm see `emms-librefm-scrobbler-username' and
;; `emms-librefm-scrobbler-password'.
;; Future versions will use .authoinfo.gpg.
)
Click F7
to see initialization instructions. To add music do M-x
emms-add-directory-tree
. This will add all music to *EMMS Playlist*
(available through F7
F7
) and eventually to your library. Feel free to opt out of the library and use the playlist only. Just adjust what F7
calls.
Pretty cover art
Getting pretty cover art in EMMS is decently simple. First, read the manual (click the "pretty"-link above). The gist is that for each ~/music/artist/album
you need the set: cover_small.jpg
of 100px × 100px, as used on the left above, and a cover_med.jpg
of 200px × 200px, as used on the right above (adjust the sizes to your liking). The no-cover (Selmasongs above) is set via emms-browser-default-covers
. beet
can fetch covers for you. Then use find
and convert
(of imagemagick
) to resize and rename covers. It's a bit "manual" at the moment. . . I use the following script, which is probably copied or inspired by the interwebs. I'm not proficient with shell
so do let me know if you know a better way.
#!/bin/sh
MUSICDIR="/home/rasmus/music/"
# fetch new art
beet fetchart
# resize covers
find "$MUSICDIR" -iname "cover.jpg" |
find . -type f -iname 'cover.jpg' -exec bash -c '
for file do
EXTENSION="${file##*.}"
FILENAME="${file%.*}"
NEW_MED_NAME="${FILENAME}_med.${EXTENSION}"
NEW_SMALL_NAME="${FILENAME}_small.${EXTENSION}"
if [ ! -f "${NEW_MED_NAME}" ]; then
convert "${file}" -adaptive-resize 200x200 "${NEW_MED_NAME}"
fi
if [ ! -f "${NEW_SMALL_NAME}" ]; then
convert "${file}" -adaptive-resize 100x100 "${NEW_SMALL_NAME}"
fi
done
' bash {} +
:)
I understand that today there are only 2 packages to read music, so their names + the general purpose fit in the 5 allowed tags. If two more packages ever appear and are mentioned here, will you also add a tag for them? Experts can find the answer from tags that they know are connected to their specialty: I'd expect an expert in bongo to also follow emms and music-player, because there may be questions tagged with any in which they may still have useful knowledge to bring on the table.