org.jaudiotagger.tag.id3.framebody
Class FrameBodyASPI
java.lang.Object
org.jaudiotagger.tag.id3.AbstractTagItem
org.jaudiotagger.tag.id3.AbstractTagFrameBody
org.jaudiotagger.tag.id3.framebody.AbstractID3v2FrameBody
org.jaudiotagger.tag.id3.framebody.FrameBodyASPI
- All Implemented Interfaces:
- ID3v24FrameBody
public class FrameBodyASPI
- extends AbstractID3v2FrameBody
- implements ID3v24FrameBody
Audio files with variable bit rates are intrinsically difficult to
deal with in the case of seeking within the file. The ASPI frame
makes seeking easier by providing a list a seek points within the
audio file. The seek points are a fractional offset within the audio
data, providing a starting point from which to find an appropriate
point to start decoding. The presence of an ASPI frame requires the
existence of a TLEN frame, indicating the duration of the file in
milliseconds. There may only be one 'audio seek point index' frame in
a tag.
Indexed data start (S) $xx xx xx xx
Indexed data length (L) $xx xx xx xx
Number of index points (N) $xx xx
Bits per index point (b) $xx
Then for every index point the following data is included;
Fraction at index (Fi) $xx (xx)
'Indexed data start' is a byte offset from the beginning of the file.
'Indexed data length' is the byte length of the audio data being
indexed. 'Number of index points' is the number of index points, as
the name implies. The recommended number is 100. 'Bits per index
point' is 8 or 16, depending on the chosen precision. 8 bits works
well for short files (less than 5 minutes of audio), while 16 bits is
advantageous for long files. 'Fraction at index' is the numerator of
the fraction representing a relative position in the data. The
denominator is 2 to the power of b.
Here are the algorithms to be used in the calculation. The known data
must be the offset of the start of the indexed data (S), the offset
of the end of the indexed data (E), the number of index points (N),
the offset at index i (Oi). We calculate the fraction at index i
(Fi).
Oi is the offset of the frame whose start is soonest after the point
for which the time offset is (i/N * duration).
The frame data should be calculated as follows:
Fi = Oi/L * 2^b (rounded down to the nearest integer)
Offset calculation should be calculated as follows from data in the
frame:
Oi = (Fi/2^b)*L (rounded up to the nearest integer)
- Version:
- $Id: FrameBodyASPI.java,v 1.13 2007/08/06 16:04:34 paultaylor Exp $
- Author:
- : Paul Taylor, : Eric Farng
Constructor Summary |
FrameBodyASPI()
Creates a new FrameBodyASPI datatype. |
FrameBodyASPI(java.nio.ByteBuffer byteBuffer,
int frameSize)
Creates a new FrameBodyASPI datatype. |
FrameBodyASPI(FrameBodyASPI copyObject)
Creates a new FrameBodyASPI from another FrameBodyASPI |
Method Summary |
java.lang.String |
getIdentifier()
The ID3v2 frame identifier |
Methods inherited from class org.jaudiotagger.tag.id3.AbstractTagFrameBody |
getBriefDescription, getHeader, getLongDescription, getObject, getObjectValue, getTextEncoding, isSubsetOf, iterator, setHeader, setObjectValue, setTextEncoding, toString |
Methods inherited from class java.lang.Object |
getClass, hashCode, notify, notifyAll, wait, wait, wait |
FrameBodyASPI
public FrameBodyASPI()
- Creates a new FrameBodyASPI datatype.
FrameBodyASPI
public FrameBodyASPI(FrameBodyASPI copyObject)
- Creates a new FrameBodyASPI from another FrameBodyASPI
- Parameters:
copyObject
-
FrameBodyASPI
public FrameBodyASPI(java.nio.ByteBuffer byteBuffer,
int frameSize)
throws InvalidTagException
- Creates a new FrameBodyASPI datatype.
- Throws:
InvalidTagException
getIdentifier
public java.lang.String getIdentifier()
- The ID3v2 frame identifier
- Specified by:
getIdentifier
in class AbstractID3v2FrameBody
- Returns:
- the ID3v2 frame identifier for this frame type