java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.monte.media.mp3.MP3ElementaryInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable
Facilitates reading of an MP3 elementary stream frame by frame.
An MP3 frame has a 32-bit header with the following contents in big endian order:
- bit 31-21, MP3 Sync Word, all bits must be set
- bit 20-19, Version, 00=MPEG 2.5,01=reserved,10=MPEG 2, 11=MPEG 1
- bit 18-17, Layer, 00=reserved, 01=layer 3, 10=layer 2, 11=layer 1
- bit 16, Error protection, 0=16 bit CRC follows header, 1=Not protected
- bit 15-12, Bit Rate in kbps, interpretation depends on version and layer
- bit 11-10, Frequency, interpretation depends on version
- bit 9, Pad Bit, 0=frame is not padded, 1=frame is padded to exactly fit the bit rate
- bit 8, Private bit, only informative
- bit 7-6, Channel Mode, 00=stereo, 01=joint stereo, 10=dual channel (2 mono channels), 11=single channel (mono)
- bit 5-4, Mode Extension (only used with Joint Stereo), interpretation depends on version and layer
- bit 3, Copyright, 0=not copyrighted, 1=copyrighted
- bit 2, Original, 0=Copy of original media,1=original media
- bit 1-0, Emphasis, 00=none,01=50/15ms,10=reserved,11=CCIT J.17
Reference:
http://en.wikipedia.org/wiki/MP3
http://www.datavoyage.com/mpgscript/mpeghdr.htm
http://www.mp3-tech.org/programmer/frame_header.html
http://lame.sourceforge.net/tech-FAQ.txt
http://www.altera.com/literature/dc/1.4-2005_Taiwan_2nd_SouthernTaiwanU-web.pdf
- Author:
- Werner Randelshofer
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classAn elementary frame. -
Field Summary
FieldsFields inherited from class java.io.FilterInputStream
in -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionGets the format of the current frame.getFrame()Returns the current frame.Gets the next frame from the input stream.longReturns the current position in the stream.intread()Reads a byte from the current frame (its header and its data).intread(byte[] b, int off, int len) Reads up tolenbytes from the current frame (its header and its data).final voidreadFully(byte[] b) Readsb.lengthbytes from the current frame (its header and its data).final voidreadFully(byte[] b, int off, int len) Readslenbytes from the current frame (its header and its data).longskip(long n) Skips up tonbytes from the current frame (its header and its data).Methods inherited from class java.io.FilterInputStream
available, close, mark, markSupported, read, resetMethods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
MP3
Defines the "MP3" encoding.
-
-
Constructor Details
-
MP3ElementaryInputStream
- Throws:
IOException
-
MP3ElementaryInputStream
-
-
Method Details
-
getNextFrame
Gets the next frame from the input stream. Positions the stream in front of the frame header.- Throws:
IOException
-
getFrame
Returns the current frame. -
getFormat
Gets the format of the current frame. Returns null if the input stream is not positioned on a frame, or the frame is not valid.- Returns:
- AudioFormat of current frame or null.
-
read
Reads a byte from the current frame (its header and its data). Returns -1 on an attempt to read past the end of the frame.- Overrides:
readin classFilterInputStream- Throws:
IOException
-
read
Reads up tolenbytes from the current frame (its header and its data). May read less thenlenbytes. Returns the actual number of bytes read. Returns -1 on an attempt to read past the end of the frame.- Overrides:
readin classFilterInputStream- Throws:
IOException
-
readFully
Readsb.lengthbytes from the current frame (its header and its data).- Throws:
IOException- on an attempt to read past the end of the frame.
-
readFully
Readslenbytes from the current frame (its header and its data).- Throws:
IOException- on an attempt to read past the end of the frame.
-
skip
Skips up tonbytes from the current frame (its header and its data). Returns the actual number of bytes that have been skipped. Returns -1 on an attempt to skip past the end of the frame.- Overrides:
skipin classFilterInputStream- Throws:
IOException
-
getStreamPosition
public long getStreamPosition()Returns the current position in the stream.- Returns:
- The stream position.
-