mtags
Version:
Media file tag parser
79 lines (72 loc) • 3.02 kB
JavaScript
/*
* JavaScript ID3 Tag Reader 0.1.2
* Copyright (c) 2008 Jacob Seidelin, cupboy@gmail.com, http://blog.nihilogic.dk/
* MIT License [http://www.opensource.org/licenses/mit-license.php]
*
* Extended by António Afonso (antonio.afonso@opera.com), Opera Software ASA
* Modified by António Afonso (antonio.afonso gmail.com)
*/
var genres = [
"Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge",
"Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B",
"Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska",
"Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient",
"Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical",
"Instrumental","Acid","House","Game","Sound Clip","Gospel",
"Noise","AlternRock","Bass","Soul","Punk","Space","Meditative",
"Instrumental Pop","Instrumental Rock","Ethnic","Gothic",
"Darkwave","Techno-Industrial","Electronic","Pop-Folk",
"Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta",
"Top 40","Christian Rap","Pop/Funk","Jungle","Native American",
"Cabaret","New Wave","Psychadelic","Rave","Showtunes","Trailer",
"Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro",
"Musical","Rock & Roll","Hard Rock","Folk","Folk-Rock",
"National Folk","Swing","Fast Fusion","Bebob","Latin","Revival",
"Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock",
"Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band",
"Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson",
"Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus",
"Porn Groove","Satire","Slow Jam","Club","Tango","Samba",
"Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle",
"Duet","Punk Rock","Drum Solo","Acapella","Euro-House","Dance Hall"
];
exports.loadData = function (data, callback) {
var length = data.getLength();
data.loadRange([length-128-1, length], callback);
};
exports.readTagsFromData = function (data) {
var offset = data.getLength() - 128;
var header = data.getStringAt(offset, 3);
if (header == "TAG") {
var title = data.getStringAt(offset + 3, 30).replace(/\0/g, "");
var artist = data.getStringAt(offset + 33, 30).replace(/\0/g, "");
var album = data.getStringAt(offset + 63, 30).replace(/\0/g, "");
var year = data.getStringAt(offset + 93, 4).replace(/\0/g, "");
var trackFlag = data.getByteAt(offset + 97 + 28);
if (trackFlag == 0) {
var comment = data.getStringAt(offset + 97, 28).replace(/\0/g, "");
var track = data.getByteAt(offset + 97 + 29);
} else {
var comment = "";
var track = 0;
}
var genreIdx = data.getByteAt(offset + 97 + 30);
if (genreIdx < 255) {
var genre = genres[genreIdx];
} else {
var genre = "";
}
return {
"version" : '1.1',
"title" : title,
"artist" : artist,
"album" : album,
"year" : year,
"comment" : comment,
"track" : track,
"genre" : genre
}
} else {
return {};
}
};