com.beaglebuddy.mp3

## Class MP3BaseID3v23

- java.lang.Object
- - com.beaglebuddy.mp3.MP3BaseID3v23

- Direct Known Subclasses:
    MP3BaseID3v24

      public class MP3BaseID3v23
      extends java.lang.Object

  This base class provides some underlying methods for working with an ID3v2.3 tag.

  See Also:
    `MP3BaseID3v24`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected ID3v23Tag` | `id3v23Tag` ID3v2.3 tag which holds all the information about an .mp3 file

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MP3BaseID3v23()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ID3v23Frame` | `addV23Frame(FrameType frameType)` add an ID3v2.3 frame of the specified type to the ID3v2.3 tag.
    `ID3v23Tag` | `getID3v23Tag()` gets the ID3v2.3 Tag.
    `protected java.lang.String` | `getV23Album()` finds the ID3v2.3 `FrameType.ALBUM_TITLE` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected AttachedPicture` | `getV23AttachedPicture(PictureType pictureType)` finds the ID3v2.3 `FrameType.ATTACHED_PICTURE` frame in the ID3v2.3 tag and retrieves the attached picture.
    `protected ID3v23Frame` | `getV23AttachedPictureFrame(PictureType pictureType)` finds the ID3v2.3 attached picture frame containing the specified picture type in the ID3v2.3 tag.
    `protected java.util.List<AttachedPicture>` | `getV23AttachedPictures()` finds all the ID3v2.3 `FrameType.ATTACHED_PICTURE` frames in the ID3v2.3 tag and retrieves the attached picture for each frame.
    `int` | `getV23AudioDuration()` finds the ID3v2.3 `FrameType.LENGTH` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected int` | `getV23AudioSize()` finds the ID3v2.3 `FrameType.SIZE` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23Band()` finds the ID3v2.3 `FrameType.BAND` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23Comments(Language language)` finds the song comments written in the specified language in the ID3v2.3 tag.
    `protected ID3v23Frame` | `getV23CommentsFrame(Language language)` finds the ID3v2.3 comments frame with the specified language in the ID3v2.3 tag.
    `protected int` | `getV23Disc()` finds the ID3v2.3 `FrameType.PART_OF_A_SET` text frame in the ID3v2.3 tag and retrieves the text field.
    `java.util.List<java.lang.String>` | `getV23Errors()` gets a list of any frame errors encountered while reading in the ID3v2.3 tag.
    `ID3v23Frame` | `getV23Frame(FrameType frameType)` finds the first ID3v2.3 frame in the ID3v2.3 tag with the specified ID3v2.3 frame id.
    `java.util.List<ID3v23Frame>` | `getV23Frames(FrameType frameType)` finds all the ID3v2.3 frames in the ID3v2.3 tag with the specified ID3v2.3 frame id.
    `protected java.lang.String` | `getV23LeadPerformer()`
    `protected java.lang.String` | `getV23LyricsBy()` finds the ID3v2.3 `FrameType.LYRICIST` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23MusicBy()` finds the ID3v2.3 `FrameType.COMPOSER` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23MusicType()` finds the ID3v2.3 `FrameType.CONTENT_TYPE` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23Publisher()` finds the ID3v2.3 `FrameType.PUBLISHER` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected int` | `getV23Rating()` finds the ID3v2.3 `FrameType.POPULARIMETER` frame in the ID3v2.3 tag and retrieves the rating field.
    `protected java.util.List<SynchronizedLyric>` | `getV23SynchronizedLyrics(Language language)` finds the synchronized song lyrics in the specified language in the ID3v2.3 tag.
    `protected ID3v23Frame` | `getV23SynchronizedLyricsFrame(Language language)` finds the ID3v2.3 synchronized lyrics frame containing in the specified language in the ID3v2.3 tag.
    `protected java.lang.String` | `getV23Text(FrameType frameType)` finds the ID3v2.3 text frame with the specified ID3v2.3 frame type in the ID3v2.3 tag and retrieves the text field from the ID3v2.3 frame.
    `protected int` | `getV23TextAsInteger(FrameType frameType)` gets the text from a text frame and converts it to an integer.
    `protected java.lang.String` | `getV23Title()` finds the ID3v2.3 `FrameType.SONG_TITLE` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected int` | `getV23Track()` finds the ID3v2.3 `FrameType.TRACK_NUMBER` text frame in the ID3v2.3 tag and retrieves the text field.
    `protected java.lang.String` | `getV23UnsynchronizedLyrics(Language language)` finds the unsynchronized song lyrics in the specified language in the ID3v2.3 tag.
    `protected ID3v23Frame` | `getV23UnsynchronizedLyricsFrame(Language language)` finds the ID3v2.3 unsynchronized lyrics frame containing in the specified language in the ID3v2.3 tag.
    `int` | `getV23Year()` finds the ID3v2.3 `FrameType.YEAR` text frame in the ID3v2.3 tag and retrieves the text field.
    `boolean` | `hasV23Errors()` determines if the ID3v2.3 tag had any frame errors when it was read in.
    `protected ID3v23Frame` | `removeV23Album()` removes the ID3v2.3 `FrameType.ALBUM_TITLE` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23AttachedPicture(PictureType pictureType)` removes the ID3v2.3 attached picture frame with the specified picture type from the ID3v2.3 tag.
    `protected java.util.List<AttachedPicture>` | `removeV23AttachedPictures()` removes all ID3v2.3 attached picture frames from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23AudioDuration()` removes the ID3v2.3 `FrameType.LENGTH` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23AudioSize()` removes the ID3v2.3 `FrameType.SIZE` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Band()` removes the ID3v2.3 `FrameType.BAND` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Comments()` removes the english language song comments from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Comments(Language language)` removes the ID3v2.3 song comments written in the specified language from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Disc()` removes the ID3v2.3 `FrameType.PART_OF_A_SET` text frame in the ID3v2.3 tag.
    `ID3v23Frame` | `removeV23Frame(FrameType frameType)` removes the first ID3v2.3 frame with the specified ID3v2.3 frame id from the ID3v2.3 tag.
    `java.util.List<ID3v23Frame>` | `removeV23Frames(FrameType frameType)` removes all the ID3v2.3 frames with the specified ID3v2.3 frame id from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23LeadPerformer()` removes the ID3v2.3 `FrameType.LEAD_PERFORMER` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23LyricsBy()` removes the ID3v2.3 `FrameType.LYRICIST` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23MusicBy()` removes the ID3v2.3 `FrameType.COMPOSER` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23MusicType()` removes the ID3v2.3 `FrameType.CONTENT_TYPE` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Publisher()` removes the ID3v2.3 `FrameType.PUBLISHER` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Rating()` removes the ID3v2.3 `FrameType.POPULARIMETER` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23SynchronizedLyrics(Language language)` removes the ID3v2.3 synchronized lyrics frame written in the specified language from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Title()` removes the ID3v2.3 `FrameType.SONG_TITLE` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Track()` removes the ID3v2.3 `FrameType.TRACK_NUMBER` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23UnsynchronizedLyrics(Language language)` removes the ID3v2.3 unsynchronized lyrics frame written in the specified language from the ID3v2.3 tag.
    `protected ID3v23Frame` | `removeV23Year()` removes the ID3v2.3 `FrameType.YEAR` text frame in the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Album(java.lang.String album)` adds an ID3v2.3 `FrameType.ALBUM_TITLE` text frame with the specified album to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23AttachedPicture(AttachedPicture attachedPicture)` adds an ID3v2.3 attached picture frame with the specified picture type to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23AudioDuration(int duration)` adds an ID3v2.3 `FrameType.LENGTH` text frame with the specified duration to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23AudioSize(int size)` adds an ID3v2.3 `FrameType.SIZE` text frame with the specified size to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Band(java.lang.String band)` adds an ID3v2.3 `FrameType.BAND` text frame with the specified band to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Comments(Language language, java.lang.String comments)` adds an ID3v2.3 comments frame with the comments written in the specified language to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Disc(int disc)` adds an ID3v2.3 `FrameType.PART_OF_A_SET` text frame with the specified size to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23LeadPerformer(java.lang.String leadPerformer)` adds an ID3v2.3 `FrameType.LEAD_PERFORMER` text frame with the specified lead performer to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23LyricsBy(java.lang.String lyricist)` adds an ID3v2.3 `FrameType.LYRICIST` text frame with the specified title to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23MusicBy(java.lang.String composer)` adds an ID3v2.3 `FrameType.COMPOSER` text frame with the specified title to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23MusicType(Genre genre)` adds an ID3v2.3 `FrameType.CONTENT_TYPE` text frame with the specified genre to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23MusicType(java.lang.String genre)` adds an ID3v2.3 `FrameType.CONTENT_TYPE` text frame with the specified genre to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Publisher(java.lang.String publisher)` adds an ID3v2.3 `FrameType.PUBLISHER` text frame with the specified title to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Rating(int rating)` adds an ID3v2.3 `FrameType.POPULARIMETER` frame with the specified rating to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23SynchronizedLyrics(Encoding encoding, Language language, java.util.List<SynchronizedLyric> synchronizedLyrics)` adds an ID3v2.3 synchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23SynchronizedLyrics(Language language, java.util.List<SynchronizedLyric> synchronizedLyrics)` adds an ID3v2.3 synchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23SynchronizedLyrics(java.util.List<SynchronizedLyric> synchronizedLyrics)` adds an ID3v2.3 synchronized lyrics frame with the specified english song lyrics to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Text(Encoding encoding, java.lang.String text, FrameType frameType)` adds an ID3v2.3 text frame with the specified text to the ID3v2.3 tag.
    `ID3v23Frame` | `setV23Text(int n, FrameType frameType)` adds an ID3v2.3 text frame with the string value of the specified integer to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Text(java.lang.String text, FrameType frameType)` adds an ID3v2.3 text frame with the specified text to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Title(java.lang.String title)` adds an ID3v2.3 `FrameType.SONG_TITLE` text frame with the specified title to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Track(int track)` adds an ID3v2.3 `FrameType.TRACK_NUMBER` text frame with the specified size to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23UnsynchronizedLyrics(Language language, java.lang.String lyrics)` adds an ID3v2.3 unsynchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag.
    `protected ID3v23Frame` | `setV23Year(int year)` adds an ID3v2.3 `FrameType.YEAR` text frame with the specified year to the ID3v2.3 tag.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### id3v23Tag

          protected ID3v23Tag id3v23Tag

      ID3v2.3 tag which holds all the information about an .mp3 file

  - ### Constructor Detail

    - #### MP3BaseID3v23

          public MP3BaseID3v23()

  - ### Method Detail

    - #### hasV23Errors

          public boolean hasV23Errors()

      determines if the ID3v2.3 tag had any frame errors when it was read in.
      Returns:
        whether any invalid frames were encountered while reading in the ID3v2.3 tag from the .mp3 file.

    - #### getV23Errors

          public java.util.List<java.lang.String> getV23Errors()

      gets a list of any frame errors encountered while reading in the ID3v2.3 tag.
      Returns:
        a list of the frame errors that occurred while reading in the ID3v2.3 tag. If the ID3v2.3 tag was valid and did not contain any errors, then an empty list is returned.

    - #### getID3v23Tag

          public ID3v23Tag getID3v23Tag()

      gets the ID3v2.3 Tag.
      Returns:
        the ID3v2.3 Tag.

    - #### addV23Frame

          public ID3v23Frame addV23Frame(FrameType frameType)

      add an ID3v2.3 frame of the specified type to the ID3v2.3 tag.
      Parameters:
        `frameType` - type of ID3v2.3 frame to add to the ID3v2.3 tag.
      Returns:
        the new ID3v2.3 frame that was added to the ID3v2.3 tag.

    - #### getV23Frame

          public ID3v23Frame getV23Frame(FrameType frameType)

      finds the first ID3v2.3 frame in the ID3v2.3 tag with the specified ID3v2.3 frame id.
      Parameters:
        `frameType` - type of ID3v2.3 frame to search for.
      Returns:
        the first ID3v2.3 frame with the given ID3v2.3 frame id found in the ID3v2.3 tag, or null if no frame with the specified id can be found.

    - #### getV23Frames

          public java.util.List<ID3v23Frame> getV23Frames(FrameType frameType)

      finds all the ID3v2.3 frames in the ID3v2.3 tag with the specified ID3v2.3 frame id.
      Parameters:
        `frameType` - type of ID3v2.3 frames to retrieve from the ID3v2.3 tag.
      Returns:
        a list of all the ID3v2.3 frames with the given ID3v2.3 frame id that were found in the ID3v2.3 tag, or an empty collection of size 0 if no ID3v2.3 frame with the specified ID3v2.3 id can be found.

    - #### removeV23Frame

          public ID3v23Frame removeV23Frame(FrameType frameType)

      removes the first ID3v2.3 frame with the specified ID3v2.3 frame id from the ID3v2.3 tag.
      Parameters:
        `frameType` - type of type ID3v2.3 frame to remove from the ID3v2.3 tag.
      Returns:
        the ID3v2.3 frame in the ID3v2.3 tag with the given ID3v2.3 frame id that was removed, or null if no ID3v2.3 frame with the specified id was found.

    - #### removeV23Frames

          public java.util.List<ID3v23Frame> removeV23Frames(FrameType frameType)

      removes all the ID3v2.3 frames with the specified ID3v2.3 frame id from the ID3v2.3 tag.
      Parameters:
        `frameType` - type of ID3v2.3 frame to remove from the ID3v2.3 tag.
      Returns:
        a list of all the ID3v2.3 frames with the given ID3v2.3 frame id that were removed from the ID3v2.3 tag, or an empty collection of size 0 if no ID3v2.3 frames with the specified ID3v2.3 id could be found.

    - #### getV23Album

          protected java.lang.String getV23Album()

      finds the ID3v2.3 `FrameType.ALBUM_TITLE` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.ALBUM_TITLE` text frame. If no ID3v2.3 `FrameType.ALBUM_TITLE` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23Album

          protected ID3v23Frame setV23Album(java.lang.String album)

      adds an ID3v2.3 `FrameType.ALBUM_TITLE` text frame with the specified album to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.ALBUM_TITLE` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.ALBUM_TITLE` text frame is added to the ID3v2.3 tag.
      Parameters:
        `album` - the name of the album on which the .mp3 song was released. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.ALBUM_TITLE` text frame that was added/updated.

    - #### removeV23Album

          protected ID3v23Frame removeV23Album()

      removes the ID3v2.3 `FrameType.ALBUM_TITLE` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.ALBUM_TITLE` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.ALBUM_TITLE` text frame, then no frame is removed and null is returned.

    - #### getV23AttachedPicture

          protected AttachedPicture getV23AttachedPicture(PictureType pictureType)

      finds the ID3v2.3 `FrameType.ATTACHED_PICTURE` frame in the ID3v2.3 tag and retrieves the attached picture.
      Parameters:
        `pictureType` - one of the 21 allowable ID3v2.3 picture types.
      Returns:
        the attached picture found in the ID3v2.3 `FrameType.ATTACHED_PICTURE` frame. If no ID3v2.3 `FrameType.ATTACHED_PICTURE` frame is found in the ID3v2.3 tag, then null is returned.

    - #### getV23AttachedPictures

          protected java.util.List<AttachedPicture> getV23AttachedPictures()

      finds all the ID3v2.3 `FrameType.ATTACHED_PICTURE` frames in the ID3v2.3 tag and retrieves the attached picture for each frame.
      Returns:
        the attached pictures found in the ID3v2.3 `FrameType.ATTACHED_PICTURE` frames. If no ID3v2.3 `FrameType.ATTACHED_PICTURE` frames are found in the ID3v2.3 tag, then an empty list is returned.

    - #### getV23AttachedPictureFrame

          protected ID3v23Frame getV23AttachedPictureFrame(PictureType pictureType)

      finds the ID3v2.3 attached picture frame containing the specified picture type in the ID3v2.3 tag.
      Parameters:
        `pictureType` - one of the 21 allowable ID3v2.3 picture types.
      Returns:
        the ID3v2.3 attached picture frame containing the specified picture type. If no ID3v2.3 attached picture frame with the specified picture type was found in the ID3v2.3 tag, then null is returned.

    - #### setV23AttachedPicture

          protected ID3v23Frame setV23AttachedPicture(AttachedPicture attachedPicture)

      adds an ID3v2.3 attached picture frame with the specified picture type to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 attached picture frame with the specified picture type, then the existing frame's attached picture is simply updated with the new picture. Otherwise, a new ID3v2.3 attached picture frame is added to the ID3v2.3 tag.
      Parameters:
        `attachedPicture` - an attached picture containing the information about the image to be added to the ID3V2.3 tag.
      Returns:
        the ID3v2.3 attached picture frame that was added/updated.

    - #### removeV23AttachedPicture

          protected ID3v23Frame removeV23AttachedPicture(PictureType pictureType)

      removes the ID3v2.3 attached picture frame with the specified picture type from the ID3v2.3 tag.
      Parameters:
        `pictureType` - one of the 21 valid ID3v2.3 picture types.
      Returns:
        the ID3v2.3 attached picture frame with the specified picture type that was removed from the ID3v2.3 tag. If the ID3v2.3 tag does not contain an ID3v2.3 attached picture frame with the specified picture type, then null is returned.

    - #### removeV23AttachedPictures

          protected java.util.List<AttachedPicture> removeV23AttachedPictures()

      removes all ID3v2.3 attached picture frames from the ID3v2.3 tag.
      Returns:
        the list of ID3v2.3 attached pictures that were removed from the ID3v2.3 tag. If the ID3v2.3 tag does not contain any ID3v2.3 attached picture frames, then an empty list is returned.

    - #### getV23AudioDuration

          public int getV23AudioDuration()

      finds the ID3v2.3 `FrameType.LENGTH` text frame in the ID3v2.3 tag and retrieves the text field. The text field is then converted to an integer and returned.
      Returns:
        the text field found in the ID3v2.3 `FrameType.LENGTH` text frame. If no ID3v2.3 `FrameType.LENGTH` text frame is found in the ID3v2.3 tag, or if the text field is not a valid integer, then 0 is returned.

    - #### setV23AudioDuration

          protected ID3v23Frame setV23AudioDuration(int duration)
                                             throws java.lang.IllegalArgumentException

      adds an ID3v2.3 `FrameType.LENGTH` text frame with the specified duration to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.LENGTH` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.LENGTH` text frame is added to the ID3v2.3 tag.
      Parameters:
        `duration` - the duration (in seconds) of the song in the .mp3 file.
      Returns:
        the ID3v2.3 `FrameType.LENGTH` text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the duration is less than 0.

    - #### removeV23AudioDuration

          protected ID3v23Frame removeV23AudioDuration()

      removes the ID3v2.3 `FrameType.LENGTH` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.LENGTH` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.LENGTH` text frame, then no frame is removed and null is returned.

    - #### getV23AudioSize

          protected int getV23AudioSize()

      finds the ID3v2.3 `FrameType.SIZE` text frame in the ID3v2.3 tag and retrieves the text field. The text field is then converted to an integer and returned.
      Returns:
        the text field found in the ID3v2.3 `FrameType.SIZE` text frame. If no ID3v2.3 `FrameType.SIZE` text frame is found in the ID3v2.3 tag, or if the text field is not a valid integer, then 0 is returned.

    - #### setV23AudioSize

          protected ID3v23Frame setV23AudioSize(int size)
                                         throws java.lang.IllegalArgumentException

      adds an ID3v2.3 `FrameType.SIZE` text frame with the specified size to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.SIZE` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.SIZE` text frame is added to the ID3v2.3 tag.
      Parameters:
        `size` - the size (in bytes) of the audio portion of the .mp3 file.
      Returns:
        the ID3v2.3 `FrameType.SIZE` text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the size is less than 1.

    - #### removeV23AudioSize

          protected ID3v23Frame removeV23AudioSize()

      removes the ID3v2.3 `FrameType.SIZE` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.SIZE` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.SIZE` text frame, then no frame is removed and null is returned.

    - #### getV23Band

          protected java.lang.String getV23Band()

      finds the ID3v2.3 `FrameType.BAND` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.BAND` text frame. If no ID3v2.3 `FrameType.BAND` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23Band

          protected ID3v23Frame setV23Band(java.lang.String band)

      adds an ID3v2.3 `FrameType.BAND` text frame with the specified band to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.BAND` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.BAND` text frame is added to the ID3v2.3 tag.
      Parameters:
        `band` - the name of the band who recorded the song. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.BAND` text frame that was added/updated.

    - #### removeV23Band

          protected ID3v23Frame removeV23Band()

      removes the ID3v2.3 `FrameType.BAND` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.BAND` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.BAND` text frame, then no frame is removed and null is returned.

    - #### getV23Comments

          protected java.lang.String getV23Comments(Language language)
                                             throws java.lang.IllegalArgumentException

      finds the song comments written in the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song comments are written in.
      Returns:
        the song comments written in the specified language. If no song comments written in the specified language could be found in the ID3v2.3 tag, then null is returned.
      Throws:
        `java.lang.IllegalArgumentException`

    - #### getV23CommentsFrame

          protected ID3v23Frame getV23CommentsFrame(Language language)

      finds the ID3v2.3 comments frame with the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song comments are written in.
      Returns:
        the ID3v2.3 comments frame containing with the specified language. If no ID3v2.3 comments frame written in the specified language were found in the ID3v2.3 tag, then null is returned.

    - #### setV23Comments

          protected ID3v23Frame setV23Comments(Language language,
                                   java.lang.String comments)
                                        throws java.lang.IllegalArgumentException

      adds an ID3v2.3 comments frame with the comments written in the specified language to the ID3v2.3 tag. The comments are encoded as a UTF-16 string in the ID3v2.3 comments frame. If the ID3v2.3 tag already contains an ID3v2.3 comments frame with the specified language, then this frame's comments are simply updated with the new one. Otherwise, a new ID3v2.3 comments frame is added to the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song comments are written in.
        `comments` - the comments about the song.
      Returns:
        the ID3v2.3 comments frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - if the comments are empty or contain only whitespace.

    - #### removeV23Comments

          protected ID3v23Frame removeV23Comments()
                                           throws java.lang.IllegalStateException

      removes the english language song comments from the ID3v2.3 tag.
      Returns:
        the ID3v2.3 comments frame that was removed from the ID3v2.3 tag. If the ID3v2.3 tag does not an english language ID3v2.3 comments frame, then null is returned.
      Throws:
        `java.lang.IllegalStateException`

    - #### removeV23Comments

          protected ID3v23Frame removeV23Comments(Language language)
                                           throws java.lang.IllegalArgumentException

      removes the ID3v2.3 song comments written in the specified language from the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song comments are written in.
      Returns:
        the ID3v2.3 comments frame that was removed from the ID3v2.3 tag. If the ID3v2.3 tag does not contain an ID3v2.3 comments frame with the specified language, then null is returned.
      Throws:
        `java.lang.IllegalArgumentException`

    - #### getV23Disc

          protected int getV23Disc()

      finds the ID3v2.3 `FrameType.PART_OF_A_SET` text frame in the ID3v2.3 tag and retrieves the text field. The text field is then converted to an integer and returned.
      Returns:
        the text field found in the ID3v2.3 `FrameType.PART_OF_A_SET` text frame. If no ID3v2.3 `FrameType.PART_OF_A_SET` text frame is found in the ID3v2.3 tag, or if the text field is not a valid integer, then 0 is returned.

    - #### setV23Disc

          protected ID3v23Frame setV23Disc(int disc)
                                    throws java.lang.IllegalArgumentException

      adds an ID3v2.3 `FrameType.PART_OF_A_SET` text frame with the specified size to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.PART_OF_A_SET` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.PART_OF_A_SET` text frame is added to the ID3v2.3 tag.
      Parameters:
        `disc` - the disc number of the cd on which the song was released. It must be >= 1.
      Returns:
        the ID3v2.3 `FrameType.PART_OF_A_SET` text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the disc number is less than 1.

    - #### removeV23Disc

          protected ID3v23Frame removeV23Disc()

      removes the ID3v2.3 `FrameType.PART_OF_A_SET` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.PART_OF_A_SET` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.PART_OF_A_SET` text frame, then no frame is removed and null is returned.

    - #### getV23LeadPerformer

          protected java.lang.String getV23LeadPerformer()

    - #### setV23LeadPerformer

          protected ID3v23Frame setV23LeadPerformer(java.lang.String leadPerformer)

      adds an ID3v2.3 `FrameType.LEAD_PERFORMER` text frame with the specified lead performer to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.LEAD_PERFORMER` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.LEAD_PERFORMER` text frame is added to the ID3v2.3 tag. On Windows machines, this field is called "Contributing Artist".
      Parameters:
        `leadPerformer` - the name of the lead performer on which the .mp3 song was released. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.LEAD_PERFORMER` text frame that was added/updated.

    - #### removeV23LeadPerformer

          protected ID3v23Frame removeV23LeadPerformer()

      removes the ID3v2.3 `FrameType.LEAD_PERFORMER` text frame in the ID3v2.3 tag. On Windows machines, this field is called "Contributing Artist".
      Returns:
        the ID3v2.3 `FrameType.LEAD_PERFORMER` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.LEAD_PERFORMER` text frame, then no frame is removed and null is returned.

    - #### getV23LyricsBy

          protected java.lang.String getV23LyricsBy()

      finds the ID3v2.3 `FrameType.LYRICIST` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.LYRICIST` text frame. If no ID3v2.3 `FrameType.LYRICIST` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23LyricsBy

          protected ID3v23Frame setV23LyricsBy(java.lang.String lyricist)

      adds an ID3v2.3 `FrameType.LYRICIST` text frame with the specified title to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.LYRICIST` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.LYRICIST` text frame is added to the ID3v2.3 tag.
      Parameters:
        `lyricist` - the person(s) who wrote the lyrics to the song. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.LYRICIST` text frame that was added/updated.

    - #### removeV23LyricsBy

          protected ID3v23Frame removeV23LyricsBy()

      removes the ID3v2.3 `FrameType.LYRICIST` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.LYRICIST` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.LYRICIST` text frame, then no frame is removed and null is returned.

    - #### getV23MusicBy

          protected java.lang.String getV23MusicBy()

      finds the ID3v2.3 `FrameType.COMPOSER` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.COMPOSER` text frame. If no ID3v2.3 `FrameType.COMPOSER` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23MusicBy

          protected ID3v23Frame setV23MusicBy(java.lang.String composer)

      adds an ID3v2.3 `FrameType.COMPOSER` text frame with the specified title to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.COMPOSER` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.COMPOSER` text frame is added to the ID3v2.3 tag.
      Parameters:
        `composer` - the person(s) who wrote the music to the song. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.COMPOSER` text frame that was added/updated.

    - #### removeV23MusicBy

          protected ID3v23Frame removeV23MusicBy()

      removes the ID3v2.3 `FrameType.COMPOSER` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.COMPOSER` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.COMPOSER` text frame, then no frame is removed and null is returned.

    - #### getV23MusicType

          protected java.lang.String getV23MusicType()

      finds the ID3v2.3 `FrameType.CONTENT_TYPE` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.CONTENT_TYPE` text frame. If no ID3v2.3 `FrameType.CONTENT_TYPE` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23MusicType

          protected ID3v23Frame setV23MusicType(Genre genre)

      adds an ID3v2.3 `FrameType.CONTENT_TYPE` text frame with the specified genre to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.CONTENT_TYPE` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.CONTENT_TYPE` text frame is added to the ID3v2.3 tag.
      Parameters:
        `genre` - the song's music type. That is, the type of music the song would be described as. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.CONTENT_TYPE` text frame that was added/updated.

    - #### setV23MusicType

          protected ID3v23Frame setV23MusicType(java.lang.String genre)

      adds an ID3v2.3 `FrameType.CONTENT_TYPE` text frame with the specified genre to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.CONTENT_TYPE` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.CONTENT_TYPE` text frame is added to the ID3v2.3 tag.
      Parameters:
        `genre` - the song's music type. That is, the type of music the song would be described as. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.CONTENT_TYPE` text frame that was added/updated.

    - #### removeV23MusicType

          protected ID3v23Frame removeV23MusicType()

      removes the ID3v2.3 `FrameType.CONTENT_TYPE` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.CONTENT_TYPE` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.CONTENT_TYPE` text frame, then no frame is removed and null is returned.

    - #### getV23Publisher

          protected java.lang.String getV23Publisher()

      finds the ID3v2.3 `FrameType.PUBLISHER` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.PUBLISHER` text frame. If no ID3v2.3 `FrameType.PUBLISHER` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23Publisher

          protected ID3v23Frame setV23Publisher(java.lang.String publisher)

      adds an ID3v2.3 `FrameType.PUBLISHER` text frame with the specified title to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.PUBLISHER` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.PUBLISHER` text frame is added to the ID3v2.3 tag.
      Parameters:
        `publisher` - the publisher of the song. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.PUBLISHER` text frame that was added/updated.

    - #### removeV23Publisher

          protected ID3v23Frame removeV23Publisher()

      removes the ID3v2.3 `FrameType.PUBLISHER` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.PUBLISHER` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.PUBLISHER` text frame, then no frame is removed and null is returned.

    - #### getV23Rating

          protected int getV23Rating()

      finds the ID3v2.3 `FrameType.POPULARIMETER` frame in the ID3v2.3 tag and retrieves the rating field.
      Returns:
        the rating field found in the ID3v2.3 `FrameType.POPULARIMETER` frame. If no ID3v2.3 `FrameType.POPULARIMETER` frame is found in the ID3v2.3 tag, then 0 is returned.

    - #### setV23Rating

          protected ID3v23Frame setV23Rating(int rating)

      adds an ID3v2.3 `FrameType.POPULARIMETER` frame with the specified rating to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.POPULARIMETER` frame, then the existing frame's rating is simply updated. Otherwise, a new ID3v2.3 `FrameType.POPULARIMETER` frame is added to the ID3v2.3 tag.
      Parameters:
        `rating` - the rating of the song. The rating is 1-255 where 1 is worst and 255 is best. 0 is unknown, or unrated.
      Returns:
        the ID3v2.3 `FrameType.POPULARIMETER` frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the rating is less than 0 or greater than 255.

    - #### removeV23Rating

          protected ID3v23Frame removeV23Rating()

      removes the ID3v2.3 `FrameType.POPULARIMETER` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.POPULARIMETER` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.POPULARIMETER` text frame, then no frame is removed and null is returned.

    - #### getV23SynchronizedLyrics

          protected java.util.List<SynchronizedLyric> getV23SynchronizedLyrics(Language language)

      finds the synchronized song lyrics in the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song lyrics are written in.
      Returns:
        the list of the synchronized song lyrics in the specified language. If no synchronized song lyrics in the specified language were found in the ID3v2.3 tag, then null is returned.

    - #### getV23SynchronizedLyricsFrame

          protected ID3v23Frame getV23SynchronizedLyricsFrame(Language language)

      finds the ID3v2.3 synchronized lyrics frame containing in the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the synchronized song lyrics are written in.
      Returns:
        the ID3v2.3 synchronized lyrics frame written in the specified language. If no ID3v2.3 synchronized lyrics frame written in the specified language was found in the ID3v2.3 tag, then null is returned.

    - #### setV23SynchronizedLyrics

          protected ID3v23Frame setV23SynchronizedLyrics(java.util.List<SynchronizedLyric> synchronizedLyrics)

      adds an ID3v2.3 synchronized lyrics frame with the specified english song lyrics to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 synchronized lyrics frame with the lyrics in english, then this frame's synchronized lyrics are simply updated with the new lyrics. Otherwise, a new ID3v2.3 synchronized lyrics frame is added to the ID3v2.3 tag.
      Parameters:
        `synchronizedLyrics` - the synchronized (english) lyrics to the song. The lyrics are encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 synchronized lyrics frame that was added/updated.

    - #### setV23SynchronizedLyrics

          protected ID3v23Frame setV23SynchronizedLyrics(Language language,
                                             java.util.List<SynchronizedLyric> synchronizedLyrics)
                                                  throws java.lang.IllegalArgumentException

      adds an ID3v2.3 synchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 synchronized lyrics frame with the lyrics in the specified language, then the existing frame's synchronized lyrics are simply updated with the new lyrics. Otherwise, a new ID3v2.3 synchronized lyrics frame is added to the ID3v2.3 tag. The UTF-16 character set used to encode the lyrics.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song lyrics are written in.
        `synchronizedLyrics` - a list of synchronized lyrics to the song. The lyrics must be in chronological order.
      Returns:
        the ID3v2.3 synchronized lyrics frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - if the synchronized lyrics are not sorted in ascending chronological order.

    - #### setV23SynchronizedLyrics

          protected ID3v23Frame setV23SynchronizedLyrics(Encoding encoding,
                                             Language language,
                                             java.util.List<SynchronizedLyric> synchronizedLyrics)
                                                  throws java.lang.IllegalArgumentException

      adds an ID3v2.3 synchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 synchronized lyrics frame with the lyrics in the specified language, then this frame's synchronized lyrics are simply updated with the new lyrics. Otherwise, a new ID3v2.3 synchronized lyrics frame is added to the ID3v2.3 tag.
      Parameters:
        `encoding` - the character set used to encode the lyrics. Only ISO 8859-1 and UTF-16 are allowed.
        `language` - the ISO-639-2 language code of the language the song lyrics are written in.
        `synchronizedLyrics` - a list of synchronized lyrics to the song. The lyrics must be in chronological order.
      Returns:
        the ID3v2.3 synchronized lyrics frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - if the synchronized lyrics are not sorted in ascending chronological order.

    - #### removeV23SynchronizedLyrics

          protected ID3v23Frame removeV23SynchronizedLyrics(Language language)

      removes the ID3v2.3 synchronized lyrics frame written in the specified language from the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the synchronized song lyrics are written in.
      Returns:
        the ID3v2.3 synchronized lyrics frame written in the specified language that was removed from the ID3v2.3 tag. If the ID3v2.3 tag does not contain an ID3v2.3 synchronized lyrics frame in the specified language, then null is returned.

    - #### getV23Text

          protected java.lang.String getV23Text(FrameType frameType)

      finds the ID3v2.3 text frame with the specified ID3v2.3 frame type in the ID3v2.3 tag and retrieves the text field from the ID3v2.3 frame.
      Parameters:
        `frameType` - one of the ID3v2.3 text frame types.
      Returns:
        the text field found in the ID3v2.3 text frame specified by the ID3v2.3 frame type. If no ID3v2.3 text frame with the specified frame type was found in the ID3v2.3 tag, then null is returned.

    - #### getV23TextAsInteger

          protected int getV23TextAsInteger(FrameType frameType)

      gets the text from a text frame and converts it to an integer.
      Parameters:
        `frameType` - ID3v2.3 text frame type.
      Returns:
        the text of a text frame as an integer. If no number has been specified or if the number is less <= 0, then 0 is returned.

    - #### setV23Text

          protected ID3v23Frame setV23Text(java.lang.String text,
                               FrameType frameType)

      adds an ID3v2.3 text frame with the specified text to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 text frame with the specified frame type, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 text frame with the specified frame type is added to the ID3v2.3 tag.
      Parameters:
        `text` - the text to be added to the ID3v2.3 tag. The text is encoded using the UTF-16 character set.
        `frameType` - the type of ID3v2.3 text frame to add.
      Returns:
        the ID3v2.3 text frame that was added/updated.

    - #### setV23Text

          public ID3v23Frame setV23Text(int n,
                               FrameType frameType)
                                 throws java.lang.IllegalArgumentException

      adds an ID3v2.3 text frame with the string value of the specified integer to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 text frame with the specified frame type, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 text frame with the specified frame type is added to the ID3v2.3 tag. The specified integer is converted to a string which is then stored in the text frame in the ID3v2.3 tag.
      Parameters:
        `n` - the integer whose value will be converted to a string and stored in a text frame in the ID3v2.3 tag. The text is encoded using the ISO 8859-1 character set.
        `frameType` - the type of ID3v2.3 text frame to add.
      Returns:
        the ID3v2.3 text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the number n is <= 0.

    - #### setV23Text

          protected ID3v23Frame setV23Text(Encoding encoding,
                               java.lang.String text,
                               FrameType frameType)

      adds an ID3v2.3 text frame with the specified text to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 text frame with the specified frame type, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 text frame with the specified frame type is added to the ID3v2.3 tag.
      Parameters:
        `encoding` - the character set used to encode the text. Only ISO 8859-1 and UTF-16 are allowed.
        `text` - the text to be added to the ID3v2.3 tag.
        `frameType` - the type of ID3v2.3 text frame to add.
      Returns:
        the ID3v2.3 text frame that was added/updated.

    - #### getV23Title

          protected java.lang.String getV23Title()

      finds the ID3v2.3 `FrameType.SONG_TITLE` text frame in the ID3v2.3 tag and retrieves the text field.
      Returns:
        the text field found in the ID3v2.3 `FrameType.SONG_TITLE` text frame. If no ID3v2.3 `FrameType.SONG_TITLE` text frame is found in the ID3v2.3 tag, then null is returned.

    - #### setV23Title

          protected ID3v23Frame setV23Title(java.lang.String title)

      adds an ID3v2.3 `FrameType.SONG_TITLE` text frame with the specified title to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.SONG_TITLE` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.SONG_TITLE` text frame is added to the ID3v2.3 tag.
      Parameters:
        `title` - the name of the .mp3 song. The text is encoded using the UTF-16 character set.
      Returns:
        the ID3v2.3 `FrameType.SONG_TITLE` text frame that was added/updated.

    - #### removeV23Title

          protected ID3v23Frame removeV23Title()

      removes the ID3v2.3 `FrameType.SONG_TITLE` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.SONG_TITLE` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.SONG_TITLE` text frame, then no frame is removed and null is returned.

    - #### getV23Track

          protected int getV23Track()

      finds the ID3v2.3 `FrameType.TRACK_NUMBER` text frame in the ID3v2.3 tag and retrieves the text field. The text field is then converted to an integer and returned.
      Returns:
        the text field found in the ID3v2.3 `FrameType.TRACK_NUMBER` text frame. If no ID3v2.3 `FrameType.TRACK_NUMBER` text frame is found in the ID3v2.3 tag, or if the text field is not a valid integer, then 0 is returned.

    - #### setV23Track

          protected ID3v23Frame setV23Track(int track)
                                     throws java.lang.IllegalArgumentException

      adds an ID3v2.3 `FrameType.TRACK_NUMBER` text frame with the specified size to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.TRACK_NUMBER` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.TRACK_NUMBER` text frame is added to the ID3v2.3 tag.
      Parameters:
        `track` - the track number of the song. It must be >= 1.
      Returns:
        the ID3v2.3 `FrameType.TRACK_NUMBER` text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the track is less than 1.

    - #### removeV23Track

          protected ID3v23Frame removeV23Track()

      removes the ID3v2.3 `FrameType.TRACK_NUMBER` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.TRACK_NUMBER` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.TRACK_NUMBER` text frame, then no frame is removed and null is returned.

    - #### getV23UnsynchronizedLyrics

          protected java.lang.String getV23UnsynchronizedLyrics(Language language)

      finds the unsynchronized song lyrics in the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song lyrics are written in.
      Returns:
        the list of the unsynchronized song lyrics in the specified language. If no unsynchronized song lyrics in the specified language were found in the ID3v2.3 tag, then null is returned.

    - #### getV23UnsynchronizedLyricsFrame

          protected ID3v23Frame getV23UnsynchronizedLyricsFrame(Language language)

      finds the ID3v2.3 unsynchronized lyrics frame containing in the specified language in the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the unsynchronized song lyrics are written in.
      Returns:
        the ID3v2.3 unsynchronized lyrics frame written in the specified language. If no ID3v2.3 unsynchronized lyrics frame written in the specified language was found in the ID3v2.3 tag, then null is returned.

    - #### setV23UnsynchronizedLyrics

          protected ID3v23Frame setV23UnsynchronizedLyrics(Language language,
                                               java.lang.String lyrics)

      adds an ID3v2.3 unsynchronized lyrics frame with the specified song lyrics written in the given language to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 unsynchronized lyrics frame with the lyrics in the specified language, then the existing frame's unsynchronized lyrics are simply updated with the new lyrics. Otherwise, a new ID3v2.3 unsynchronized lyrics frame is added to the ID3v2.3 tag. The lyrics are encoded with the UTF-16 character set.
      Parameters:
        `language` - the ISO-639-2 language code of the language the song lyrics are written in.
        `lyrics` - the unsynchronized lyrics to the song.
      Returns:
        the ID3v2.3 synchronized lyrics frame that was added/updated.

    - #### removeV23UnsynchronizedLyrics

          protected ID3v23Frame removeV23UnsynchronizedLyrics(Language language)

      removes the ID3v2.3 unsynchronized lyrics frame written in the specified language from the ID3v2.3 tag.
      Parameters:
        `language` - the ISO-639-2 language code of the language the unsynchronized song lyrics are written in.
      Returns:
        the ID3v2.3 unsynchronized lyrics frame written in the specified language that was removed from the ID3v2.3 tag. If the ID3v2.3 tag does not contain an ID3v2.3 unsynchronized lyrics frame in the specified language, then null is returned.

    - #### getV23Year

          public int getV23Year()

      finds the ID3v2.3 `FrameType.YEAR` text frame in the ID3v2.3 tag and retrieves the text field. The text field is then converted to an integer and returned.
      Returns:
        the text field found in the ID3v2.3 `FrameType.YEAR` text frame. If no ID3v2.3 `FrameType.YEAR` text frame is found in the ID3v2.3 tag, or if the text field is not a valid integer, then 0 is returned.

    - #### setV23Year

          protected ID3v23Frame setV23Year(int year)
                                    throws java.lang.IllegalArgumentException

      adds an ID3v2.3 `FrameType.YEAR` text frame with the specified year to the ID3v2.3 tag. If the ID3v2.3 tag already contains an ID3v2.3 `FrameType.YEAR` text frame, then the existing frame's text is simply updated. Otherwise, a new ID3v2.3 `FrameType.YEAR` text frame is added to the ID3v2.3 tag.
      Parameters:
        `year` - the year the song was recorded. It must be >= 1.
      Returns:
        the ID3v2.3 `FrameType.YEAR` text frame that was added/updated.
      Throws:
        `java.lang.IllegalArgumentException` - If the year is less than 0.

    - #### removeV23Year

          protected ID3v23Frame removeV23Year()

      removes the ID3v2.3 `FrameType.YEAR` text frame in the ID3v2.3 tag.
      Returns:
        the ID3v2.3 `FrameType.YEAR` text frame that was removed. If the ID3v2.3 tag does not contain an ID3v2.3 `FrameType.YEAR` text frame, then no frame is removed and null is returned.