diff options
| -rw-r--r-- | emms-info-native.el | 142 | 
1 files changed, 141 insertions, 1 deletions
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)))  | 
