Package entagged.audioformats.mp3

Source Code of entagged.audioformats.mp3.Id3v2Tag

/*
* Entagged Audio Tag library
* Copyright (c) 2003-2005 Rapha�l Slinckx <raphael@slinckx.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
package entagged.audioformats.mp3;

import java.util.List;
import java.util.Locale;

import entagged.audioformats.generic.AbstractTag;
import entagged.audioformats.generic.TagField;
import entagged.audioformats.mp3.util.id3frames.CommId3Frame;
import entagged.audioformats.mp3.util.id3frames.TextId3Frame;

/**
* This class is the implementation of {@link entagged.audioformats.Tag} of the
* ID3V2 tagging system used with MP3s.<br>
*
* @author Rapha?l Slinckx , Christian Laireiter
*/
public class Id3v2Tag extends AbstractTag {
  /**
   * This is the default encoding to use for new frames.<br>
   * The code indirectly will choose the UTF-16LE variant with BOM.
   */
  public static String DEFAULT_ENCODING = "UTF-16";

  /**
   * This constant is used to identify the minor version 2 of the ID3V2 tag.
   */
  public static byte ID3V22 = 0;

  /**
   * This constant is used to identify the minor version 3 of the ID3V2 tag.
   */
  public static byte ID3V23 = 1;

  /**
   * This constant is used to identify the minor version 4 of the ID3V2 tag.
   */
  public static byte ID3V24 = 2;

  /**
   * If this flag is <code>true</code>, the file which contained this ID3V2
   * tag also contains a ID3V1 Tag, whose values are merged into this tag
   * object.<br>
   */
  private boolean hasV1 = false;

  /**
   * This field stores the ID3V2 version identifier to which the current tag
   * belongs.<br>
   * <ul>
   * <li> {@link #ID3V22} </li>
   * <li> {@link #ID3V23} </li>
   * <li> {@link #ID3V24} </li>
   * </ul>
   */
  private byte representedVersion = ID3V23;

  /**
   * Creates a default instance. <br>
   * Tag version is {@link #ID3V22}.
   */
  public Id3v2Tag() {
    // Nothing to do
  }

  /**
   * Creates an instance.
   *
   * @param version
   *            The version to represent. {@link #representedVersion}.
   */
  public Id3v2Tag(byte version) {
    this.representedVersion = version;
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createAlbumField(java.lang.String)
   */
  protected TagField createAlbumField(String content) {
    return new TextId3Frame("TALB", content);
  }

  /**
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createArtistField(java.lang.String)
   */
  protected TagField createArtistField(String content) {
    return new TextId3Frame("TPE1", content);
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createCommentField(java.lang.String)
   */
  protected TagField createCommentField(String content) {
    return new CommId3Frame(content);
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createGenreField(java.lang.String)
   */
  protected TagField createGenreField(String content) {
    return new TextId3Frame("TCON", content);
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createTitleField(java.lang.String)
   */
  protected TagField createTitleField(String content) {
    return new TextId3Frame("TIT2", content);
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createTrackField(java.lang.String)
   */
  protected TagField createTrackField(String content) {
    return new TextId3Frame("TRCK", content);
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#createYearField(java.lang.String)
   */
  protected TagField createYearField(String content) {
    return new TextId3Frame("TDRC", content);
  }

  /**
   * (overridden) Returns the frame id (name) for the album frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getAlbumId()
   */
  protected String getAlbumId() {
    return "TALB";
  }

  /**
   * (overridden) Returns the frame id (name) for the artist frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getArtistId()
   */
  protected String getArtistId() {
    return "TPE1";
  }

  /**
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#getComment()
   */
  public List getComment() {
    List comments = super.getComment();
    String currIso = Locale.getDefault().getISO3Language();
    CommId3Frame top = null;
    for (int i = 0; i < comments.size(); i++) {
      if (comments.get(i) instanceof CommId3Frame) {
        top = (CommId3Frame) comments.get(i);
        if (!top.getLangage().equals(currIso)) {
          top = null;
        } else {
          comments.remove(i);
          break;
        }
      }
    }
    if (top != null) {
      comments.add(0, top);
    }
    return comments;
  }

  /**
   * (overridden) Returns the frame id (name) for the comment frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getCommentId()
   */
  protected String getCommentId() {
    return "COMM";
  }

  /**
   * (overridden) Returns the frame id (name) for the genre frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getGenreId()
   */
  protected String getGenreId() {
    return "TCON";
  }

  /**
   * Returns the Id3v2 minor version identifier, the tag represents.<br>
   * Values are {@link #ID3V22}, {@link #ID3V23} and {@link #ID3V24}.<br>
   *
   * @return Returns the Id3v2 version identifier of mp3 library part.
   */
  public byte getRepresentedVersion() {
    return this.representedVersion;
  }

  /**
   * (overridden) Returns the frame id (name) for the title frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getTitleId()
   */
  protected String getTitleId() {
    return "TIT2";
  }

  /**
   * (overridden) Returns the frame id (name) for the track frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getTrackId()
   */
  protected String getTrackId() {
    return "TRCK";
  }

  /**
   * (overridden) Returns the frame id (name) for the year frame
   *
   * @see entagged.audioformats.generic.AbstractTag#getYearId()
   */
  protected String getYearId() {
    return "TDRC";
  }

  /**
   * Determines whether the values of a parallel stored ID3V1 tag are merged
   * whithin this object.<br>
   * In fact no value may have made it into this, but there is an ID3V1 tag
   * present in the original file.<br>
   *
   * @return <code>true</code> if there was a ID3V1 tag present.
   */
  public boolean hasId3v1() {
    return hasV1;
  }

  /**
   * This method sets the ID3V1 tag present property.<br>
   *
   * @see #hasId3v1()
   * @param b
   *            the value to set.
   */
  protected void hasId3v1(boolean b) {
    this.hasV1 = b;
  }

  /**
   *
   * (overridden)
   *
   * @see entagged.audioformats.generic.AbstractTag#isAllowedEncoding(java.lang.String)
   */
  protected boolean isAllowedEncoding(String enc) {
    boolean result = enc.equals("ISO-8859-1") || enc.startsWith("UTF-16");
    if (!result && this.representedVersion == ID3V24) {
      result = enc.equals("UTF-16BE") || enc.equals("UTF-8");
    }
    return result;
  }

  /**
   *
   * (overridden)
   *
   * @see java.lang.Object#toString()
   */
  public String toString() {
    return "Id3v2 " + super.toString();
  }

  /**
   * @param representedVersion The representedVersion to set.
   */
  protected void setRepresentedVersion(byte representedVersion) {
    this.representedVersion = representedVersion;
  }
}
TOP

Related Classes of entagged.audioformats.mp3.Id3v2Tag

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.