/* * Written By Charles M. Chen * * Created on Sep 2, 2005 * */ package org.cmc.music.common; import java.util.Hashtable; import java.util.Map; import org.cmc.music.util.Debug; public class ID3FrameType { public final String shortID; public final String longID; public final String description; private final Number frameOrder; public static final Number DEFAULT_FRAME_ORDER = new Integer( Integer.MAX_VALUE); public static final Number TEXT_FRAME_ORDER = new Integer( Integer.MAX_VALUE / 2); private static Number getFrameOrder(String short_id, String long_id_1, String long_id_2) { try { // if(true) // return kDEFAULT_FRAME_ORDER; String frameid = long_id_1; if (frameid == null) frameid = long_id_2; if (frameid == null) frameid = short_id; if (frameid == null) return DEFAULT_FRAME_ORDER; return frameid.charAt(0) == 'T' ? TEXT_FRAME_ORDER : DEFAULT_FRAME_ORDER; } catch (Throwable e) { // Debug.debug("short_id", short_id); // Debug.debug("long_id_1", long_id_1); // Debug.debug("long_id_2", long_id_2); Debug.debug(e); return DEFAULT_FRAME_ORDER; } } public ID3FrameType(String short_id, String long_id_1, String long_id_2, String description) { this(short_id, long_id_1, long_id_2, description, getFrameOrder( short_id, long_id_1, long_id_2)); } public ID3FrameType(String short_id, String long_id_1, String long_id_2, String description, Number frame_order) { this.frameOrder = frame_order; this.description = description; if ((short_id == null) || short_id.length() == 0) short_id = null; if ((long_id_1 == null) || long_id_1.length() == 0) long_id_1 = null; if ((long_id_2 == null) || long_id_2.length() == 0) long_id_2 = null; this.shortID = short_id; this.longID = (long_id_1 == null) ? long_id_2 : long_id_1; if ((long_id_1 != null) && (long_id_2 != null) && (long_id_1 != long_id_2)) throw new Error("long_id_1: " + long_id_1 + ", long_id_2: " + long_id_2); } public ID3FrameType(String frame_id, String description) { this.description = description; this.longID = frame_id; this.shortID = null; this.frameOrder = DEFAULT_FRAME_ORDER; } public Number getFrameOrder() { return frameOrder; } public String toString() { return "{ " + shortID + " / " + longID + ": " + description + " }"; } public boolean matches(String frameID) { return ((longID != null) && longID.equalsIgnoreCase(frameID)) || ((shortID != null) && shortID.equalsIgnoreCase(frameID)); } public static final ID3FrameType GENRE_ID = new ID3FrameType(null, null, null, "Genre Id"); public static final ID3FrameType CONTENT_GROUP = new ID3FrameType("TT1", "TIT1", "TIT1", "Content Group Description"); public static final ID3FrameType TITLE = new ID3FrameType("TT2", "TIT2", "TIT2", "Title/Songname/Content Description", new Integer(2)); public static final ID3FrameType SUBTITLE = new ID3FrameType("TT3", "TIT3", "TIT3", "Subtitle/Description Refinement"); public static final ID3FrameType ARTIST = new ID3FrameType("TP1", "TPE1", "TPE1", "Lead Performer(S)/Soloist(S)", new Integer(2)); public static final ID3FrameType BAND = new ID3FrameType("TP2", "TPE2", "TPE2", "Band/Orchestra/Accompaniment", new Integer(2)); public static final ID3FrameType CONDUCTOR = new ID3FrameType("TP3", "TPE3", "TPE3", "Conductor/Performer Refinement"); public static final ID3FrameType MIX_ARTIST = new ID3FrameType("TP4", "TPE4", "TPE4", "Interpreted, Remixed, Modified By"); public static final ID3FrameType COMPOSER = new ID3FrameType("TCM", "TCOM", "TCOM", "Composer"); public static final ID3FrameType LYRICIST = new ID3FrameType("TXT", "TEXT", "TEXT", "Lyricist/Text Writer"); public static final ID3FrameType LANGUAGE = new ID3FrameType("TLA", "TLAN", "TLAN", "Language(S)"); public static final ID3FrameType CONTENTTYPE = new ID3FrameType("TCO", "TCON", "TCON", "Content Type"); public static final ID3FrameType ALBUM = new ID3FrameType("TAL", "TALB", "TALB", "Album/Movie/Show Title"); public static final ID3FrameType TRACKNUM = new ID3FrameType("TRK", "TRCK", "TRCK", "Track Number/Position In Set", new Integer(4)); public static final ID3FrameType PARTINSET = new ID3FrameType("TPA", "TPOS", "TPOS", "Part Of Set"); public static final ID3FrameType ISRC = new ID3FrameType("TRC", "TSRC", "TSRC", "International Standard Recording Code"); public static final ID3FrameType DATE = new ID3FrameType("TDA", "TDAT", null, "Date"); public static final ID3FrameType YEAR = new ID3FrameType("TYE", "TYER", null, "Year"); public static final ID3FrameType TIME = new ID3FrameType("TIM", "TIME", null, "Time"); public static final ID3FrameType RECORDINGDATES = new ID3FrameType("TRD", "TRDA", null, "Recording Dates"); public static final ID3FrameType RECORDINGTIME = new ID3FrameType(null, null, "TDRC", "Recording Time"); public static final ID3FrameType ORIGYEAR = new ID3FrameType("TOR", "TORY", null, "Original Release Year"); public static final ID3FrameType ORIGRELEASETIME = new ID3FrameType(null, null, "TDOR", "Original Release Time"); public static final ID3FrameType BPM = new ID3FrameType("TBP", "TBPM", "TBPM", "Beats Per Minute"); public static final ID3FrameType MEDIA_TYPE = new ID3FrameType("TMT", "TMED", "TMED", "Media Type"); public static final ID3FrameType FILE_TYPE = new ID3FrameType("TFT", "TFLT", "TFLT", "File Type"); public static final ID3FrameType COPYRIGHT = new ID3FrameType("TCR", "TCOP", "TCOP", "Copyright Message"); public static final ID3FrameType PUBLISHER = new ID3FrameType("TPB", "TPUB", "TPUB", "Publisher"); public static final ID3FrameType ENCODED_BY = new ID3FrameType("TEN", "TENC", "TENC", "Encoded By"); public static final ID3FrameType ENCODER_SETTINGS = new ID3FrameType("TSS", "TSSE", "TSSE", "Software/Hardware + Settings For Encoding"); public static final ID3FrameType SONGLEN = new ID3FrameType("TLE", "TLEN", "TLEN", "Length (Ms)"); public static final ID3FrameType SIZE = new ID3FrameType("TSI", "TSIZ", null, "Size (Bytes)"); public static final ID3FrameType PLAYLISTDELAY = new ID3FrameType("TDY", "TDLY", "TDLY", "Playlist Delay"); public static final ID3FrameType INITIALKEY = new ID3FrameType("TKE", "TKEY", "TKEY", "Initial Key"); public static final ID3FrameType ORIGALBUM = new ID3FrameType("TOT", "TOAL", "TOAL", "Original Album/Movie/Show Title"); public static final ID3FrameType ORIGFILENAME = new ID3FrameType("TOF", "TOFN", "TOFN", "Original Filename"); public static final ID3FrameType ORIGARTIST = new ID3FrameType("TOA", "TOPE", "TOPE", "Original Artist(S)/Performer(S)"); public static final ID3FrameType ORIGLYRICIST = new ID3FrameType("TOL", "TOLY", "TOLY", "Original Lyricist(S)/Text Writer(S)"); public static final ID3FrameType FILEOWNER = new ID3FrameType(null, "TOWN", "TOWN", "File Owner/Licensee"); public static final ID3FrameType NETRADIOSTATION = new ID3FrameType(null, "TRSN", "TRSN", "Internet Radio Station Name"); public static final ID3FrameType NETRADIOOWNER = new ID3FrameType(null, "TRSO", "TRSO", "Internet Radio Station Owner"); public static final ID3FrameType SETSUBTITLE = new ID3FrameType(null, null, "TSST", "Set Subtitle"); public static final ID3FrameType MOOD = new ID3FrameType(null, null, "TMOO", "Mood"); public static final ID3FrameType PRODUCEDNOTICE = new ID3FrameType(null, null, "TPRO", "Produced Notice"); public static final ID3FrameType ENCODINGTIME = new ID3FrameType(null, null, "TDEN", "Encoding Time"); public static final ID3FrameType RELEASETIME = new ID3FrameType(null, null, "TDRL", "Release Time"); public static final ID3FrameType TAGGINGTIME = new ID3FrameType(null, null, "TDTG", "Tagging Time"); public static final ID3FrameType ALBUMSORTORDER = new ID3FrameType(null, null, "TSOA", "Album Sort Order"); public static final ID3FrameType PERFORMERSORTORDER = new ID3FrameType( null, null, "TSOP", "Performer Sort Order"); public static final ID3FrameType TITLESORTORDER = new ID3FrameType(null, null, "TSOT", "Title Sort Order"); public static final ID3FrameType USERTEXT = new ID3FrameType("TXX", "TXXX", "TXXX", "User Defined Text Information Frame"); public static final ID3FrameType WWWAUDIOFILE = new ID3FrameType("WAF", "WOAF", "WOAF", "Official Audio File Webpage"); public static final ID3FrameType WWWARTIST = new ID3FrameType("WAR", "WOAR", "WOAR", "Official Artist/Performer Webpage"); public static final ID3FrameType WWWAUDIOSOURCE = new ID3FrameType("WAS", "WOAS", "WOAS", "Official Audion Source Webpage"); public static final ID3FrameType WWWCOMMERCIALINFO = new ID3FrameType( "WCM", "WCOM", "WCOM", "Commercial Information"); public static final ID3FrameType WWWCOPYRIGHT = new ID3FrameType("WCP", "WCOP", "WCOP", "Copyright/Legal Information"); public static final ID3FrameType WWWPUBLISHER = new ID3FrameType("WPB", "WPUB", "WPUB", "Publishers Official Webpage"); public static final ID3FrameType WWWRADIOPAGE = new ID3FrameType(null, "WORS", "WORS", "Official Internet Radio Station Homepage"); public static final ID3FrameType WWWPAYMENT = new ID3FrameType(null, "WPAY", "WPAY", "Payment"); public static final ID3FrameType WWWUSER = new ID3FrameType("WXX", "WXXX", "WXXX", "User Defined Url Link Frame"); public static final ID3FrameType INVOLVED_PEOPLE = new ID3FrameType("IPL", "IPLS", null, "Involved People List"); public static final ID3FrameType MUSICIANCREDITLIST = new ID3FrameType( null, null, "TMCL", "Musician Credits List"); public static final ID3FrameType INVOLVED_PEOPLE_2 = new ID3FrameType(null, null, "TIPL", "Involved People List"); public static final ID3FrameType UNSYNCEDLYRICS = new ID3FrameType("ULT", "USLT", "USLT", "Unsynchronised Lyrics/Text Transcription"); public static final ID3FrameType COMMENT = new ID3FrameType("COM", "COMM", "COMM", "Comments"); public static final ID3FrameType TERMSOFUSE = new ID3FrameType(null, "USER", "USER", "Terms Of Use"); public static final ID3FrameType UNIQUEFILEID = new ID3FrameType("UFI", "UFID", "UFID", "Unique File Identifier", new Integer(1)); public static final ID3FrameType CDID = new ID3FrameType("MCI", "MCDI", "MCDI", "Music Cd Identifier", new Integer(3)); public static final ID3FrameType EVENTTIMING = new ID3FrameType("ETC", "ETCO", "ETCO", "Event Timing Codes"); public static final ID3FrameType MPEGLOOKUP = new ID3FrameType("MLL", "MLLT", "MLLT", "Mpeg Location Lookup Table"); public static final ID3FrameType SYNCEDTEMPO = new ID3FrameType("STC", "SYTC", "SYTC", "Synchronised Tempo Codes"); public static final ID3FrameType SYNCEDLYRICS = new ID3FrameType("SLT", "SYLT", "SYLT", "Synchronised Lyrics/Text"); public static final ID3FrameType VOLUMEADJ = new ID3FrameType("RVA", "RVAD", null, "Relative Volume Adjustment"); public static final ID3FrameType VOLUME_ADJ_2 = new ID3FrameType(null, null, "RVA2", "Relative Volume Adjustment (2)"); public static final ID3FrameType EQUALIZATION = new ID3FrameType("EQU", "EQUA", null, "Equalization"); public static final ID3FrameType EQUALIZATION2 = new ID3FrameType(null, null, "EQU2", "Equalization (2)"); public static final ID3FrameType REVERB = new ID3FrameType("REV", "RVRB", "RVRB", "Reverb"); public static final ID3FrameType PICTURE = new ID3FrameType("PIC", "APIC", "APIC", "Attached Picture"); public static final ID3FrameType GENERALOBJECT = new ID3FrameType("GEO", "GEOB", "GEOB", "General Encapsulated Object"); public static final ID3FrameType PLAYCOUNTER = new ID3FrameType("CNT", "PCNT", "PCNT", "Play Counter"); public static final ID3FrameType POPULARIMETER = new ID3FrameType("POP", "POPM", "POPM", "Popularimeter"); public static final ID3FrameType BUFFERSIZE = new ID3FrameType("BUF", "RBUF", "RBUF", "Recommended Buffer Size"); public static final ID3FrameType CRYPTEDMETA = new ID3FrameType("CRM", null, null, "Encrypted Meta Frame"); public static final ID3FrameType AUDIOCRYPTO = new ID3FrameType("CRA", "AENC", "AENC", "Audio Encryption"); public static final ID3FrameType LINKEDINFO = new ID3FrameType("LNK", "LINK", "LINK", "Linked Information"); public static final ID3FrameType POSITIONSYNC = new ID3FrameType(null, "POSS", "POSS", "Position Synchronisation Frame"); public static final ID3FrameType COMMERCIAL = new ID3FrameType(null, "COMR", "COMR", "Commercial Frame"); public static final ID3FrameType CRYPTOREG = new ID3FrameType(null, "ENCR", "ENCR", "Encryption Method Registration"); public static final ID3FrameType GROUPINGREG = new ID3FrameType(null, "GRID", "GRID", "Group Indentification Registration"); public static final ID3FrameType PRIVATE = new ID3FrameType(null, "PRIV", "PRIV", "Private Frame"); public static final ID3FrameType OWNERSHIP = new ID3FrameType(null, "OWNE", "OWNE", "Ownership Frame"); public static final ID3FrameType SIGNATURE = new ID3FrameType(null, null, "SIGN", "Signature Frame"); public static final ID3FrameType SEEKFRAME = new ID3FrameType(null, null, "SEEK", "Seek Frame"); public static final ID3FrameType AUDIOSEEKPOINT = new ID3FrameType(null, null, "ASPI", "Audio Seek Point Index"); // public static final ID3FrameType ALL[] = { GENRE_ID, // CONTENT_GROUP, // TITLE, // SUBTITLE, // ARTIST, // BAND, // CONDUCTOR, // MIX_ARTIST, // COMPOSER, // LYRICIST, // LANGUAGE, // CONTENTTYPE, // ALBUM, // TRACKNUM, // PARTINSET, // ISRC, // DATE, // YEAR, // TIME, // RECORDINGDATES, // RECORDINGTIME, // ORIGYEAR, // ORIGRELEASETIME, // BPM, // MEDIA_TYPE, // FILE_TYPE, // COPYRIGHT, // PUBLISHER, // ENCODED_BY, // ENCODER_SETTINGS, // SONGLEN, // SIZE, // PLAYLISTDELAY, // INITIALKEY, // ORIGALBUM, // ORIGFILENAME, // ORIGARTIST, // ORIGLYRICIST, // FILEOWNER, // NETRADIOSTATION, // NETRADIOOWNER, // SETSUBTITLE, // MOOD, // PRODUCEDNOTICE, // ENCODINGTIME, // RELEASETIME, // TAGGINGTIME, // ALBUMSORTORDER, // PERFORMERSORTORDER, // TITLESORTORDER, // USERTEXT, // WWWAUDIOFILE, // WWWARTIST, // WWWAUDIOSOURCE, // WWWCOMMERCIALINFO, // WWWCOPYRIGHT, // WWWPUBLISHER, // WWWRADIOPAGE, // WWWPAYMENT, // WWWUSER, // INVOLVED_PEOPLE, // MUSICIANCREDITLIST, // INVOLVED_PEOPLE_2, // UNSYNCEDLYRICS, // COMMENT, // TERMSOFUSE, // UNIQUEFILEID, // CDID, // EVENTTIMING, // MPEGLOOKUP, // SYNCEDTEMPO, // SYNCEDLYRICS, // VOLUMEADJ, // VOLUME_ADJ_2, // EQUALIZATION, // EQUALIZATION2, // REVERB, // PICTURE, // GENERALOBJECT, // PLAYCOUNTER, // POPULARIMETER, // BUFFERSIZE, // CRYPTEDMETA, // AUDIOCRYPTO, // LINKEDINFO, // POSITIONSYNC, // COMMERCIAL, // CRYPTOREG, // GROUPINGREG, // PRIVATE, // OWNERSHIP, // SIGNATURE, // SEEKFRAME, // AUDIOSEEKPOINT, // }; private static final Map FRAME_ID_TO_FRAME_TYPE_MAP = new Hashtable(); public static ID3FrameType get(String id) { ID3FrameType result = (ID3FrameType) FRAME_ID_TO_FRAME_TYPE_MAP.get(id); return result; } static { try { for (int i = 0; i < ALL.length; i++) { if (ALL[i].shortID != null) FRAME_ID_TO_FRAME_TYPE_MAP.put(ALL[i].shortID, ALL[i]); if (ALL[i].longID != null) FRAME_ID_TO_FRAME_TYPE_MAP.put(ALL[i].longID, ALL[i]); } } catch (Throwable e) { Debug.debug(e); } } }