emms-patches
[Top][All Lists]
Advanced

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

[Emms-patches] darcs patch: Get and set Flac file tags


From: Ye Wenbin
Subject: [Emms-patches] darcs patch: Get and set Flac file tags
Date: Sat, 03 May 2008 23:14:00 +0800

Sat May  3 23:09:00 CST 2008  Ye Wenbin <address@hidden>
  * Get and set Flac file tags
New patches:

[Get and set Flac file tags
Ye Wenbin <address@hidden>**20080503150900] {
addfile ./emms-info-metaflac.el
hunk ./emms-info-metaflac.el 1
+;;; emms-info-metaflac.el --- Info-method for EMMS using metaflac
+
+;; Copyright (C) 2006  Free Software Foundation, Inc.
+
+;; Author: Matthew Kennedy <address@hidden>
+;; Keywords:
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+;; Boston, MA 02110-1301 USA
+
+;;; Commentary:
+
+;; This code has been adapted from code found in emms-info-mp3info.el
+;; written by Ulrik Jensen <address@hidden> which contains the
+;; following attribution:
+
+;; This code has been adapted from code found in mp3player.el, written
+;; by Jean-Philippe Theberge (address@hidden), Mario
+;; Domgoergen (address@hidden) and Jorgen Schäfer
+;; <address@hidden>
+
+;; To activate this method for getting info, use something like:
+
+;; (require 'emms-info-metaflac)
+;; (add-to-list 'emms-info-methods-list 'emms-info-metaflac)
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+(require 'emms-info)
+
+(defvar emms-info-metaflac-version "0.1 $Revision: 1.10 $"
+  "EMMS info metaflac version string.")
+
+;; $Id: emms-info-mp3info.el,v 1.10 2005/08/12 18:01:16 xwl Exp $
+
+(defgroup emms-info-metaflac nil
+  "An EMMS-info method for getting/setting FLAC tags, using the
+external metaflac program"
+  :group 'emms-info)
+
+(defcustom emms-info-metaflac-program-name "metaflac"
+  "*The name/path of the metaflac program."
+  :type 'string
+  :group 'emms-info-metaflac)
+
+(defcustom emms-info-metaflac-options
+  '("--no-utf8-convert"
+    "--show-tag=TITLE"
+    "--show-tag=ARTIST"
+    "--show-tag=ALBUM"
+    "--show-tag=NOTE"
+    "--show-tag=YEAR"
+    "--show-tag=TRACKNUMBER"
+    "--show-tag=GENRE")
+  "The argument to pass to `emms-info-metaflac-program-name'."
+  :type '(repeat string)
+  :group 'emms-info-metaflac)
+
+(defun emms-info-metaflac (track)
+  "Get the FLAC tag of file TRACK, using `emms-info-metaflac-program'
+and return an emms-info structure representing it."
+  (when (and (eq 'file (emms-track-type track))
+             (string-match "\\.\\(flac\\|FLAC\\)\\'" (emms-track-name track)))
+    (with-temp-buffer
+      (when (zerop
+             (apply 'call-process
+              emms-info-metaflac-program-name
+              nil t nil
+              "--show-total-samples"
+              "--show-sample-rate"
+              (append emms-info-metaflac-options
+                      (list (emms-track-name track)))))
+        (goto-char (point-min))
+        (emms-track-set track 'info-playing-time
+                        (/ (string-to-number (buffer-substring (point) 
(line-end-position)))
+                           (progn
+                             (forward-line 1)
+                             (string-to-number (buffer-substring (point) 
(line-end-position))))))
+        (forward-line 1)
+        (while (looking-at "^\\([^=\n]+\\)=\\(.*\\)$")
+          (let ((name (intern (concat "info-" (downcase (match-string 1)))))
+                (value (match-string 2)))
+            (when (> (length value)
+                     0)
+              (emms-track-set track
+                              name
+                              (if (eq name 'info-playing-time)
+                                  (string-to-number value)
+                                value))))
+          (forward-line 1))))))
+
+(provide 'emms-info-metaflac)
+
+;;; emms-info-metaflac.el ends here
hunk ./emms-tag-editor.el 79
+      ("flac" . ,(emms-tag-editor-make-format (remove 'info-year tags)))
hunk ./emms-tag-editor.el 127
-    ("ogg" . emms-tag-editor-tag-ogg))
+    ("ogg" . emms-tag-editor-tag-ogg)
+    ("flac" . emms-tag-editor-tag-flac))
hunk ./emms-tag-editor.el 139
+(defun emms-tag-editor-tag-flac (track)
+  "Commit changes to an OGG file according to TRACK."
+  (require 'emms-info-metaflac)
+  (with-temp-buffer
+    (let (need val)
+      (mapc (lambda (tag)
+              (let ((info-tag (intern (concat "info-" tag))))
+                (when (> (length (setq val (emms-track-get track info-tag))) 0)
+                  (insert (upcase tag) "=" val "\n"))))
+            '("artist" "composer" "performer" "title" "album" "tracknumber" 
"date" "genre" "note"))
+      (when (buffer-string)
+        (funcall #'call-process-region (point-min) (point-max)
+                 emms-info-metaflac-program-name nil
+                 (get-buffer-create emms-tag-editor-log-buffer)
+                 nil
+                 "--import-tags-from=-"
+                 (emms-track-name track))))))
+
}

Context:

[Added emms-playlist-mode-goto-dired-at-point (with keybinding) to 
emms-playlist-mode.el.
address@hidden 
[Lines in playlist-mode should truncate so that visually we have 1 line per 
track.
address@hidden 
[(emms-lastfm-submit-now-playing): Set track-length to 0 when
William Xu <address@hidden>**20080216090004
 info-playing-time is unset, so that `number-to-string' won't raise an
 error.
] 
[(emms-url-quote): Check validity of string parameter S.
William Xu <address@hidden>**20080216085614] 
[(emms-url-quote): Slightly rewrote to be more readable. Fix docstring typo.
William Xu <address@hidden>**20080216043149] 
[emms-url: Add emms-url-quote-entire function.
Michael Olson <address@hidden>**20080215173509
 
 Use it to conservatively escape entire URLs.
 
 Make emms-player-mpd use this instead of emms-url-quote.
] 
[emms-url: Revert most of last two changes.
Michael Olson <address@hidden>**20080215173207
 
 Change remaining: Save match data.
 
 New changes: Update documentation to mention that this is only meant
 to be used for parts of URLs, not entire URLs.
 
] 
[emms-url: Include forward slashes in URL regexp.
Michael Olson <address@hidden>**20080215050112] 
[emms-url: Improve emms-url-quote.
Michael Olson <address@hidden>**20080215025800
 
  - Don't clobber the match data.
  - Don't escape the colon in "http://";.
 
] 
[Resolve conflicts with Tassilo's repo.
William Xu <address@hidden>**20080212103958] 
[- emms-url.el: (emms-url-quote, emms-url-quote-plus), New functions
William Xu <address@hidden>**20080212064822
   renamed from emms-lyrics-url-quote, emms-lyrics-url-quote-plus defined
   in emms-lyrics.el.
 
 - emms-url.el: (emms-escape-url, emms-url-specials), deleted, since they
   can only escape ASCII characters, emms-url-quote can handle all
   characters.
 
 - Update affected files accordingly.
] 
[(emms-lastfm-radio-request-metadata-sentinel): Let `emms-track-updated' take 
care of updating track info.
William Xu <address@hidden>**20080212041204] 
[abstract-POST-and-GET-requests-in-own-functions.dpatch
Tassilo Horn <address@hidden>**20080212090550] 
[add-todo-comment.dpatch
Tassilo Horn <address@hidden>**20080211141544] 
[add-support-for-now-playing-infos-on-lastfm-page.dpatch
Tassilo Horn <address@hidden>**20080211121258] 
[bugfixes-for-scrobbling-api-1.2.dpatch
Tassilo Horn <address@hidden>**20080211114131] 
[push-lastfm-submission-api-to-1.2.dpatch
Tassilo Horn <address@hidden>**20080211102659] 
[emms-playlist-mode: Use current buffer for clear and kill.
Michael Olson <address@hidden>**20080130064148
 
 In this case of the clear and kill commands, it makes the most sense
 to operate on the current buffer, rather than the currently-designated
 EMMS playlist buffer.
 
 Additionally, fix a bug when doing "a" or "RET" on something that
 isn't the current EMMS track.
 
] 
[emms-player-mpd (clear): Use current buffer if it is an EMMS playlist buffer.
Michael Olson <address@hidden>**20080130063956] 
[emms-player-mplayer.el: allow subtitle even for URLs
Luca Capello <address@hidden>**20080106152951] 
[emms-lastfm: Handle case where info-playing-time is unset for the current track
Michael Olson <address@hidden>**20080106233540] 
[delete-duplicate-def-of-emms-track-simple-description.dpatch
Tassilo Horn <address@hidden>**20071228191005
 
 Mathias patch added a new definition without removing the old one.
] 
[Format URL so that it looks nicer in playlist.
address@hidden 
[emms-streams.el: add docstring for emms-stream-toggle-default-action
address@hidden 
[emms-streams.el: update Philosomatika stream URL
address@hidden 
[New var: emms-playlist-limit-hook.
William Xu <address@hidden>**20071121113028] 
[MPlayer supports .ape files now.(at least from 1.0rc2)
William Xu <address@hidden>**20071121112846] 
[When calling file-exists-p, make sure it's operated on a regular file. (This 
is the cause of the various tramp errors..)
William Xu <address@hidden>**20071104143856] 
[Only add emms-info-* to emms-info-functions when required program actually 
exists.
William Xu <address@hidden>**20071104132746] 
[emms-lyrics.el: (emms-lyrics-find-lyric), Use 
`emms-source-file-directory-tree-function' instead of forceful 
emms-source-file-gnu-find.
William Xu <address@hidden>**20071022090151] 
[Replace `nnheader-concat' with `concat + file-name-as-directory' to make 
XEmacs happy.
William Xu <address@hidden>**20071014063932] 
[Move emms config files to a common directory: ~/.emacs.d/emms.
William Xu <address@hidden>**20071012024503] 
[emms-playlist-limit.el: Fix typos and minor updates.
William Xu <address@hidden>**20071008070917] 
[emms-player-mplayer.el (emms-player-mplayer-subtitle-checker): Replace
address@hidden
 / with _ in track names.
] 
[emms-browser.el: bind n and p to next- and previous-line.
address@hidden 
[fix-next-line-warning.dpatch
Tassilo Horn <address@hidden>**20070906201831] 
[emms-lastfm: Allow emms-key-value to take a buffer argument.
Michael Olson <address@hidden>**20070906192215
 
 I'm trying to track down some weird "error in process sentinel:
 delete-process: Selecting deleted buffer" errors that occur when I
 poll with emms-lastfm via a timer and start gnus (which blocks until
 it is finished retrieving email for all inboxes).
 
 These changes don't fix the problem, but they make me feel safer
 nonetheless :^) .  I suspect that it might be caused by a URL.el bug
 involving deleting the wrong buffer which was pointed out by Diane
 Murray last month.
 
] 
[emms-browser: Fix compiler warning.  Presumably the committer meant to write 
"performer" rather than "composer".
Michael Olson <address@hidden>**20070906191904] 
[fix-browser-covers.dpatch
Tassilo Horn <address@hidden>**20070829093557
 
 - If emms-browser-covers value is a function, call it with a directory as its 
docs
   say.  (Before it was called with a file)
 - Also add to its doc-string that its second arg is a symbol (its size).
 - Support all image types emacs knows.
] 
[format-spec expect spec character as a-zA-Z
Ye Wenbin <address@hidden>**20070902024848] 
[Error commentation in emms-i18n
Ye Wenbin <address@hidden>**20070902024825] 
[Wrong function in emms-history
Ye Wenbin <address@hidden>**20070902024732] 
[lastfm: Allow user to specify which type of tracks get submitted
Michael Olson <address@hidden>**20070819170235] 
[emms-lastfm: New option emms-lastfm-submission-verbose-p
Michael Olson <address@hidden>**20070819153739
 
 This controls whether EMMS notifies the user every time a track is
 submitted.  The default is not to do so.
] 
[Drop eval-when-compile around (require 'overlay)
Michael Olson <address@hidden>**20070819150408] 
[Use slightly different XEmacs overlay fix
Michael Olson <address@hidden>**20070818185218] 
[XEmacs does not load the overlay functions by default: load them here.
Nix <address@hidden>**20070818134016] 
[Add support for composer and performer tags.
Nix <address@hidden>**20070818133412
 
 The browser keybindings are somewhat discontiguous to avoid breaking
 people's finger macros: browsing by composer and performer are `b 5' and
 `b 6' respectively, where artist is `b 1'. 
 
 In the tag editor, I changed the note format character to %;, making room
 for composer as %c.
 
 I've not added support to last.fm for composer or performer, as it doesn't
 seem to support either. (I suspect that in most cases the composer should
 be reported as the artist if it is present, but that is not impolemented
 here.)
] 
[docs-for-editing-tags-and-renaming.dpatch
Tassilo Horn <address@hidden>**20070817150402] 
[use-existing-functionality-for-renaming-files.dpatch
Tassilo Horn <address@hidden>**20070817100310
 
 When I implemented the renaming stuff, I was not aware that Ye already thought
 of this feature.  When editing a track, one can edit the filename and the file
 will be renamed and the cache updated.  Now renaming by hitting `R'
 (`emms-tag-editor-rename') in the playlist makes use of this functionality
 instead of doing it on its own.
] 
[Simple players now use their regex property as they should.
address@hidden
 
 emms-player-simple.el (define-emms-simple-player): `playablep' now
 uses `emms-player-get' for the regex property, instead of using the
 hardcoded regex, as it should. Thanks to Ye Wenbin for noticing this
 old bug.
] 
[fix-cache-problem-when-renaming-tracks.dpatch
Tassilo Horn <address@hidden>**20070816070106
 
 I fixed the problem with the cache I mentioned in my last patch.
] 
[support-for-renaming-files-with-tag-editor.dpatch
Tassilo Horn <address@hidden>**20070815183247
 
 With `R' in a playlist (calls `emms-tag-editor-rename') the file(s)
 corresponding to the (marked) track(s) or the track at point will be renamed
 according to the format specified in `emms-tag-editor-rename-format'.
 
 Work ok for me, but there's a little problem maybe someone can fix:
 
   - If users use the cache it has to be updated somehow.  `emms-cache-sync'
     seems to remove the renamed files.  So you have to re-insert all renamed
     tracks to get them into the cache again.
] 
[refinements-and-docs-for-emms-history.dpatch
Tassilo Horn <address@hidden>**20070815080114
 
 This path makes some refinements in emms-history.el:
 
   - Start playback after `emms-history-load' only if
     `emms-history-start-playing' is non-nil.
   - Added customization group emms-history
   - defvar -> defcustom
   - better docstrings and commentary
   - Added Info docs. (Node "Persistent Playlists")
] 
[emms-score.el: change score-file to something more sane
address@hidden
 
 ~/.emms can be an EMMS config file, whereas ~/.emacs.d/ is already used
 to store the stream bookmarks file, so use it for the score file too.
] 
[make-S-prefix-key-for-sorting-functions.dpatch
Tassilo Horn <address@hidden>**20070802200758] 
[Fix compiler warning in emms-setup
Michael Olson <address@hidden>**20070723023532] 
[emms-playlist-limit: Use standard enable/disable/toggle interface
Michael Olson <address@hidden>**20070723023452] 
[emms-streams: New option emms-stream-repeat-p
Michael Olson <address@hidden>**20070723020304
 
 Instead of assuming that everyone will want to automatically repeat a
 streamlist if it runs out of tracks, make this controlled by the
 `emms-stream-repeat-p' option, which defaults to nil.
 
] 
[emms-player-mpd: Fix bug with selecting an individual URL track to play from a 
streamlist
Michael Olson <address@hidden>**20070723015956] 
[emms-player-mpd: Make callback arg for emms-player-mpd-sync-from-emms optional
Michael Olson <address@hidden>**20070723015722] 
[emms-playlist-sort.el: Bind "s s" to emms-playlist-sort-by-score.
William Xu <address@hidden>**20070719065003] 
[emms-setup.el: Enable emms-score in emms-devel.
William Xu <address@hidden>**20070717131538] 
[emms-lyrics.el: Set default value for emms-lyrics-dir to ~/music/lyrics.
William Xu <address@hidden>**20070717100946] 
[emms-playlist-sort.el: Remove emms-playlist-sort-prefix to make the
William Xu <address@hidden>**20070717095454
 codes more clean. And steal "s" prefix key from
 `emms-playlist-mode'. (An alternative for emms-playlist-mode could be
 "v", same as XMMS)
] 
[emms-playlist-limit.el: (define-emms-playlist-limit) Fix prompt string bug.
William Xu <address@hidden>**20070717082536] 
[make-number-of-secs-to-seek-configurable.dpatch
Tassilo Horn <address@hidden>**20070712062052
 
 Patch sent by "Alfred M. Szmidt" <address@hidden> in
 <address@hidden> on the emms-users list (with
 slight modifications).
] 
[Avoid even the most remote possibility of a conflict with color-theme.el and 
its very bad replace-in-string function
Michael Olson <address@hidden>**20070712211444] 
[emms-playlist-limit.el: Add missing line: (define-emms-playlist-limit 
info-title).
William Xu <address@hidden>**20070711071022] 
[emms-playlist-limit.el: Minor updates.
William Xu <address@hidden>**20070709103714] 
[emms-playlist-limit.el: Update Copyright to GPLv3.
William Xu <address@hidden>**20070708140012] 
[emms-playlist-sort.el: Minor updates.
William Xu <address@hidden>**20070708120050] 
[emms-playlist-limit.el: Redefine functions emms-playlist-limit-to-* with
William Xu <address@hidden>**20070708115907
 macro: define-emms-playlist-limit.
] 
[emms-playlist-limit.el: Add default value based on track at point for
William Xu <address@hidden>**20070708040809
 emms-playlist-limit-to-*.
] 
[New file: emms-playlist-limit.el. And minor updates to emms-playlist-sort.
William Xu <address@hidden>**20070705160221] 
[emms-player-mplayer.el: Add "eng.srt", "chs.srt", "cht.srt" to
William Xu <address@hidden>**20070630124728
 emms-player-mplayer-subtitle-extensions.
] 
[Updated NEWS for post-3.0
address@hidden 
[TAG 3.0
address@hidden 
Patch bundle hash:
8f948934a4dc67a2bd3318e151d79d3e35a99e43

reply via email to

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