Discussion:
[emms-help] Problems getting emms-player-mpd working, and solutions
Alexis
2014-07-26 03:25:18 UTC
Permalink
Hi all,

Context: 64-bit Debian Wheezy; MPD version 0.16.7-2+b1 (from repo);
Emacs 24.3.92.1 (manually compiled); EMMS 4.0 (MELPA 20140630.1158).

i recently spent a bit of time trying to get EMMS to work with my MPD
setup, using emms-player-mpd. After some frustration, i discovered a
couple of things critical to getting it working, which the documentation
seems to either be incorrect about, or seems to not mention:


1. First and foremost, even though my MPD config has the setting:

save_absolute_paths_in_playlists "no"

(which is the default), i /did/ in fact need to set the
emms-player-mpd-music-directory to the location of my Music directory
(to wit, "~/Music/"). This would mean that playback would fail, as
emms-player-mpd was sending play requests to MPD with the absolute
path, rather than a path relative to the value of my MPD
music_directory variable (i.e. "~/Music"), as MPD required.

However, chapter 25 of the EMMS Manual states:

"If you use absolute file names in your m3u playlists (which is most
likely), make sure you set EMMS-PLAYER-MPD-MUSIC-DIRECTORY to the value
of 'music_directory' from your MusicPD config."

and the documentation for the emms-player-mpd-music-directory variable
states:

"You need this if your playlists use absolute file names, otherwise
leave it set to nil."


2. To add all music in my MPD database, such that it was listed in the
EMMS Browser, i needed to create an active MPD playlist containing all
music (which i did via ncmpcpp), /then/ do emms-add-directory-tree on
my Music folder. Unless there's some way of building the EMMS
track cache directly from the MPD database, that i've missed?


Hope this feedback helps!


Alexis.
Alexis
2014-07-27 01:26:07 UTC
Permalink
In my previous message, i wrote:

"This would mean that playback would fail ..."

i actually should have written:

"Otherwise, playback would fail ..."


Alexis.
Yoni Rabkin
2014-07-27 03:39:57 UTC
Permalink
I'll preface by saying that I don't use MPD and I didn't write the MPD
portions of Emms, so I have little to go on.
Post by Alexis
save_absolute_paths_in_playlists "no"
(which is the default), i /did/ in fact need to set the
emms-player-mpd-music-directory to the location of my Music directory
(to wit, "~/Music/"). This would mean that playback would fail, as
emms-player-mpd was sending play requests to MPD with the absolute
path, rather than a path relative to the value of my MPD
music_directory variable (i.e. "~/Music"), as MPD required.
"If you use absolute file names in your m3u playlists (which is most
likely), make sure you set EMMS-PLAYER-MPD-MUSIC-DIRECTORY to the value
of 'music_directory' from your MusicPD config."
and the documentation for the emms-player-mpd-music-directory variable
"You need this if your playlists use absolute file names, otherwise
leave it set to nil."
Could you please send a patch against the manual which fixes this? Or
simply send in the text you'd like to see in its place and I'll patch
the manual.
Post by Alexis
2. To add all music in my MPD database, such that it was listed in the
EMMS Browser, i needed to create an active MPD playlist containing all
music (which i did via ncmpcpp), /then/ do emms-add-directory-tree on
my Music folder. Unless there's some way of building the EMMS
track cache directly from the MPD database, that i've missed?
To test MPD I configure it like this:

(setq emms-player-mpd-server-name "blarg-ThinkPad-T61.local"
emms-player-mpd-server-port "6600"
emms-player-mpd-music-directory nil)
(add-to-list 'emms-info-functions 'emms-info-mpd)
(add-to-list 'emms-player-list 'emms-player-mpd)

...then: M-x emms-player-mpd-connect

...and the result is that my local emms playlist and browser buffers are
populated with the remote playlist, and everything just works.
--
"Cut your own wood and it will warm you twice"
Alexis
2014-07-27 10:34:45 UTC
Permalink
Post by Yoni Rabkin
Could you please send a patch against the manual which fixes this? Or
simply send in the text you'd like to see in its place and I'll patch
the manual.
Great, thanks. :-) Probably easiest for me to simply suggest the changes
here.

In Chapter 25 of the manual, replace:

"If you use absolute file names in your m3u playlists (which is most
likely), make sure you set EMMS-PLAYER-MPD-MUSIC-DIRECTORY to the value
of 'music_directory' from your MusicPD config."

with:

"Unless your MusicPD is configured to use absolute file names, you must
set the emms-player-mpd-music-directory variable to the value of
'music_directory' in your MusicPD config."

In the docstring for the emms-player-mpd-music-directory variable, replace:

"You need this if your playlists use absolute file names, otherwise
leave it set to nil."

with:

"Unless your MusicPD is configured to use absolute file names, you must
set this variable to the value of 'music_directory' in your MusicPD
config."
Post by Yoni Rabkin
Post by Alexis
2. To add all music in my MPD database, such that it was listed in the
EMMS Browser, i needed to create an active MPD playlist containing all
music (which i did via ncmpcpp), /then/ do emms-add-directory-tree on
my Music folder. Unless there's some way of building the EMMS
track cache directly from the MPD database, that i've missed?
(setq emms-player-mpd-server-name "blarg-ThinkPad-T61.local"
emms-player-mpd-server-port "6600"
emms-player-mpd-music-directory nil)
(add-to-list 'emms-info-functions 'emms-info-mpd)
(add-to-list 'emms-player-list 'emms-player-mpd)
...then: M-x emms-player-mpd-connect
...and the result is that my local emms playlist and browser buffers are
populated with the remote playlist, and everything just works.
The problem is: On initial setup (i.e. prior to the EMMS cache file
having been created), /unless/ one first creates a current playlist in
MPD /with every song in one's collection in it/, the browser buffer
isn't fully populated. So if at the time of initial setup, there are
only has 3 songs in one's current MPD playlist, only those 3 songs
will be listed as available in the browser buffer.

My current playlist is constantly changing, and rarely represents more
than a small fraction of all the music in my collection. Since
emms-player-mpd appears to be using the current MPD playlist to populate
the browser buffer / track cache, most of my collection wasn't available
for me to browse until i added every song in my collection to my current
playlist, /then/ did emms-add-directory-tree. The browser buffer was
then fully populated; i could clear the "every song" playlist from MPD
and go back to my usual-sized playlist.

Since MPD maintains a music database /independent/ of playlists, i can,
using the ncmpcpp MPD client, browse that database to add songs to my
current playlist. And one doesn't add to the database via playlists; one
places music files in the MusicPD music_directory, and then requests a
database update.

So i think that either:

* emms-player-mpd should populate the browser buffer / track cache via
the MPD /database/ rather than the /current MPD playlist/; or

* something like the following text should be added to chapter 25 of the
manual:

"The EMMS browser buffer / track cache is populated via the current
MPD playlist. On initial setup, if you wish to have your entire music
collection accessible from the browser buffer, your current MusicPD
playlist must contain every song in your collection before you run the
'emms-add-directory-tree' command. Once the browser buffer / track
cache has been fully populated, you can set your current MusicPD
playlist to whatever you like."


Alexis.
Yoni Rabkin
2014-07-28 22:12:57 UTC
Permalink
Post by Alexis
"If you use absolute file names in your m3u playlists (which is most
likely), make sure you set EMMS-PLAYER-MPD-MUSIC-DIRECTORY to the value
of 'music_directory' from your MusicPD config."
"Unless your MusicPD is configured to use absolute file names, you must
set the emms-player-mpd-music-directory variable to the value of
'music_directory' in your MusicPD config."
"You need this if your playlists use absolute file names, otherwise
leave it set to nil."
"Unless your MusicPD is configured to use absolute file names, you must
set this variable to the value of 'music_directory' in your MusicPD
config."
Done, thank you.
Post by Alexis
Post by Alexis
2. To add all music in my MPD database, such that it was listed in the
EMMS Browser, i needed to create an active MPD playlist containing all
music (which i did via ncmpcpp), /then/ do emms-add-directory-tree on
my Music folder. Unless there's some way of building the EMMS
track cache directly from the MPD database, that i've missed?
I've pushed this issue onto my Emms hacking stack (but I won't be angry
at all if you beat me to it.) About time I had another look at MPD
anyway.
--
"Cut your own wood and it will warm you twice"
Alexis
2014-07-29 08:20:15 UTC
Permalink
Post by Yoni Rabkin
Done, thank you.
Great, thanks!
Post by Yoni Rabkin
Post by Alexis
2. To add all music in my MPD database, such that it was listed in
the EMMS Browser, i needed to create an active MPD playlist
containing all music (which i did via ncmpcpp), /then/ do
emms-add-directory-tree on my Music folder. Unless there's some way
of building the EMMS track cache directly from the MPD database,
that i've missed?
I've pushed this issue onto my Emms hacking stack (but I won't be
angry at all if you beat me to it.)
:-) i'm currently preparing an Emacs package of mine for general
release, but i'll try to find some time to research a solution to this
issue .... i imagine it will probably involve issuing 'list' commands to
the MPD process, and building the track cache from that (e.g. sending
"list artist" to get a list of the artists in the database, then
iterating over that list and calling "list album artist [artist name]"
on each iteration to get a list of each artist's albums, etc.)


Alexis.
Alexis
2014-08-01 06:17:59 UTC
Permalink
Hi all,

Below is a naïve, proof-of-concept implementation of building EMMS cache
data via querying of the MusicPD database, using the 'connection'
package[1] for TCP communication. On my system,
emms-player-mpd-build-cache-from-db is roughly 80 times as fast as the
existing cache-building method of running mp3info: whereas the latter
takes 20+ minutes to complete, emms-player-mpd-build-cache-from-db
finishes in less than 15 seconds.


Alexis.

[1] Available via MELPA, or on GitHub here:
https://github.com/myrkr/dictionary-el/blob/master/connection.el



--- BEGIN proof-of-concept code ---

(require 'connection)
(setq conn (connection-open "localhost" "6600"))
(generate-new-buffer "*test-cache*")

(defun emms-player-mpd-build-cache-from-db ()
"Create the EMMS cache from the contents of the MusicPD database."

(interactive)

(let ((track-count 0)
(artists-string "")
(artists-list '()))

;; Get list of all artists in MPD database.

(connection-send conn "list artist\n")
(setq artists-string (connection-read conn "\nOK\n"))

(with-temp-buffer
(progn
(insert artists-string)
(goto-char (point-min))
(while (re-search-forward "Artist: \\([^\n]+\\)" nil t)
(setq artists-list (cons (match-string 1) artists-list)))))

;; Get list of all tracks by each artist.

(dolist (artist artists-list)

(let ((artist-tracks-string "")
(artist-tracks-list '()))

(connection-send conn (concat "list title artist \"" artist "\"\n"))
(setq artist-tracks-string (connection-read conn "\nOK\n"))

(with-temp-buffer
(progn
(insert artist-tracks-string)
(goto-char (point-min))
(while (re-search-forward "Title: \\([^\n]+\\)" nil t)
(setq artist-tracks-list (cons (match-string 1) artist-tracks-list)))))

(dolist (track artist-tracks-list)

(let ((metadata-string "")
(track-metadata '())
(track-file "")
(track-artist "")
(track-title "")
(track-album "")
(track-number "")
(track-time "")
(track-mtime "")
(track-year "")
(track-genre ""))

;; Escape double-quotes in name of track.
(setq track (replace-regexp-in-string "\042" (concat "\134" "\042") track nil t))

(connection-send conn (concat "find artist \"" artist "\" "
"title \"" track "\"\n"))
(setq metadata-string (connection-read conn "\nOK\n"))

(with-temp-buffer
(insert metadata-string)
(goto-char (point-min))
(while (re-search-forward "^\\([^:]+\\): \\([^\n]+\\)$" nil t)
(setq track-metadata (cons `(,(match-string 1) . ,(match-string 2)) track-metadata))))

(setq track-file (cdr (assoc "file" track-metadata)))
(setq track-artist (cdr (assoc "Artist" track-metadata)))
(setq track-title (cdr (assoc "Title" track-metadata)))
(setq track-album (cdr (assoc "Album" track-metadata)))
(setq track-number (cdr (assoc "Track" track-metadata)))
(setq track-time (cdr (assoc "Time" track-metadata)))
(setq track-mtime (date-to-time (cdr (assoc "Last-Modified" track-metadata))))
(setq track-year (cdr (assoc "Date" track-metadata)))
(setq track-genre (cdr (assoc "Genre" track-metadata)))

(setq track-count (+ 1 track-count))
(if (= 0 (mod track-count 200))
(message (concat "Tracks processed: " (format "%d" track-count))))

(print `(*track* (type . file) (name . ,track-file ) (metadata) (info-artist . ,track-artist) (info-title . ,track-title) (info-album . ,track-album) (info-tracknumber . ,track-number) (info-playing-time . ,track-time) (info-year . ,track-year) (info-genre . ,track-genre) (info-mtime ,@track-mtime)) (get-buffer "*test-cache*"))))))))

--- END proof-of-concept code ---
Michael Olson
2014-08-01 15:55:06 UTC
Permalink
I think that `emms-player-mpd-update-all' might already do what you want.
Post by Alexis
Hi all,
Below is a naïve, proof-of-concept implementation of building EMMS cache
data via querying of the MusicPD database, using the 'connection'
package[1] for TCP communication. On my system,
emms-player-mpd-build-cache-from-db is roughly 80 times as fast as the
existing cache-building method of running mp3info: whereas the latter
takes 20+ minutes to complete, emms-player-mpd-build-cache-from-db
finishes in less than 15 seconds.
Alexis.
https://github.com/myrkr/dictionary-el/blob/master/connection.el
--- BEGIN proof-of-concept code ---
(require 'connection)
(setq conn (connection-open "localhost" "6600"))
(generate-new-buffer "*test-cache*")
(defun emms-player-mpd-build-cache-from-db ()
"Create the EMMS cache from the contents of the MusicPD database."
(interactive)
(let ((track-count 0)
(artists-string "")
(artists-list '()))
;; Get list of all artists in MPD database.
(connection-send conn "list artist\n")
(setq artists-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(progn
(insert artists-string)
(goto-char (point-min))
(while (re-search-forward "Artist: \\([^\n]+\\)" nil t)
(setq artists-list (cons (match-string 1) artists-list)))))
;; Get list of all tracks by each artist.
(dolist (artist artists-list)
(let ((artist-tracks-string "")
(artist-tracks-list '()))
(connection-send conn (concat "list title artist \"" artist "\"\n"))
(setq artist-tracks-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(progn
(insert artist-tracks-string)
(goto-char (point-min))
(while (re-search-forward "Title: \\([^\n]+\\)" nil t)
(setq artist-tracks-list (cons (match-string 1)
artist-tracks-list)))))
(dolist (track artist-tracks-list)
(let ((metadata-string "")
(track-metadata '())
(track-file "")
(track-artist "")
(track-title "")
(track-album "")
(track-number "")
(track-time "")
(track-mtime "")
(track-year "")
(track-genre ""))
;; Escape double-quotes in name of track.
(setq track (replace-regexp-in-string "\042" (concat "\134" "\042") track nil t))
(connection-send conn (concat "find artist \"" artist "\" "
"title \"" track "\"\n"))
(setq metadata-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(insert metadata-string)
(goto-char (point-min))
(while (re-search-forward "^\\([^:]+\\): \\([^\n]+\\)$" nil t)
(setq track-metadata (cons `(,(match-string 1) .
,(match-string 2)) track-metadata))))
(setq track-file (cdr (assoc "file" track-metadata)))
(setq track-artist (cdr (assoc "Artist" track-metadata)))
(setq track-title (cdr (assoc "Title" track-metadata)))
(setq track-album (cdr (assoc "Album" track-metadata)))
(setq track-number (cdr (assoc "Track" track-metadata)))
(setq track-time (cdr (assoc "Time" track-metadata)))
(setq track-mtime (date-to-time (cdr (assoc "Last-Modified" track-metadata))))
(setq track-year (cdr (assoc "Date" track-metadata)))
(setq track-genre (cdr (assoc "Genre" track-metadata)))
(setq track-count (+ 1 track-count))
(if (= 0 (mod track-count 200))
(message (concat "Tracks processed: " (format "%d" track-count))))
(print `(*track* (type . file) (name . ,track-file ) (metadata)
(info-artist . ,track-artist) (info-title . ,track-title) (info-album .
,track-album) (info-tracknumber . ,track-number) (info-playing-time .
,track-time) (info-year . ,track-year) (info-genre . ,track-genre)
--- END proof-of-concept code ---
_______________________________________________
Emms-help mailing list
https://lists.gnu.org/mailman/listinfo/emms-help
Michael Olson
2014-08-01 15:55:42 UTC
Permalink
Or rather, emms-cache-set-from-mpd-all
Post by Michael Olson
I think that `emms-player-mpd-update-all' might already do what you want.
Post by Alexis
Hi all,
Below is a naïve, proof-of-concept implementation of building EMMS cache
data via querying of the MusicPD database, using the 'connection'
package[1] for TCP communication. On my system,
emms-player-mpd-build-cache-from-db is roughly 80 times as fast as the
existing cache-building method of running mp3info: whereas the latter
takes 20+ minutes to complete, emms-player-mpd-build-cache-from-db
finishes in less than 15 seconds.
Alexis.
https://github.com/myrkr/dictionary-el/blob/master/connection.el
--- BEGIN proof-of-concept code ---
(require 'connection)
(setq conn (connection-open "localhost" "6600"))
(generate-new-buffer "*test-cache*")
(defun emms-player-mpd-build-cache-from-db ()
"Create the EMMS cache from the contents of the MusicPD database."
(interactive)
(let ((track-count 0)
(artists-string "")
(artists-list '()))
;; Get list of all artists in MPD database.
(connection-send conn "list artist\n")
(setq artists-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(progn
(insert artists-string)
(goto-char (point-min))
(while (re-search-forward "Artist: \\([^\n]+\\)" nil t)
(setq artists-list (cons (match-string 1) artists-list)))))
;; Get list of all tracks by each artist.
(dolist (artist artists-list)
(let ((artist-tracks-string "")
(artist-tracks-list '()))
(connection-send conn (concat "list title artist \"" artist "\"\n"))
(setq artist-tracks-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(progn
(insert artist-tracks-string)
(goto-char (point-min))
(while (re-search-forward "Title: \\([^\n]+\\)" nil t)
(setq artist-tracks-list (cons (match-string 1)
artist-tracks-list)))))
(dolist (track artist-tracks-list)
(let ((metadata-string "")
(track-metadata '())
(track-file "")
(track-artist "")
(track-title "")
(track-album "")
(track-number "")
(track-time "")
(track-mtime "")
(track-year "")
(track-genre ""))
;; Escape double-quotes in name of track.
(setq track (replace-regexp-in-string "\042" (concat "\134"
"\042") track nil t))
(connection-send conn (concat "find artist \"" artist "\" "
"title \"" track "\"\n"))
(setq metadata-string (connection-read conn "\nOK\n"))
(with-temp-buffer
(insert metadata-string)
(goto-char (point-min))
(while (re-search-forward "^\\([^:]+\\): \\([^\n]+\\)$" nil t)
(setq track-metadata (cons `(,(match-string 1) .
,(match-string 2)) track-metadata))))
(setq track-file (cdr (assoc "file" track-metadata)))
(setq track-artist (cdr (assoc "Artist" track-metadata)))
(setq track-title (cdr (assoc "Title" track-metadata)))
(setq track-album (cdr (assoc "Album" track-metadata)))
(setq track-number (cdr (assoc "Track" track-metadata)))
(setq track-time (cdr (assoc "Time" track-metadata)))
(setq track-mtime (date-to-time (cdr (assoc "Last-Modified" track-metadata))))
(setq track-year (cdr (assoc "Date" track-metadata)))
(setq track-genre (cdr (assoc "Genre" track-metadata)))
(setq track-count (+ 1 track-count))
(if (= 0 (mod track-count 200))
(message (concat "Tracks processed: " (format "%d" track-count))))
(print `(*track* (type . file) (name . ,track-file ) (metadata)
(info-artist . ,track-artist) (info-title . ,track-title) (info-album .
,track-album) (info-tracknumber . ,track-number) (info-playing-time .
,track-time) (info-year . ,track-year) (info-genre . ,track-genre)
--- END proof-of-concept code ---
_______________________________________________
Emms-help mailing list
https://lists.gnu.org/mailman/listinfo/emms-help
Jose A. Ortega Ruiz
2014-08-01 16:41:15 UTC
Permalink
Or rather, emms-cache-set-from-mpd-all
I also use emms-player-mpd-update-all-reset-cache when i've changed
directory layouts, which completes in a few seconds.

jao
I think that `emms-player-mpd-update-all' might already do what you want.
Hi all,
Below is a naïve, proof-of-concept implementation of building EMMS cache
data via querying of the MusicPD database, using the 'connection'
package[1] for TCP communication. On my system,
emms-player-mpd-build-cache-from-db is roughly 80 times as fast as the
existing cache-building method of running mp3info: whereas the latter
takes 20+ minutes to complete, emms-player-mpd-build-cache-from-db
finishes in less than 15 seconds.
Alexis.
https://github.com/myrkr/dictionary-el/blob/master/connection.el
--- BEGIN proof-of-concept code ---
(require 'connection)
(setq conn (connection-open "localhost" "6600"))
(generate-new-buffer "*test-cache*")
(defun emms-player-mpd-build-cache-from-db ()
  "Create the EMMS cache from the contents of the MusicPD database."
  (interactive)
  (let ((track-count 0)
        (artists-string "")
        (artists-list '()))
  ;; Get list of all artists in MPD database.
  (connection-send conn "list artist\n")
  (setq artists-string (connection-read conn "\nOK\n"))
  (with-temp-buffer
    (progn
      (insert artists-string)
      (goto-char (point-min))
      (while (re-search-forward "Artist: \\([^\n]+\\)" nil t)
        (setq artists-list (cons (match-string 1) artists-list)))))
  ;; Get list of all tracks by each artist.
  (dolist (artist artists-list)
    (let ((artist-tracks-string "")
          (artist-tracks-list '()))
      (connection-send conn (concat "list title artist \"" artist "\"\n"))
      (setq artist-tracks-string (connection-read conn "\nOK\n"))
      (with-temp-buffer
        (progn
          (insert artist-tracks-string)
          (goto-char (point-min))
          (while (re-search-forward "Title: \\([^\n]+\\)" nil t)
            (setq artist-tracks-list (cons (match-string 1) artist-tracks-list)))))
      (dolist (track artist-tracks-list)
        (let ((metadata-string "")
              (track-metadata '())
              (track-file "")
              (track-artist "")
              (track-title "")
              (track-album "")
              (track-number "")
              (track-time "")
              (track-mtime "")
              (track-year "")
              (track-genre ""))
          ;; Escape double-quotes in name of track.
          (setq track (replace-regexp-in-string "\042" (concat "\134" "\042") track nil t))
          (connection-send conn (concat "find artist \"" artist "\" "
                                        "title \"" track "\"\n"))
          (setq metadata-string (connection-read conn "\nOK\n"))
          (with-temp-buffer
            (insert metadata-string)
            (goto-char (point-min))
            (while (re-search-forward "^\\([^:]+\\): \\([^\n]+\\)$" nil t)
              (setq track-metadata (cons `(,(match-string 1) . ,(match-string 2)) track-metadata))))
          (setq track-file (cdr (assoc "file" track-metadata)))
          (setq track-artist (cdr (assoc "Artist" track-metadata)))
          (setq track-title (cdr (assoc "Title" track-metadata)))
          (setq track-album (cdr (assoc "Album" track-metadata)))
          (setq track-number (cdr (assoc "Track" track-metadata)))
          (setq track-time (cdr (assoc "Time" track-metadata)))
          (setq track-mtime (date-to-time (cdr (assoc "Last-Modified" track-metadata))))
          (setq track-year (cdr (assoc "Date" track-metadata)))
          (setq track-genre (cdr (assoc "Genre" track-metadata)))
          (setq track-count (+ 1 track-count))
          (if (= 0 (mod track-count 200))
              (message (concat "Tracks processed: " (format "%d" track-count))))
          (print `(*track* (type . file) (name . ,track-file ) (metadata) (info-artist . ,track-artist) (info-title . ,track-title) (info-album . ,track-album) (info-tracknumber
--- END proof-of-concept code ---
_______________________________________________
Emms-help mailing list
https://lists.gnu.org/mailman/listinfo/emms-help
_______________________________________________
Emms-help mailing list
https://lists.gnu.org/mailman/listinfo/emms-help
--
If at first you don't succeed, try and try and try again. And then give up.
There's no point making a damn fool out of yourself.
-Dilbert's Rules of Work, slightly paraphrased
Alexis
2014-08-02 01:36:47 UTC
Permalink
Post by Michael Olson
Or rather, emms-cache-set-from-mpd-all
Why yes, yes it does. :-) Thank you!

i'd like to suggest that this function be noted as an integral part of
the EMMS+MPD setup process, rather than in the
to-me-not-immediately-relevant "emms-cache.el integration" section as
something "useful" to do. So, in chapter 25 of the EMMS manual, just
before the paragraph "You can set EMMS-PLAYER-MPD-SYNC-PLAYLIST ....", i
would add a new para:

"Once you've done the above, run the `emms-cache-set-from-mpd-all`
command to fill the EMMS cache with the contents of your MusicPD
database. The music in your MusicPD database should then be accessible
via the EMMS browser."

Thanks again!


Alexis.
Yoni Rabkin
2014-08-03 05:10:31 UTC
Permalink
Post by Alexis
Post by Michael Olson
Or rather, emms-cache-set-from-mpd-all
Why yes, yes it does. :-) Thank you!
i'd like to suggest that this function be noted as an integral part of
the EMMS+MPD setup process, rather than in the
to-me-not-immediately-relevant "emms-cache.el integration" section as
something "useful" to do. So, in chapter 25 of the EMMS manual, just
before the paragraph "You can set EMMS-PLAYER-MPD-SYNC-PLAYLIST ....", i
"Once you've done the above, run the `emms-cache-set-from-mpd-all`
command to fill the EMMS cache with the contents of your MusicPD
database. The music in your MusicPD database should then be accessible
via the EMMS browser."
done
--
"Cut your own wood and it will warm you twice"
Loading...