jurgentje
asked on
Bitrate from a mp3
How can i get the biterate from a mp3?
ASKER
Mmm, yes I need an example :s
Hi jvicentiu,
Could you please provide all of the tables? The emphasis, extension, mode, and sampling frequence tables are missing from your post.
jurgentje,
Hint: Open the MP3. Read the first 32 bytes. Seek in 13 bytes. Read one byte - that's your MPEG type. Read in next two bytes, that's your layer. Etc. It's pretty easy.
Stu
Could you please provide all of the tables? The emphasis, extension, mode, and sampling frequence tables are missing from your post.
jurgentje,
Hint: Open the MP3. Read the first 32 bytes. Seek in 13 bytes. Read one byte - that's your MPEG type. Read in next two bytes, that's your layer. Etc. It's pretty easy.
Stu
ASKER
How do I see the Bytes?
if sysutils.findfirst('mp3pat h', faAnyFile, Rec)=0 then
begin
Rec....
...
end;
if sysutils.findfirst('mp3pat
begin
Rec....
...
end;
they are bits not bytes, anyway this should work:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes, Windows;
const MP3_FILE='D:\MP3\Mariah Carey - Through The Rain (CD Rip) (daz.mp3wma.net).mp3';
type HEADER=record
sync: byte;
info: array[0..3] of byte;
end;
var MP3:TFileStream;
HD:HEADER;
X:array[1..3,1..14] of word = ((32,64,96,128,160,192,224 ,256,288,3 20,352,384 ,416,448),
(32,48,56,64,80,96,112,128 ,160,192,2 24,256,320 ,384),
(32,40,48,56,64,80,96,112, 128,160,19 2,224,256, 320));
S:String;
c:char;
begin
MP3:=TFileStream.Create(MP 3_FILE,fmO penRead);
setlength(S,3);
MP3.Read(S[1],3);{jump over ID3v2 tag}
if S='ID3' then MP3.Seek(1210,soFromBeginn ing);
MP3.Read(HD, sizeof(hd));
writeln(X[(HD.info[0] and 3), (HD.info[1] shr 4)]);
read(c);
end.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes, Windows;
const MP3_FILE='D:\MP3\Mariah Carey - Through The Rain (CD Rip) (daz.mp3wma.net).mp3';
type HEADER=record
sync: byte;
info: array[0..3] of byte;
end;
var MP3:TFileStream;
HD:HEADER;
X:array[1..3,1..14] of word = ((32,64,96,128,160,192,224
(32,48,56,64,80,96,112,128
(32,40,48,56,64,80,96,112,
S:String;
c:char;
begin
MP3:=TFileStream.Create(MP
setlength(S,3);
MP3.Read(S[1],3);{jump over ID3v2 tag}
if S='ID3' then MP3.Seek(1210,soFromBeginn
MP3.Read(HD, sizeof(hd));
writeln(X[(HD.info[0] and 3), (HD.info[1] shr 4)]);
read(c);
end.
That was only for MPEG 1 LAYER 1/2/3, for MPEG 2 define another array like X and fill it. It will write the bitrate on the console.
all the tables:
* HEADER
bits name comments
-------------------------- ---------- ---------- ----
12 sync 0xFFF
1 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_f req + padding
layer2&3:
(144000*bitrate)/sampling_ freq + padding
. mpeg2.0
layer1 :
(24000*bitrate)/sampling_f req + padding
layer2&3 :
(72000*bitrate)/sampling_f req + padding
all the tables:
* HEADER
bits name comments
--------------------------
12 sync 0xFFF
1 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_f
layer2&3:
(144000*bitrate)/sampling_
. mpeg2.0
layer1 :
(24000*bitrate)/sampling_f
layer2&3 :
(72000*bitrate)/sampling_f
That was only for MPEG 1 LAYER 1/2/3, for MPEG 2 define another array like X and fill it. It will write the bitrate on the console.
all the tables:
* HEADER
bits name comments
-------------------------- ---------- ---------- ----
12 sync 0xFFF
1 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_f req + padding
layer2&3:
(144000*bitrate)/sampling_ freq + padding
. mpeg2.0
layer1 :
(24000*bitrate)/sampling_f req + padding
layer2&3 :
(72000*bitrate)/sampling_f req + padding
all the tables:
* HEADER
bits name comments
--------------------------
12 sync 0xFFF
1 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_f
layer2&3:
(144000*bitrate)/sampling_
. mpeg2.0
layer1 :
(24000*bitrate)/sampling_f
layer2&3 :
(72000*bitrate)/sampling_f
Sorry :) My brain was on vacation this morning (bits/bytes).
one tiny mistake:
atfer -->> if S='ID3' then MP3.Seek(1210,soFromBeginn ing)
add -->> else MP3.Seek(0,soFromBeginning );
atfer -->> if S='ID3' then MP3.Seek(1210,soFromBeginn
add -->> else MP3.Seek(0,soFromBeginning
ASKER
That Code doesn't work :(
it works in Delphi 6
what is the error?
what is the error?
It work fine for me on Delphi 5 and Delphi 7.
you should paste the code in a console application....
first press FILE -> NEW -> OTHER and select console application, then replace all the text in the project.
first press FILE -> NEW -> OTHER and select console application, then replace all the text in the project.
...and don't forget to chance the MP3 filename :)
ASKER
The Code Doesn't use a form. I Try it on a form but an error appears:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const MP3_FILE='D:\MP3\Mariah Carey - Through The Rain (CD Rip) (daz.mp3wma.net).mp3';
type HEADER=record
sync: byte;
info: array[0..3] of byte;
end;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender : TObject);
var MP3:TFileStream;
HD:HEADER;
X:array[1..3,1..14] of word = ((32,64,96,128,160,192,224 ,256,288,3 20,352,384 ,416,448), (32,48,56,64,80,96,112,128 ,160,192,2 24,256,320 ,384),
(32,40,48,56,64,80,96,112, 128,160,19 2,224,256, 320));
S:String;
c:char;
begin
MP3:=TFileStream.Create(MP 3_FILE,fmO penRead);
setlength(S,3);
MP3.Read(S[1],3);{jump over ID3v2 tag}
if S='ID3' then MP3.Seek(1210,soFromBeginn ing)
else MP3.Seek(0,soFromBeginning );
MP3.Read(HD, sizeof(hd));
writeln(X[(HD.info[0] and 3), (HD.info[1] shr 4)]);
read(c);
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const MP3_FILE='D:\MP3\Mariah Carey - Through The Rain (CD Rip) (daz.mp3wma.net).mp3';
type HEADER=record
sync: byte;
info: array[0..3] of byte;
end;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender
var MP3:TFileStream;
HD:HEADER;
X:array[1..3,1..14] of word = ((32,64,96,128,160,192,224
(32,40,48,56,64,80,96,112,
S:String;
c:char;
begin
MP3:=TFileStream.Create(MP
setlength(S,3);
MP3.Read(S[1],3);{jump over ID3v2 tag}
if S='ID3' then MP3.Seek(1210,soFromBeginn
else MP3.Seek(0,soFromBeginning
MP3.Read(HD, sizeof(hd));
writeln(X[(HD.info[0] and 3), (HD.info[1] shr 4)]);
read(c);
end;
end.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
you can't initialize a local variable -> X has to be a global variable - put it next to:
var Form1:TForm;
etc...
var Form1:TForm;
etc...
ASKER
Result = Word
How can I Change a Word in a String, to add it in a label
How can I Change a Word in a String, to add it in a label
ASKER
Isn't there a function to show the first 128 bits in a label as a string
use inttostr or val
use inttostr or val
if you need an example I tell me and I will write it
bits name comments
--------------------------
12 sync 0xFFF
1 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