This is my attempt to
summarize the information needed to decode a
MPEG audio frame header. I'm noding this out of the notes I made while
researching with the exception of the
bit rate table, which was copied from www.mp3-tech.org and reformated. This does not cover actual MPEG audio compression, just the audio frame headers. That being said, on with the show.
The MPEG audio frame header is 4 bytes long. Here's a run down of the fields, and what they mean.
AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
A - 11 bits -
Sync
These bits are all set. They're refered to as the sync bits, since you know you've found a frame header when you find 11 bits in a row that are all on.
B - 2 bits -
MPEG Version
The value of these bits tell you what version of MPEG you're dealing with:
00 - MPEG version 2.5
01 - reserved (meaningless right now)
10 - MPEG version 2
11 - MPEG version 1
C - 2 bits -
MPEG Layer
The value of these bits tells you what layer the audio data uses. Decoded as such:
00 - reserved (meaningless right now)
01 - Layer 3
10 - Layer 2
11 - Layer 1
D - 1 bit -
Protected
If this bit is 0, the audio frame is protected by a 2 byte
CRC checksum that follows the frame header.
E - 4 bits -
Bit Rate
These bits, along with the MPEG version and layer, tell you the bit rate of the
audio stream(in kbps). "Free" means it has a variable bit rate. "Bad" means the value is not allowed.
bits V1-L1 V1-L2 V1-L3 V2-L1 V2-L2/L3
0000 free free free free free
0001 32 32 32 32 8
0010 64 48 40 48 16
0011 96 56 48 56 24
0100 128 64 56 64 32
0101 160 80 64 80 40
0110 192 96 80 96 48
0111 224 112 96 112 56
1000 256 128 112 128 64
1001 288 160 128 144 80
1010 320 192 160 160 96
1011 352 224 192 176 112
1100 384 256 224 192 128
1101 416 320 256 224 144
1110 448 384 320 256 160
1111 bad bad bad bad bad
F - 2 bits -
Sampling Rate
These 2 bits, combined with the
MPEG version, determine the
sampling rate in
Hz as follows:
bits MPEG1 MPEG2 MPEG2.5
00 44100 22050 11025
01 48000 24000 12000
10 32000 16000 8000
11 reserved reserved reserved
G - 1 bit -
Padding
If this bit is set, the frame is padded with one extra slot, otherwise the frame is not padded.
H - 1 bit -
Private
As near as I can tell,
players and
encoders can use this bit for whatever they like. Just ignore it.
I - 2 bits -
Channel Mode
These 2 bits determine what channels the audio uses as follows:
00 - Stereo
01 - Joint Stereo
10 - Dual Channel
11 - Mono Channel
J - 2 bits -
Mode Extension
An extension to the channel mode setting, only used if the channel mode is joint stereo.
bits Intensity Stereo MS Stereo
00 off off
01 on off
10 off on
11 on on
K - 1 bit -
Copyright
If this bit is 1, the audio data is copyrighted. Otherwise it's not. Well, in theory at least...
L - 1 bit -
Original
If this bit is 1, it is the original media. Otherwise, it is a copy.
M - 2 bits -
Emphasis
These 2 bits determine the audio emphasis.
00 - None
01 - 50/15 ms
10 - reserved
11 - CCIT J.17
Here's a quick example:
11111111 11111011 10010010 00000100
This frame would be MPEG 1, Layer 3(B is 11, and C is 01). The frame lacks a CRC checksum(D is 1). It has a
bit rate of 128 and a
sampling rate of 44100(E is 1001 and F is 00). The frame is
padded(G is 1). It's channel mode is
Stereo(I is 00 and J is 00). It's an original copy that is not copyrighted(K is 0 and L is 1). It has no
emphasis(M is 00).