emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/emms 5531af7 38/80: Add support for id3v1 genres


From: Stefan Monnier
Subject: [elpa] externals/emms 5531af7 38/80: Add support for id3v1 genres
Date: Wed, 17 Mar 2021 18:42:26 -0400 (EDT)

branch: externals/emms
commit 5531af7426bb5e162cd48ada4b65c5ac1b8bb00a
Author: Petteri Hintsanen <petterih@iki.fi>
Commit: Petteri Hintsanen <petterih@iki.fi>

    Add support for id3v1 genres
---
 emms-info-native.el | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 141 insertions(+), 1 deletion(-)

diff --git a/emms-info-native.el b/emms-info-native.el
index 97c1917..e3181ef 100644
--- a/emms-info-native.el
+++ b/emms-info-native.el
@@ -546,7 +546,7 @@ outside itself.")
     ("TDRC" . "date")
     ("TPA"  . "discnumber")
     ("TPOS" . "discnumber")
-    ("TCON" . "genre")
+    ("TCON" . genre)
     ("TPUB" . "label")
     ("TDOR" . "originaldate")
     ("TOR"  . "originalyear")
@@ -566,6 +566,135 @@ Sources:
 - URL `https://picard-docs.musicbrainz.org/en/appendices/tag_mapping.html'
 - URL `http://wiki.hydrogenaud.io/index.php?title=Foobar2000:ID3_Tag_Mapping'")
 
+(defconst emms-info-native--id3v1-genres
+  '((0 . "Blues")
+    (1 . "Classic Rock")
+    (2 . "Country")
+    (3 . "Dance")
+    (4 . "Disco")
+    (5 . "Funk")
+    (6 . "Grunge")
+    (7 . "Hip-Hop")
+    (8 . "Jazz")
+    (9 . "Metal")
+    (10 . "New Age")
+    (11 . "Oldies")
+    (12 . "Other")
+    (13 . "Pop")
+    (14 . "R&B")
+    (15 . "Rap")
+    (16 . "Reggae")
+    (17 . "Rock")
+    (18 . "Techno")
+    (19 . "Industrial")
+    (20 . "Alternative")
+    (21 . "Ska")
+    (22 . "Death Metal")
+    (23 . "Pranks")
+    (24 . "Soundtrack")
+    (25 . "Euro-Techno")
+    (26 . "Ambient")
+    (27 . "Trip-Hop")
+    (28 . "Vocal")
+    (29 . "Jazz+Funk")
+    (30 . "Fusion")
+    (31 . "Trance")
+    (32 . "Classical")
+    (33 . "Instrumental")
+    (34 . "Acid")
+    (35 . "House")
+    (36 . "Game")
+    (37 . "Sound Clip")
+    (38 . "Gospel")
+    (39 . "Noise")
+    (40 . "AlternRock")
+    (41 . "Bass")
+    (42 . "Soul")
+    (43 . "Punk")
+    (44 . "Space")
+    (45 . "Meditative")
+    (46 . "Instrumental Pop")
+    (47 . "Instrumental Rock")
+    (48 . "Ethnic")
+    (49 . "Gothic")
+    (50 . "Darkwave")
+    (51 . "Techno-Industrial")
+    (52 . "Electronic")
+    (53 . "Pop-Folk")
+    (54 . "Eurodance")
+    (55 . "Dream")
+    (56 . "Southern Rock")
+    (57 . "Comedy")
+    (58 . "Cult")
+    (59 . "Gangsta")
+    (60 . "Top 40")
+    (61 . "Christian Rap")
+    (62 . "Pop/Funk")
+    (63 . "Jungle")
+    (64 . "Native American")
+    (65 . "Cabaret")
+    (66 . "New Wave")
+    (67 . "Psychadelic")
+    (68 . "Rave")
+    (69 . "Showtunes")
+    (70 . "Trailer")
+    (71 . "Lo-Fi")
+    (72 . "Tribal")
+    (73 . "Acid Punk")
+    (74 . "Acid Jazz")
+    (75 . "Polka")
+    (76 . "Retro")
+    (77 . "Musical")
+    (78 . "Rock & Roll")
+    (79 . "Hard Rock")
+    (80 . "Folk")
+    (81 . "Folk-Rock")
+    (82 . "National Folk")
+    (83 . "Swing")
+    (84 . "Fast Fusion")
+    (85 . "Bebob")
+    (86 . "Latin")
+    (87 . "Revival")
+    (88 . "Celtic")
+    (89 . "Bluegrass")
+    (90 . "Avantgarde")
+    (91 . "Gothic Rock")
+    (92 . "Progressive Rock")
+    (93 . "Psychedelic Rock")
+    (94 . "Symphonic Rock")
+    (95 . "Slow Rock")
+    (96 . "Big Band")
+    (97 . "Chorus")
+    (98 . "Easy Listening")
+    (99 . "Acoustic")
+    (100 . "Humour")
+    (101 . "Speech")
+    (102 . "Chanson")
+    (103 . "Opera")
+    (104 . "Chamber Music")
+    (105 . "Sonata")
+    (106 . "Symphony")
+    (107 . "Booty Bass")
+    (108 . "Primus")
+    (109 . "Porn Groove")
+    (110 . "Satire")
+    (111 . "Slow Jam")
+    (112 . "Club")
+    (113 . "Tango")
+    (114 . "Samba")
+    (115 . "Folklore")
+    (116 . "Ballad")
+    (117 . "Power Ballad")
+    (118 . "Rhythmic Soul")
+    (119 . "Freestyle")
+    (120 . "Duet")
+    (121 . "Punk Rock")
+    (122 . "Drum Solo")
+    (123 . "A cappella")
+    (124 . "Euro-House")
+    (125 . "Dance Hall"))
+  "id3v1 genres.")
+
 (defconst emms-info-native--id3v2-text-encodings
   '((0 . latin-1)
     (1 . utf-16)
@@ -749,11 +878,22 @@ with key/value-pair.  Extract the key and, if it is a 
mapped
 element in `emms-info-native--id3v2-frame-to-info', use it as
 INFO-ID.
 
+If INFO-ID is `genre', assume that DATA is either id3v1 genre
+reference \"(XX)\" or plain genre string.  In the former case,
+map XX to a string via `emms-info-native--id3v1-genres'; in the
+latter case use the genre string verbatim.
+
 Return a cons cell (INFO-ID . VALUE) where VALUE is the decoded
 string."
   (when info-id
     (let ((str (emms-info-native--decode-id3v2-string data)))
       (cond ((stringp info-id) (cons info-id str))
+            ((eq info-id 'genre)
+             (if (string-match "^(\\([0-9]+\\))" str)
+                 (let ((v1-genre (assoc (string-to-number (match-string 1 str))
+                                        emms-info-native--id3v1-genres)))
+                   (when v1-genre (cons "genre" (cdr v1-genre))))
+               (cons "genre" str)))
             ((eq info-id 'user-defined)
              (let* ((key-val (split-string str (string 0)))
                     (key (downcase (car key-val)))



reply via email to

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