Class MP3ElementaryInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.monte.media.mp3.MP3ElementaryInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class MP3ElementaryInputStream extends FilterInputStream
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
  • Field Details

  • Constructor Details

    • MP3ElementaryInputStream

      public MP3ElementaryInputStream(File file) throws IOException
      Throws:
      IOException
    • MP3ElementaryInputStream

      public MP3ElementaryInputStream(InputStream in)
  • Method Details

    • getNextFrame

      public MP3ElementaryInputStream.Frame getNextFrame() throws IOException
      Gets the next frame from the input stream. Positions the stream in front of the frame header.
      Throws:
      IOException
    • getFrame

      public MP3ElementaryInputStream.Frame getFrame()
      Returns the current frame.
    • getFormat

      public AudioFormat 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

      public int read() throws IOException
      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:
      read in class FilterInputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Reads up to len bytes from the current frame (its header and its data). May read less then len bytes. Returns the actual number of bytes read. Returns -1 on an attempt to read past the end of the frame.
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException
    • readFully

      public final void readFully(byte[] b) throws IOException
      Reads b.length bytes from the current frame (its header and its data).
      Throws:
      IOException - on an attempt to read past the end of the frame.
    • readFully

      public final void readFully(byte[] b, int off, int len) throws IOException
      Reads len bytes from the current frame (its header and its data).
      Throws:
      IOException - on an attempt to read past the end of the frame.
    • skip

      public long skip(long n) throws IOException
      Skips up to n bytes 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:
      skip in class FilterInputStream
      Throws:
      IOException
    • getStreamPosition

      public long getStreamPosition()
      Returns the current position in the stream.
      Returns:
      The stream position.