emms-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [emms-help] Problems getting emms-player-mpd working, and solutions


From: Jose A. Ortega Ruiz
Subject: Re: [emms-help] Problems getting emms-player-mpd working, and solutions
Date: Fri, 01 Aug 2014 18:41:15 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

On Fri, Aug 01 2014, Michael Olson wrote:

> 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

>
> On Fri, Aug 1, 2014 at 8:55 AM, Michael Olson <address@hidden> wrote:
>
>     I think that `emms-player-mpd-update-all' might already do what you want.
>
>     On Thu, Jul 31, 2014 at 11:17 PM, Alexis <address@hidden> wrote:
>
>         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 ---
>        
>         _______________________________________________
>         Emms-help mailing list
>         address@hidden
>         https://lists.gnu.org/mailman/listinfo/emms-help
>
> _______________________________________________
> Emms-help mailing list
> address@hidden
> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]