Mpeg 1.0/2.0 LayersI, II and III header and trailer formats
-----------------------------------------------------------

Laurent.Clevy@alcatel.fr
With corrections by Fausto Richetti Blanco



* HEADER


bits name              comments
--------------------------------------------------
11   sync              0xFFF
2    version           1=mpeg1.0, 0=mpeg2.0
2    lay               4-lay = layerI, II or III
1    error protection  0=yes, 1=no
4    bitrate_index     see table below
2    sampling_freq     see table below
1    padding
1    extension         see table below
2    mode              see table below
2    mode_ext          used with "joint stereo" mode
1    copyright         0=no 1=yes
1    original          0=no 1=yes
2    emphasis          see table below
--------------------------------------------------

- bitrate_index

. mpeg1.0

            1  2  3   4   5   6   7   8   9  10  11  12  13  14
layer1     32 64 96 128 160 192 224 256 288 320 352 384 416 448
layer2     32 48 56  64  80  96 112 128 160 192 224 256 320 384
layer3     32 40 48  56  64  80  96 112 128 160 192 224 256 320

. mpeg2.0

            1  2  3   4   5   6   7   8   9  10  11  12  13  14
layer1     32 48 56  64  80  96 112 128 144 160 176 192 224 256
layer2      8 16 24  32  40  48  56  64  80  96 112 128 144 160
layer3      8 16 24  32  40  48  56  64  80  96 112 128 144 160


- sampling_freq

. mpeg1.0

    0     1     2     

44100 48000 32000 

. mpeg2.0

    0     1     2     

22050 24000 16000 


- mode:

0 "stereo"
1 "joint stereo"
2 "dual channel"
3 "single channel"


- mode extension:
 
0      MPG_MD_LR_LR
1      MPG_MD_LR_I
2      MPG_MD_MS_LR 
3      MPG_MD_MS_I

jsbound :

   mode_ext     0  1   2   3
layer
1               4  8  12  16
2               4  8  12  16
3               0  4   8  16


- emphasis:

0 "none"
1 "50/15 microsecs"
2 "reserved"            must not be used !
3 "CCITT J 17"




* TRAILER

at end of file - 128 bytes

offset  type  len   name
--------------------------------------------
0       char  3                   "TAG"
3       char  30    title
33      char  30    artist
63      char  30    album
93      char  4     year
97      char  30    comments
127     byte  1     genre
--------------------------------------------

- genre :

 0    "Blues"
 1    "Classic Rock"
 2    "Country"
 3    "Dance"
 4    "Disco"
 5    "Funk"
 6    "Grunge"
 7    "Hip-Hop"
 8    "Jazz"
 9    "Metal"
10    "New Age"
11    "Oldies"
12    "Other"
13    "Pop"
14    "R&B"
15    "Rap"
16    "Reggae"
17    "Rock"
18    "Techno"
19    "Industrial"
20    "Alternative"
21    "Ska"
22    "Death Metal"
23    "Pranks"
24    "Soundtrack"
25    "Euro-Techno"
26    "Ambient"
27    "Trip-Hop"
28    "Vocal"
29    "Jazz+Funk"
30    "Fusion"
31    "Trance"
32    "Classical"
33    "Instrumental"
34    "Acid"
35    "House"
36    "Game"
37    "Sound Clip"
38    "Gospel"
39    "Noise"
40    "AlternRock"
41    "Bass"
42    "Soul"
43    "Punk"
44    "Space"
45    "Meditative"
46    "Instrumental Pop"
47    "Instrumental Rock"
48    "Ethnic"
49    "Gothic"
50    "Darkwave"
51    "Techno-Industrial"
52    "Electronic"
53    "Pop-Folk"
54    "Eurodance"
55    "Dream"
56    "Southern Rock"
57    "Comedy"
58    "Cult"
59    "Gangsta"
60    "Top 40"
61    "Christian Rap"
62    "Pop/Funk"
63    "Jungle"
64    "Native American"
65    "Cabaret"
66    "New Wave"
67    "Psychadelic"
68    "Rave"
69    "Showtunes"
70    "Trailer"
71    "Lo-Fi"
72    "Tribal"
73    "Acid Punk"
74    "Acid Jazz"
75    "Polka"
76    "Retro"
77    "Musical"
78    "Rock & Roll"
79    "Hard Rock"
80    "Unknown"



- frame length :

. mpeg1.0

layer1 :
 (48000*bitrate)/sampling_freq + padding
layer2&3:
 (144000*bitrate)/sampling_freq + padding

. mpeg2.0

layer1 :
 (24000*bitrate)/sampling_freq + padding
layer2&3 :
 (72000*bitrate)/sampling_freq + padding
