📄 tagoptionsingleton.java
字号:
{
if (Languages.getInstanceOf().getIdToValueMap().containsKey(lang))
{
language = lang;
}
}
/**
* Returns the default language for any ID3v2 tag frames which require it.
*
* @return language ID, [ISO-639-2] ISO/FDIS 639-2 definition
*/
public String getLanguage()
{
return language;
}
/**
*
*
* @param lyrics3KeepEmptyFieldIfRead
*/
public void setLyrics3KeepEmptyFieldIfRead(boolean lyrics3KeepEmptyFieldIfRead)
{
this.lyrics3KeepEmptyFieldIfRead = lyrics3KeepEmptyFieldIfRead;
}
/**
*
*
* @return
*/
public boolean isLyrics3KeepEmptyFieldIfRead()
{
return lyrics3KeepEmptyFieldIfRead;
}
/**
*
*
* @param lyrics3Save
*/
public void setLyrics3Save(boolean lyrics3Save)
{
this.lyrics3Save = lyrics3Save;
}
/**
*
*
* @return
*/
public boolean isLyrics3Save()
{
return lyrics3Save;
}
/**
*
*
* @param lyrics3SaveEmptyField
*/
public void setLyrics3SaveEmptyField(boolean lyrics3SaveEmptyField)
{
this.lyrics3SaveEmptyField = lyrics3SaveEmptyField;
}
/**
*
*
* @return
*/
public boolean isLyrics3SaveEmptyField()
{
return lyrics3SaveEmptyField;
}
/**
* Sets if we should save the Lyrics3 field. Defaults to true.
*
* @param id Lyrics3 id string
* @param save true if you want to save this specific Lyrics3 field.
*/
public void setLyrics3SaveField(String id, boolean save)
{
this.lyrics3SaveFieldMap.put(id, save);
}
/**
* Returns true if we should save the Lyrics3 field asked for in the
* argument. Defaults to true.
*
* @param id Lyrics3 id string
* @return true if we should save the Lyrics3 field.
*/
public boolean getLyrics3SaveField(String id)
{
return (Boolean) lyrics3SaveFieldMap.get(id);
}
/**
*
*
* @return
*/
public HashMap getLyrics3SaveFieldMap()
{
return lyrics3SaveFieldMap;
}
/**
*
*
* @param oldWord
* @return
*/
public String getNewReplaceWord(String oldWord)
{
return (String) replaceWordMap.get(oldWord);
}
/**
* Sets the number of MP3 frames to sync when trying to find the start of
* the MP3 frame data. The start of the MP3 frame data is the start of the
* music and is different from the ID3v2 frame data. WinAmp 2.8 seems to
* sync 3 frames. Default is 5.
*
* @param numberMP3SyncFrame number of MP3 frames to sync
*/
public void setNumberMP3SyncFrame(int numberMP3SyncFrame)
{
this.numberMP3SyncFrame = numberMP3SyncFrame;
}
/**
* Returns the number of MP3 frames to sync when trying to find the start
* of the MP3 frame data. The start of the MP3 frame data is the start of
* the music and is different from the ID3v2 frame data. WinAmp 2.8 seems
* to sync 3 frames. Default is 5.
*
* @return number of MP3 frames to sync
*/
public int getNumberMP3SyncFrame()
{
return numberMP3SyncFrame;
}
/**
*
*
* @return
*/
public Iterator getOldReplaceWordIterator()
{
return replaceWordMap.keySet().iterator();
}
/**
*
*
* @param open
* @return
*/
public boolean isOpenParenthesis(String open)
{
return parenthesisMap.containsKey(open);
}
/**
*
*
* @return
*/
public Iterator getOpenParenthesisIterator()
{
return parenthesisMap.keySet().iterator();
}
/**
*
*
* @param originalSavedAfterAdjustingID3v2Padding
*
*/
public void setOriginalSavedAfterAdjustingID3v2Padding(boolean originalSavedAfterAdjustingID3v2Padding)
{
this.originalSavedAfterAdjustingID3v2Padding = originalSavedAfterAdjustingID3v2Padding;
}
/**
*
*
* @return
*/
public boolean isOriginalSavedAfterAdjustingID3v2Padding()
{
return originalSavedAfterAdjustingID3v2Padding;
}
/**
* Sets the default time stamp format for ID3v2 tags which require it.
* While the value will already exist when reading from a file, this value
* will be used when a new ID3v2 Frame is created from scratch.
* <p/>
* <P>
* $01 Absolute time, 32 bit sized, using MPEG frames as unit<br>
* $02 Absolute time, 32 bit sized, using milliseconds as unit<br>
* </p>
*
* @param tsf the new default time stamp format
*/
public void setTimeStampFormat(byte tsf)
{
if ((tsf == 1) || (tsf == 2))
{
timeStampFormat = tsf;
}
}
/**
* Returns the default time stamp format for ID3v2 tags which require it.
* <p/>
* <P>
* $01 Absolute time, 32 bit sized, using MPEG frames as unit<br>
* $02 Absolute time, 32 bit sized, using milliseconds as unit<br>
* </p>
*
* @return the default time stamp format
*/
public byte getTimeStampFormat()
{
return timeStampFormat;
}
/**
*
*/
public void setToDefault()
{
keywordMap = new HashMap();
filenameTagSave = false;
id3v1Save = true;
id3v1SaveAlbum = true;
id3v1SaveArtist = true;
id3v1SaveComment = true;
id3v1SaveGenre = true;
id3v1SaveTitle = true;
id3v1SaveTrack = true;
id3v1SaveYear = true;
id3v2PaddingCopyTag = true;
id3v2PaddingWillShorten = false;
id3v2Save = true;
language = "eng";
lyrics3KeepEmptyFieldIfRead = false;
lyrics3Save = true;
lyrics3SaveEmptyField = false;
lyrics3SaveFieldMap = new HashMap();
numberMP3SyncFrame = 3;
parenthesisMap = new HashMap();
replaceWordMap = new HashMap();
timeStampFormat = 2;
unsyncTags = false;
removeTrailingTerminatorOnWrite = true;
id3v23DefaultTextEncoding = TextEncoding.ISO_8859_1;
id3v24DefaultTextEncoding = TextEncoding.ISO_8859_1;
id3v24UnicodeTextEncoding = TextEncoding.UTF_16;
resetTextEncodingForExistingFrames = false;
//default all lyrics3 fields to save. id3v1 fields are individual
// settings. id3v2 fields are always looked at to save.
Iterator iterator = Lyrics3v2Fields.getInstanceOf().getIdToValueMap().keySet().iterator();
String fieldId;
while (iterator.hasNext())
{
fieldId = (String) iterator.next();
lyrics3SaveFieldMap.put(fieldId, true);
}
try
{
addKeyword(FrameBodyCOMM.class, "ultimix");
addKeyword(FrameBodyCOMM.class, "dance");
addKeyword(FrameBodyCOMM.class, "mix");
addKeyword(FrameBodyCOMM.class, "remix");
addKeyword(FrameBodyCOMM.class, "rmx");
addKeyword(FrameBodyCOMM.class, "live");
addKeyword(FrameBodyCOMM.class, "cover");
addKeyword(FrameBodyCOMM.class, "soundtrack");
addKeyword(FrameBodyCOMM.class, "version");
addKeyword(FrameBodyCOMM.class, "acoustic");
addKeyword(FrameBodyCOMM.class, "original");
addKeyword(FrameBodyCOMM.class, "cd");
addKeyword(FrameBodyCOMM.class, "extended");
addKeyword(FrameBodyCOMM.class, "vocal");
addKeyword(FrameBodyCOMM.class, "unplugged");
addKeyword(FrameBodyCOMM.class, "acapella");
addKeyword(FrameBodyCOMM.class, "edit");
addKeyword(FrameBodyCOMM.class, "radio");
addKeyword(FrameBodyCOMM.class, "original");
addKeyword(FrameBodyCOMM.class, "album");
addKeyword(FrameBodyCOMM.class, "studio");
addKeyword(FrameBodyCOMM.class, "instrumental");
addKeyword(FrameBodyCOMM.class, "unedited");
addKeyword(FrameBodyCOMM.class, "karoke");
addKeyword(FrameBodyCOMM.class, "quality");
addKeyword(FrameBodyCOMM.class, "uncensored");
addKeyword(FrameBodyCOMM.class, "clean");
addKeyword(FrameBodyCOMM.class, "dirty");
addKeyword(FrameBodyTIPL.class, "f.");
addKeyword(FrameBodyTIPL.class, "feat");
addKeyword(FrameBodyTIPL.class, "feat.");
addKeyword(FrameBodyTIPL.class, "featuring");
addKeyword(FrameBodyTIPL.class, "ftng");
addKeyword(FrameBodyTIPL.class, "ftng.");
addKeyword(FrameBodyTIPL.class, "ft.");
addKeyword(FrameBodyTIPL.class, "ft");
iterator = GenreTypes.getInstanceOf().getValueToIdMap().keySet().iterator();
while (iterator.hasNext())
{
addKeyword(FrameBodyCOMM.class, (String) iterator.next());
}
}
catch (TagException ex)
{
// this shouldn't happen, indicates coding error
throw new RuntimeException(ex);
}
addReplaceWord("v.", "vs.");
addReplaceWord("vs.", "vs.");
addReplaceWord("versus", "vs.");
addReplaceWord("f.", "feat.");
addReplaceWord("feat", "feat.");
addReplaceWord("featuring", "feat.");
addReplaceWord("ftng.", "feat.");
addReplaceWord("ftng", "feat.");
addReplaceWord("ft.", "feat.");
addReplaceWord("ft", "feat.");
iterator = this.getKeywordListIterator(FrameBodyTIPL.class);
addParenthesis("(", ")");
addParenthesis("[", "]");
addParenthesis("{", "}");
addParenthesis("<", ">");
}
/**
*
*
* @param id3v2FrameBodyClass
* @param keyword
* @throws TagException
*/
public void addKeyword(Class id3v2FrameBodyClass, String keyword)
throws TagException
{
if (AbstractID3v2FrameBody.class.isAssignableFrom(id3v2FrameBodyClass) == false)
{
throw new TagException("Invalid class type. Must be AbstractId3v2FrameBody " + id3v2FrameBodyClass);
}
if ((keyword != null) && (keyword.length() > 0))
{
LinkedList keywordList;
if (keywordMap.containsKey(id3v2FrameBodyClass) == false)
{
keywordList = new LinkedList();
keywordMap.put(id3v2FrameBodyClass, keywordList);
}
else
{
keywordList = (LinkedList) keywordMap.get(id3v2FrameBodyClass);
}
keywordList.add(keyword);
}
}
/**
*
*
* @param open
* @param close
*/
public void addParenthesis(String open, String close)
{
parenthesisMap.put(open, close);
}
/**
*
*
* @param oldWord
* @param newWord
*/
public void addReplaceWord(String oldWord, String newWord)
{
replaceWordMap.put(oldWord, newWord);
}
/**
*
* @return are tags unsynchronized when written if contain bit pattern that could be mistaken for audio marker
*/
public boolean isUnsyncTags()
{
return unsyncTags;
}
/**
* Unsync tag where neccessary, currently only applies to IDv23
*
* @param unsyncTags set whether tags are unsynchronized when written if contain bit pattern that could
* be mistaken for audio marker
*/
public void setUnsyncTags(boolean unsyncTags)
{
this.unsyncTags = unsyncTags;
}
/**
* Do we remove unneccessary trailing null characters on write
*
* @return true if we remove unneccessary trailing null characters on write
*/
public boolean isRemoveTrailingTerminatorOnWrite()
{
return removeTrailingTerminatorOnWrite;
}
/**
* Remove unneccessary trailing null characters on write
*
* @param removeTrailingTerminatorOnWrite
*/
public void setRemoveTrailingTerminatorOnWrite(boolean removeTrailingTerminatorOnWrite)
{
this.removeTrailingTerminatorOnWrite = removeTrailingTerminatorOnWrite;
}
/**
* Get the default text encoding to use for new v23 frames, when unicode is required
* UTF16 will always be used because that is the only valid option for v23/v22
*
* @return
*/
public byte getId3v23DefaultTextEncoding()
{
return id3v23DefaultTextEncoding;
}
/**
* Set the default text encoding to use for new v23 frames, when unicode is required
* UTF16 will always be used because that is the only valid option for v23/v22
*
* @param id3v23DefaultTextEncoding
*/
public void setId3v23DefaultTextEncoding(byte id3v23DefaultTextEncoding)
{
if(
(id3v23DefaultTextEncoding==TextEncoding.ISO_8859_1) ||
(id3v23DefaultTextEncoding==TextEncoding.UTF_16)
)
{
this.id3v23DefaultTextEncoding = id3v23DefaultTextEncoding;
}
}
/**
* Get the default text encoding to use for new v24 frames, it defaults to simple ISO8859
* but by changing this value you could always used UTF8 for example whether you needed to or not
*
* @return
*/
public byte getId3v24DefaultTextEncoding()
{
return id3v24DefaultTextEncoding;
}
/**
* Set the default text encoding to use for new v24 frames, it defaults to simple ISO8859
* but by changing this value you could always used UTF8 for example whether you needed to or not
*
* @param id3v24DefaultTextEncoding
*/
public void setId3v24DefaultTextEncoding(byte id3v24DefaultTextEncoding)
{
if(
(id3v24DefaultTextEncoding==TextEncoding.ISO_8859_1) ||
(id3v24DefaultTextEncoding==TextEncoding.UTF_16)||
(id3v24DefaultTextEncoding==TextEncoding.UTF_16BE)||
(id3v24DefaultTextEncoding==TextEncoding.UTF_8)
)
{
this.id3v24DefaultTextEncoding = id3v24DefaultTextEncoding;
}
}
/**
* Get the text encoding to use for new v24 frames when unicode is required, it defaults to UTF16 just
* because this encoding is understand by all ID3 versions
*
* @return
*/
public byte getId3v24UnicodeTextEncoding()
{
return id3v24UnicodeTextEncoding;
}
/**
* Set the text encoding to use for new v24 frames when unicode is required, it defaults to UTF16 just
* because this encoding is understand by all ID3 versions
*
* @param id3v24UnicodeTextEncoding
*/
public void setId3v24UnicodeTextEncoding(byte id3v24UnicodeTextEncoding)
{
if(
(id3v24UnicodeTextEncoding==TextEncoding.UTF_16)||
(id3v24UnicodeTextEncoding==TextEncoding.UTF_16BE)||
(id3v24UnicodeTextEncoding==TextEncoding.UTF_8)
)
{
this.id3v24UnicodeTextEncoding = id3v24UnicodeTextEncoding;
}
}
/**
* When writing frames if this is set to true then the frame will be written
* using the defaults disregarding the text encoding originally used to create
* the frame.
*
* @return
*/
public boolean isResetTextEncodingForExistingFrames()
{
return resetTextEncodingForExistingFrames;
}
/**
*
* When writing frames if this is set to true then the frame will be written
* using the defaults disregarding the text encoding originally used to create
* the frame.
*
* @param resetTextEncodingForExistingFrames
*/
public void setResetTextEncodingForExistingFrames(boolean resetTextEncodingForExistingFrames)
{
this.resetTextEncodingForExistingFrames = resetTextEncodingForExistingFrames;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -