com.beaglebuddy.mp3

## Class MP3Base

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

- Direct Known Subclasses:
    MP3

      public class MP3Base
      extends MP3BaseID3v24

  This base class provides some underlying methods that help make the derived MP3 class's interface much cleaner and easier to understand. Thus, this class provides lower level methods that are used by the MP3 class, but would otherwise clutter the MP3 class's public interface.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected long` | `audioSize` size (in bytes) of the audio portion of the .mp3 file.
    `protected long` | `fileSize` size (in bytes) of the .mp3 file.
    `protected java.io.File` | `mp3File` if the mp3 file is loaded from a local file, then this data member will contain the path to the .mp3 file.
    `protected java.net.URL` | `mp3Url` if the mp3 file is loaded from a URL, then this data member will contain the URL to the .mp3 file.
    `protected long` | `tagSize` size (in bytes) of the ID3v2.x tag.

    - ### Fields inherited from class com.beaglebuddy.mp3.MP3BaseID3v24

      `id3v24Tag`

    - ### Fields inherited from class com.beaglebuddy.mp3.MP3BaseID3v23

      `id3v23Tag`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MP3Base(java.io.File mp3File)` constructor.
    `MP3Base(java.lang.String mp3File)` constructor.
    `MP3Base(java.net.URL mp3Url)` constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `displayErrors(java.io.PrintStream printStream)` displays any errors found while reading in the ID3v2.x tag from the .mp3 file.
    `java.util.List<java.lang.String>` | `getErrors()` gets a list of any errors encountered while reading in the ID3v2.x tag.
    `long` | `getFileSize()` returns the size (in bytes) of the .mp3 file.
    `java.lang.String` | `getPath()` gets the path to the .mp3 file.
    `protected java.lang.String` | `getReadOnlyErrorMessage()` gets the read only error message to display to users when they try to modify an .mp3 file loaded from a URL.
    `boolean` | `hasErrors()` determines if the mp3 file had any errors in the information stored in the frames of the ID3v2.x tag when it was read in.
    `boolean` | `hasID3v1Tag()` determines whether the .mp3 file has an ID3v1 tag at the end of the .mp3 file.
    `protected void` | `readID3Tag(java.io.InputStream inputStream)` reads in the ID3v2.x tag from the .mp3 file.
    `void` | `removeID3v1Tag()` remove the ID3v1 tag at the end of the .mp3 file.
    `protected void` | `saveID3v23()` save the ID3v2.3 tag to the .mp3 file.
    `protected void` | `saveID3v24()` save the ID3v2.4 tag to the .mp3 file.
    `java.lang.String` | `toString()`

    - ### Methods inherited from class com.beaglebuddy.mp3.MP3BaseID3v24

      `addV24Frame, getID3v24Tag, getV24Album, getV24AttachedPicture, getV24AttachedPictureFrame, getV24AttachedPictures, getV24AudioDuration, getV24AudioSize, getV24Band, getV24Comments, getV24CommentsFrame, getV24Errors, getV24Frame, getV24Frames, getV24LeadPerformer, getV24LyricsBy, getV24MusicBy, getV24MusicType, getV24Publisher, getV24Rating, getV24SynchronizedLyrics, getV24SynchronizedLyricsFrame, getV24Text, getV24TextAsInteger, getV24Title, getV24Track, getV24UnsynchronizedLyrics, getV24UnsynchronizedLyricsFrame, getV24Year, hasV24Errors, removeV24Album, removeV24AttachedPicture, removeV24AttachedPictures, removeV24AudioDuration, removeV24AudioSize, removeV24Band, removeV24Comments, removeV24Comments, removeV24Frame, removeV24Frames, removeV24LeadPerformer, removeV24LyricsBy, removeV24MusicBy, removeV24MusicType, removeV24Publisher, removeV24Rating, removeV24SynchronizedLyrics, removeV24Title, removeV24Track, removeV24UnsynchronizedLyrics, removeV24Year, setV24Album, setV24AttachedPicture, setV24AudioDuration, setV24AudioSize, setV24Band, setV24Comments, setV24LeadPerformer, setV24LyricsBy, setV24MusicBy, setV24MusicType, setV24MusicType, setV24Publisher, setV24Rating, setV24SynchronizedLyrics, setV24SynchronizedLyrics, setV24SynchronizedLyrics, setV24Text, setV24Text, setV24Text, setV24Title, setV24Track, setV24UnsynchronizedLyrics, setV24UnsynchronizedLyrics, setV24Year`

    - ### Methods inherited from class com.beaglebuddy.mp3.MP3BaseID3v23

      `addV23Frame, getID3v23Tag, getV23Album, getV23AttachedPicture, getV23AttachedPictureFrame, getV23AttachedPictures, getV23AudioDuration, getV23AudioSize, getV23Band, getV23Comments, getV23CommentsFrame, getV23Errors, getV23Frame, getV23Frames, getV23LeadPerformer, getV23LyricsBy, getV23MusicBy, getV23MusicType, getV23Publisher, getV23Rating, getV23SynchronizedLyrics, getV23SynchronizedLyricsFrame, getV23Text, getV23TextAsInteger, getV23Title, getV23Track, getV23UnsynchronizedLyrics, getV23UnsynchronizedLyricsFrame, getV23Year, hasV23Errors, removeV23Album, removeV23AttachedPicture, removeV23AttachedPictures, removeV23AudioDuration, removeV23AudioSize, removeV23Band, removeV23Comments, removeV23Comments, removeV23Frame, removeV23Frames, removeV23LeadPerformer, removeV23LyricsBy, removeV23MusicBy, removeV23MusicType, removeV23Publisher, removeV23Rating, removeV23SynchronizedLyrics, removeV23Title, removeV23Track, removeV23UnsynchronizedLyrics, removeV23Year, setV23Album, setV23AttachedPicture, setV23AudioDuration, setV23AudioSize, setV23Band, setV23Comments, setV23LeadPerformer, setV23LyricsBy, setV23MusicBy, setV23MusicType, setV23MusicType, setV23Publisher, setV23Rating, setV23SynchronizedLyrics, setV23SynchronizedLyrics, setV23SynchronizedLyrics, setV23Text, setV23Text, setV23Text, setV23Title, setV23Track, setV23UnsynchronizedLyrics, setV23UnsynchronizedLyrics, setV23Year`

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

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

- - ### Field Detail

    - #### mp3File

          protected java.io.File mp3File

      if the mp3 file is loaded from a local file, then this data member will contain the path to the .mp3 file. Otherwise, this data member will be null.

    - #### mp3Url

          protected java.net.URL mp3Url

      if the mp3 file is loaded from a URL, then this data member will contain the URL to the .mp3 file. Otherwise, this data member will be null.

    - #### fileSize

          protected long fileSize

      size (in bytes) of the .mp3 file.

    - #### tagSize

          protected long tagSize

      size (in bytes) of the ID3v2.x tag.

    - #### audioSize

          protected long audioSize

      size (in bytes) of the audio portion of the .mp3 file. That is, the number of bytes comprising the actual sound data for the song.

  - ### Constructor Detail

    - #### MP3Base

          public MP3Base(java.lang.String mp3File)
                  throws java.io.IOException

      constructor.
      Parameters:
        `mp3File` - path to the .mp3 file from which to get information.
      Throws:
        `java.io.IOException` - if there is a problem reading the .mp3 file.

    - #### MP3Base

          public MP3Base(java.io.File mp3File)
                  throws java.io.IOException

      constructor.
      Parameters:
        `mp3File` - .mp3 file from which to get information.
      Throws:
        `java.io.IOException` - if there is a problem reading the .mp3 file.

    - #### MP3Base

          public MP3Base(java.net.URL mp3Url)
                  throws java.io.IOException

      constructor.
      Parameters:
        `mp3Url` - URL of an .mp3 file from which to get information.
      Throws:
        `java.io.IOException` - if there is a problem reading the .mp3 file.

  - ### Method Detail

    - #### readID3Tag

          protected void readID3Tag(java.io.InputStream inputStream)
                             throws java.io.IOException

      reads in the ID3v2.x tag from the .mp3 file. If the .mp3 file does not have an ID3v2.x tag, then an ID3v1 tag is searched for, and if found, values from it are used to create an ID3v2.3 tag.
      Parameters:
        `inputStream` - input stream pointing to the beginning of an .mp3 file
      Throws:
        `java.io.IOException` - if there is a problem reading the .mp3 file.

    - #### hasErrors

          public boolean hasErrors()

      determines if the mp3 file had any errors in the information stored in the frames of the ID3v2.x tag when it was read in. If any of the frames were invalid, then they are removed from the ID3v2.x tag.
      Returns:
        whether any invalid frames were encountered while reading in the ID3v2.x tag from the .mp3 file.

    - #### getErrors

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

      gets a list of any errors encountered while reading in the ID3v2.x tag.
      Returns:
        a list of errors that occurred while reading in the ID3v2.x tag.

    - #### displayErrors

          public void displayErrors(java.io.PrintStream printStream)

      displays any errors found while reading in the ID3v2.x tag from the .mp3 file. If no errors were found, then nothing is written to the print stream.
      Parameters:
        `printStream` - print stream used to write out the errors.

    - #### getReadOnlyErrorMessage

          protected java.lang.String getReadOnlyErrorMessage()

      gets the read only error message to display to users when they try to modify an .mp3 file loaded from a URL.
      Returns:
        the read only error message to display to users when they try to modify an .mp3 file loaded from a URL.

    - #### getPath

          public java.lang.String getPath()

      gets the path to the .mp3 file.
      Example:`

               // load the song "Take Hold of the Flame" from Queensryche's album, "The Warning".
               MP3 mp3 = new MP3("c:/mp3/queensryche/the warning/take hold of the flame.mp3");
               System.out.println("the mp3 file was loaded from " + mp3.getPath());

               // load the song "Take Hold of the Flame" from Queensryche's album, "The Warning".
               MP3 mp3 = new MP3("http://www.beaglebuddy.com/mp3/queensryche/the warning/take hold of the flame.mp3");
               System.out.println("the mp3 file was loaded from " + mp3.getPath());

      `
      Returns:
        the path to the .mp3 file.

    - #### getFileSize

          public long getFileSize()

      returns the size (in bytes) of the .mp3 file.
      Returns:
        the size (in bytes) of the .mp3 file.

    - #### hasID3v1Tag

          public boolean hasID3v1Tag()
                              throws java.io.IOException,
                                     java.lang.IllegalStateException

      determines whether the .mp3 file has an ID3v1 tag at the end of the .mp3 file.
      Returns:
        whether the .mp3 file has an ID3v1 tag at the end of the .mp3 file.
      Throws:
        `java.io.IOException` - if there is a problem reading the .mp3 file.
        `java.lang.IllegalStateException` - if the mp3 song was loaded from a URL and therefore will take a considerable amount of time to reach the ID3v1 tag at the end of the .mp3 file.

    - #### removeID3v1Tag

          public void removeID3v1Tag()
                              throws java.io.IOException

      remove the ID3v1 tag at the end of the .mp3 file.
      Throws:
        `java.io.IOException` - if there was an error truncating ID3v1 tag from the end of the .mp3 file.
        `java.lang.IllegalStateException` - if the mp3 song was loaded from a URL and is therefore considered to be read only and thus may not be modified.

    - #### saveID3v23

          protected void saveID3v23()
                             throws java.io.IOException

      save the ID3v2.3 tag to the .mp3 file. This is a very messy method, and you really have to understand the ID3v2.3 structure to understand this method. So, if you can, by all means, avoid reading the code in this method.
      Throws:
        `java.io.IOException` - if there was an error writing the ID3v2.3 tag to the .mp3 file.

    - #### saveID3v24

          protected void saveID3v24()
                             throws java.io.IOException

      save the ID3v2.4 tag to the .mp3 file. This is a very messy method, and you really have to understand the ID3v2.4 structure to understand this method. So, if you can, by all means, avoid reading the code in this method.
      Throws:
        `java.io.IOException` - if there was an error writing the ID3v2.4 tag to the .mp3 file.

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        string representation of the mp3 file.