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.
Modifier and Type | Field and Description |
---|---|
protected APETag |
apeTag
the optional APEv1 tag is found at the end of the .mp3 file, while the APEv2 tag can be found at the beginning or end of the .mp3 file.
|
protected int |
audioSize
size (in bytes) of the audio portion of the .mp3 file.
|
protected int |
bitrate
|
protected BitrateType |
bitrateType
|
protected int |
fileSize
size (in bytes) of the .mp3 file.
|
protected ID3v1Tag |
id3v1Tag
the optional ID3v1 tag which can found at the end of the .mp3 file, after the mp3 audio data.
|
protected Lyrics3v1Tag |
lyrics3v1Tag
the optional Lyrics3v1 tag which can found at the end of the .mp3 file, after the mp3 audio data and before the ID3v1 tag.
|
protected Lyrics3v2Tag |
lyrics3v2Tag
the optional Lyrics3v2 tag which can found at the end of the .mp3 file, after the mp3 audio data and before the ID3v1 tag.
|
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 MPEGFrame |
mpegFrame
the 1st mpeg audio frame found after the end of the ID3v2.x tag.
|
protected int |
tagSize
size (in bytes) of the ID3v2.x tag.
|
id3v24Tag
id3v23Tag
Constructor and Description |
---|
MP3Base(java.io.File mp3File)
constructor.
|
MP3Base(java.lang.String mp3File)
constructor.
|
MP3Base(java.net.URL mp3Url)
constructor.
|
Modifier and Type | Method and Description |
---|---|
protected int |
calculateAudioDuration()
calculates the duration of the song (in seconds) from data found in the
mpeg audio frames . |
void |
displayErrors(java.io.PrintStream printStream)
displays any errors found in the ID3v2.x tag from the .mp3 file.
|
APETag |
getAPETag()
gets the optional APE tag.
|
java.util.List<java.lang.String> |
getErrors()
gets a list of any errors found in the ID3v2.x tag.
|
long |
getFileSize()
returns the size (in bytes) of the .mp3 file.
|
MPEGFrame |
getFirstMpegFrame()
gets the first
MPEGFrame found after the ID3v2.x tag. |
ID3v1Tag |
getID3v1Tag()
gets the optional ID3v1 tag.
|
ID3v24Tag |
getID3v24TagAtEnd()
gets the optional
ID3v2.4 tag found at the end of an .mp3 file. |
int |
getID3v2xPadding()
gets the size of the padding inside the ID3v2.x tag.
|
Lyrics3v1Tag |
getLyrics3v1Tag()
gets the optional Lyrics3v1 tag.
|
Lyrics3v2Tag |
getLyrics3v2Tag()
gets the optional Lyrics3v2 tag.
|
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 |
hasAPETag()
determines whether the .mp3 file has a
APE tag at the beginning or end of the .mp3 file. |
boolean |
hasErrors()
determines if the mp3 file had any errors in the information stored in the frames of the ID3v2.x tag.
|
boolean |
hasID3v1Tag()
determines whether the .mp3 file has an
ID3v1 tag at the end of the .mp3 file. |
boolean |
hasID3v24TagAtEnd()
determines whether the .mp3 file has an
ID3v2.4 tag at the end of the .mp3 file. |
boolean |
hasLyrics3v1Tag()
determines whether the .mp3 file has a
Lyrics3v1 tag at the end of the .mp3 file. |
boolean |
hasLyrics3v2Tag()
determines whether the .mp3 file has a
Lyrics3v2 tag at the end of the .mp3 file. |
boolean |
isConstantBitRate()
determines whether the mp3 file is encoded at a constant bit rate (
CBR ). |
protected void |
readMP3File(java.io.File mp3File)
reads in and parses the mp3 file.
|
void |
removeAPETag()
remove the
APE tag at the end of the .mp3 file. |
void |
removeID3v1Tag()
remove the
ID3v1 tag at the end of the .mp3 file. |
void |
removeID3v24TagAtEnd()
remove the
ID3v2.4 tag at the end of the .mp3 file. |
void |
removeLyrics3v1Tag()
remove the
Lyrics3v1 tag at the end of the .mp3 file. |
void |
removeLyrics3v2Tag()
remove the
Lyrics3v2 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. |
void |
setID3v2xPadding(int newPaddingSize)
this method sets the padding inside the ID3v2.x tag to the specified amount and saves the .mp3 file.
|
java.lang.String |
toString()
gets a string representation of the mp3 file.
|
java.util.List<java.lang.String> |
validateMPEGFrames()
This method reads through the audio portion of an .mp3 file and validates the
MPEG audio frames . |
addV24Frame, getID3v24Tag, getV24Album, getV24AttachedPicture, getV24AttachedPictureFrame, getV24AttachedPictures, getV24AudioDuration, 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, setV24Band, setV24Comments, setV24LeadPerformer, setV24LyricsBy, setV24MusicBy, setV24MusicType, setV24MusicType, setV24Publisher, setV24Rating, setV24SynchronizedLyrics, setV24SynchronizedLyrics, setV24SynchronizedLyrics, setV24Text, setV24Text, setV24Text, setV24Title, setV24Track, setV24UnsynchronizedLyrics, setV24Year
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, setV23Year
protected java.io.File mp3File
protected java.net.URL mp3Url
protected int fileSize
protected int tagSize
protected int audioSize
protected MPEGFrame mpegFrame
protected int bitrate
protected BitrateType bitrateType
protected ID3v1Tag id3v1Tag
protected Lyrics3v1Tag lyrics3v1Tag
protected Lyrics3v2Tag lyrics3v2Tag
protected APETag apeTag
public MP3Base(java.lang.String mp3File) throws java.io.IOException
mp3File
- path to the .mp3 file from which to get information.java.io.IOException
- if there is a problem reading the .mp3 file.public MP3Base(java.io.File mp3File) throws java.io.IOException
mp3File
- .mp3 file from which to get information.java.io.IOException
- if there is a problem reading the .mp3 file.public MP3Base(java.net.URL mp3Url) throws java.io.IOException
mp3Url
- URL of an .mp3 file from which to get information.java.io.IOException
- if there is a problem reading the .mp3 file.protected void readMP3File(java.io.File mp3File) throws java.io.IOException
mp3File
- .mp3 file from which to get information.java.io.IOException
- if there is a problem reading the .mp3 file.public java.util.List<java.lang.String> validateMPEGFrames() throws java.io.IOException
MPEG audio frames
. It makes sure that the MPEG audio frames:MPEG frame headers
frame header
followed by side information
followed by
audio data
)constant bit rate
Xing
, Lame
, and VBRI
headers occur only in the 1st
MPEG audio frame
VBR
encoded .mp3 files contain a VBR headerjava.io.IOException
- if the .mp3 file can not be read.public boolean hasErrors()
getErrors()
,
displayErrors(PrintStream)
public java.util.List<java.lang.String> getErrors()
hasErrors()
,
displayErrors(PrintStream)
public void displayErrors(java.io.PrintStream printStream)
printStream
- print stream used to write out the errors.getErrors()
,
hasErrors()
protected java.lang.String getReadOnlyErrorMessage()
public java.lang.String getPath()
// 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());
public long getFileSize()
protected int calculateAudioDuration()
mpeg audio frames
.public boolean isConstantBitRate()
CBR
).CBR
).public boolean hasID3v1Tag()
ID3v1 tag
at the end of the .mp3 file. This method can only be called on mp3's loaded from a file.ID3v1 tag
at the end of the .mp3 file.public ID3v1Tag getID3v1Tag()
public boolean hasID3v24TagAtEnd() throws java.io.IOException, java.lang.IllegalStateException
ID3v2.4 tag
at the end of the .mp3 file.ID3v2.4 tag
at the end of the .mp3 file.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 ID3v2.4 tag
at the end of the .mp3 file.public boolean hasAPETag()
APE tag
at the beginning or end of the .mp3 file. This method can only be called on mp3's loaded from a file.APE tag
at the beginning or end of the .mp3 file.public APETag getAPETag()
public boolean hasLyrics3v1Tag()
Lyrics3v1 tag
at the end of the .mp3 file. This method can only be called on mp3's loaded from a file.Lyrics3v1 tag
at the end of the .mp3 file.public boolean hasLyrics3v2Tag()
Lyrics3v2 tag
at the end of the .mp3 file. This method can only be called on mp3's loaded from a file.Lyrics3v2 tag
at the end of the .mp3 file.public Lyrics3v1Tag getLyrics3v1Tag()
public Lyrics3v2Tag getLyrics3v2Tag()
public MPEGFrame getFirstMpegFrame()
MPEGFrame
found after the ID3v2.x tag. MP3 files store the audio data in MPEG audio frames. They should occur one right
after the other and form an unbroken stream of MPEG audio frames. Almost all of the mp3 programs and libraries available on the internet today find the first MPEG
audio frame by searching the .mp3 file following the ID3v2.x tag which is located at the beginning of the .mp3 file. While this works most of the time, there is a
problem with this method. It is possible that a "false synch" is encountered. That is, what appears to be a valid MPEG audio frame is really just some other data that
just happens to look like an actual MPEG audio frame. For this reason, the Beaglebuddy mp3 library checks to make sure that the first MPEG audio frame found is directly
followed by the second MPEG audio frame. If it isn't, then the Beaglebuddy mp3 library continues searching until it finds two valid MPEG audio frames in a row. When two
valid MPEG audio frames are found in a row, then we are reasonably certain that the beginning of the MPEG audio stream has indeed been found and not a "false synch".
Since the bit rate type
, codec
,
frequency
, bit rate
, etc. are all obtained from the first MPEG
audio frame, you might see discrepancies between the Beaglebuddy mp3 library and other programs. The reason is because the Beaglebuddy mp3 library is more stringent
when locating the first MPEG audio frame than are the other .mp3 programs.public ID3v24Tag getID3v24TagAtEnd() throws java.io.IOException, java.lang.IllegalStateException
ID3v2.4 tag
found at the end of an .mp3 file. This really is a stupid addition to the Id3v2.4 standard.ID3v2.4 tag
found at the end of an .mp3 file if present. Otherwise null is returned.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 ID3v2.4 tag
at the end of the .mp3 file.public void removeID3v1Tag() throws java.io.IOException
ID3v1 tag
at the end of the .mp3 file.
This method simply truncates the end of the .mp3 file to remove the ID3v1 tag, and hence does not require a call to the MP3.save()
method.
It does not save any changes to the ID3v2.x tag.
java.io.IOException
- if there was an error truncating the 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.public void removeLyrics3v1Tag() throws java.io.IOException
Lyrics3v1 tag
at the end of the .mp3 file.
This method simply truncates the end of the .mp3 file to remove the Lyrics3v1 tag, and hence does not require a call to the MP3.save()
method.
It does not save any changes to the ID3v2.x tag.
Since the Lyrics3v1 tag is found after the mpeg audio and before the ID3v1 tag
at the end of the .mp3 file,
removing the Lyrics3v1 tag from the .mp3 file will also remove the ID3v1 tag as well.
java.io.IOException
- if there was an error truncating the Lyrics3v1 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, or if the mp3 file
does not contain a Lyrics3v1 tag.public void removeLyrics3v2Tag() throws java.io.IOException
Lyrics3v2 tag
at the end of the .mp3 file.
This method simply truncates the end of the .mp3 file to remove the Lyrics3v2 tag, and hence does not require a call to the MP3.save()
method.
It does not save any changes to the ID3v2.x tag.
Since the Lyrics3v2 tag is found after the mpeg audio and before the ID3v1 tag
at the end of the .mp3 file,
removing the Lyrics3v2 tag from the .mp3 file will also remove the ID3v1 tag as well.
java.io.IOException
- if there was an error truncating Lyrics3v2 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, or if the mp3 file
does not contain a Lyrics3v2 tag.public void removeAPETag() throws java.io.IOException
APE tag
at the end of the .mp3 file.
This method simply truncates the end of the .mp3 file to remove the APE tag, and hence does not require a call to the MP3.save()
method.
It does not save any changes to the ID3v2.x tag.
Since the APE tag is found after the mpeg audio and before the ID3v1 tag
, if present, at the end of the .mp3 file,
removing the APE tag from the end of the .mp3 file will also remove the ID3v1 tag, if it is present, as well.
java.io.IOException
- if there was an error truncating APE 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, or if the mp3 file
does not contain an APE tag.public void removeID3v24TagAtEnd() throws java.io.IOException
ID3v2.4 tag
at the end of the .mp3 file. If the ID3v2.4 tag is not found at the absolute very end of
the .mp3 file, then no action is taken and the .mp3 file is left untouched.
java.io.IOException
- if there was an error truncating ID3v2.4 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.public int getID3v2xPadding()
setID3v2xPadding(int)
public void setID3v2xPadding(int newPaddingSize) throws java.io.IOException
newPaddingSize
- the new size, in bytes, that the ID3v2.x padding should be set to.java.io.IOException
- if an error occurs while saving the .mp3 file.getID3v2xPadding()
protected void saveID3v23() throws java.io.IOException
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.
java.io.IOException
- if there was an error writing the ID3v2.3 tag
to the .mp3 file.protected void saveID3v24() throws java.io.IOException
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.
java.io.IOException
- if there was an error writing the ID3v2.4 tag
to the .mp3 file.public java.lang.String toString()
toString
in class java.lang.Object