Subject: [PATCH] emacs-emms: Fix metadata retrieval for MP3 and FLAC files
From: Maxim Cournoyer <[email-masked]>
To: guix-patches <[email-masked]>
Date: Thu, 14 Sep 2017 16:14:37 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

This enhances our emacs-emms package so that it can retrieve the
metadata from FLAC and MP3 files. It also references GNU find
explicitly.

Here's how I tested it:

1. Backup (rename) any existing ~/.emacs.d/emms directory to get rid of
any cached playlist.
2. Make sure you have a collections of a few FLAC, Ogg and MP3 files
under ~/Music.
3. Add the following config to your .emacs file:
--8<---------------cut here---------------start------------->8---
;;; EMMS
(require 'emms-info-metaflac)
(require 'emms-setup)
(emms-all)
(emms-default-players)
(add-to-list 'emms-info-functions #'emms-info-metaflac)
(setq emms-source-file-directory-tree-function
      #'emms-source-file-directory-tree-find)
(setq emms-source-file-default-directory "~/Music/")
--8<---------------cut here---------------end--------------->8---
4. With the patch applied, run:
--8<---------------cut here---------------start------------->8---
./pre-inst-env guix environment --pure --ad-hoc emacs emacs-emms
emacs
--8<---------------cut here---------------end--------------->8---
5. Create the playlist from your default music directory:
M-x emms-add-directory-tree RET ~/Music RET
6. Finally, lauch EMMS with M-x emms and observe that the playlist was
correctly generated based on the files' metadata.

Thank you,

Maxim
From fcda96d1469864678ab1f24ec7ba8ee3fa8d28b7 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <[email-masked]>
Date: Wed, 13 Sep 2017 17:13:19 -0400
Subject: [PATCH] gnu: emacs-emms: Fix metadata retrieval for MP3 and FLAC
 files.

* gnu/packages/emacs.scm (emacs-emms): Reference find, mpg321 and metaflac by
their complete file path.
[inputs]: Add flac.
---
 gnu/packages/emacs.scm | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 5d9fd728a..784d8798b 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -840,6 +840,7 @@ provides an optional IDE-like error list.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out     (assoc-ref outputs "out"))
+                   (flac    (assoc-ref inputs "flac"))
                    (vorbis  (assoc-ref inputs "vorbis-tools"))
                    (alsa    (assoc-ref inputs "alsa-utils"))
                    (mpg321  (assoc-ref inputs "mpg321"))
@@ -862,6 +863,9 @@ provides an optional IDE-like error list.")
                  (substitute* "emms-player-simple.el"
                    (("\"ogg123\"")
                     (string-append "\"" vorbis "/bin/ogg123\"")))
+                 (substitute* "emms-player-simple.el"
+                   (("\"mpg321\"")
+                    (string-append "\"" mpg321 "/bin/mpg321\"")))
                  (emacs-substitute-variables "emms-info-ogginfo.el"
                    ("emms-info-ogginfo-program-name"
                     (string-append vorbis "/bin/ogginfo")))
@@ -871,6 +875,11 @@ provides an optional IDE-like error list.")
                  (emacs-substitute-variables "emms-info-mp3info.el"
                    ("emms-info-mp3info-program-name"
                     (string-append mp3info "/bin/mp3info")))
+                 (emacs-substitute-variables "emms-info-metaflac.el"
+                   ("emms-info-metaflac-program-name"
+                    (string-append flac "/bin/metaflac")))
+                 (emacs-substitute-variables "emms-source-file.el"
+                   ("emms-source-file-gnu-find" (which "find")))
                  (substitute* "emms-volume-amixer.el"
                    (("\"amixer\"")
                     (string-append "\"" alsa "/bin/amixer\"")))
@@ -896,6 +905,7 @@ provides an optional IDE-like error list.")
     (native-inputs `(("emacs" ,emacs-minimal)    ;for (guix build emacs-utils)
                      ("texinfo" ,texinfo)))
     (inputs `(("alsa-utils" ,alsa-utils)
+              ("flac" ,flac)            ;for metaflac
               ("vorbis-tools" ,vorbis-tools)
               ("mpg321" ,mpg321)
               ("taglib" ,taglib)
-- 
2.14.1