我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 想找点音频方面的资料,谢谢! 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

深深



性别: 美女 状态: 该用户目前不在线
等级: 品行端正
家族: 燕窝
发贴: 169
威望: 0
浮云: 1177
在线等级:
注册时间: 2007-10-10
最后登陆: 2008-06-29

5come5帮你背单词 [ suffer /'sΛfə/ vt. 忍受,承受,遭受;vi. 忍受痛苦,受损失 ]


想找点音频方面的资料,谢谢!

顶端 Posted: 2008-03-04 18:33 | [楼 主]
springdew



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 936
威望: 0
浮云: 0
在线等级:
注册时间: 2005-12-29
最后登陆: 2024-07-12

5come5帮你背单词 [ scold /skəuld/ v. 责骂,申斥 ]


以前保存的一点MP3的资料,凑合着用用
Quote:

MP3文件格式
一.概述:
MP3文件是由帧(frame)构成的,帧是MP3文件最小的组成单位。MP3的全称应为MPEG1 Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1,也就是说,一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了"感官编码技术",即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。

二.整个MP3文件结构:
MP3文件大体分为三部分:TAG_V2(ID3V2),Frame,  TAG_V1(ID3V1)
ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame
.
.
.
Frame
一系列的帧,个数由文件大小和帧长决定
每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定
每个FRAME又分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互[屏蔽]
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE。


三.MP3的FRAME格式:
每个FRAME都有一个帧头FRAMEHEADER,长度是4BYTE(32bit),帧头后面可能有两个字节的CRC校验,这两个字节的是否存在决定于FRAMEHEADER信息的第16bit,为0则帧头后面无校验,为1则有校验,校验值长度为2个字节,紧跟在FRAMEHEADER后面,接着就是帧的实体数据了,格式如下:

FRAMEHEADER
CRC(free)
MAIN_DATA
4 BYTE
0 OR 2 BYTE
长度由帧头计算得出

1.帧头FRAMEHEADER格式如下:
AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
13个帧头字符的含义如下:
Sign
Length
(bits)
Position
(bits)
Description
A
11
(31-21)
Frame sync (all bits set)
B
2
(20,19)
MPEG Audio version
00 - MPEG Version 2.5
01 - reserved
10 - MPEG Version 2
11 - MPEG Version 1
C
2
(18,17)
Layer description
00 - reserved
01 - Layer III
10 - Layer II
11 - Layer I
D
1
(16)
Protection bit
0 - Protected by CRC (16bit crc follows header)
1 - Not protected
E
4
(15,12)
Bitrate index
bits
V1,L1
V1,L2
V1,L3
V2,L1
V2,L2
V2,L3
0000
free
free
free
free
free
free
0001
32
32
32
32
32
8 (8)
0010
64
48
40
64
48
16 (16)
0011
96
56
48
96
56
24 (24)
0100
128
64
56
128
64
32 (32)
0101
160
80
64
160
80
64 (40)
0110
192
96
80
192
96
80 (48)
0111
224
112
96
224
112
56 (56)
1000
256
128
112
256
128
64 (64)
1001
288
160
128
288
160
128 (80)
1010
320
192
160
320
192
160 (96)
1011
352
224
192
352
224
112 (112)
1100
384
256
224
384
256
128 (128)
1101
416
320
256
416
320
256 (144)
1110
448
384
320
448
384
320 (160)
1111
bad
bad
bad
bad
bad
bad
NOTES: All values are in kbps
V1 - MPEG Version 1
V2 - MPEG Version 2 and Version 2.5
L1 - Layer I
L2 - Layer II
L3 - Layer III
"free" means variable bitrate.
"bad" means that this is not an allowed value
The values in parentheses are from different sources which claim that those values are valid for V2,L2 and V2,L3. If anyone can confirm please let me know.
F
2
(11,10)
Sampling rate frequency index (values are in Hz)
bits
MPEG1
MPEG2
MPEG2.5
00
44100
22050
11025
01
48000
24000
12000
10
32000
16000
8000
11
reserv.
reserv.
reserv.

G
1
(9)
Padding bit
0 - frame is not padded
1 - frame is padded with one extra bit
H
1
(8)
Private bit (unknown purpose)
I
2
(7,6)
Channel Mode
00 - Stereo
01 - Joint stereo (Stereo)
10 - Dual channel (Stereo)
11 - Single channel (Mono)
J
2
(5,4)
Mode extension (Only if Joint stereo)
value
Intensity stereo
MS stereo
00
off
off
01
on
off
10
off
on
11
on
on

K
1
(3)
Copyright
0 - Audio is not copyrighted
1 - Audio is copyrighted
L
1
(2)
Original
0 - Copy of original media
1 - Original media
M
2
(1,0)
Emphasis
00 - none
01 - 50/15 ms
10 - reserved
11 - CCIT J.17
1)每帧的播放时间:无论帧长是多少,每帧的播放时间都是26ms;
2)数据帧大小:
FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit
例如:  Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1
FrameSize = (144 * 128000) / 44100 + 1  = 417 bytes

2.MAIN_DATA:
MAIN_DATA部分长度是否变化决定于FRAMEHEADER的bitrate是否变化,一首MP3歌曲,它有三个版本:96Kbps(96千比特位每秒)、128Kbps和192Kbps。Kbps(比特位速率),表明了音乐每秒的数据量,Kbps值越高,音质越好,文件也越大,MP3标准规定,不变的bitrate的MP3文件称作CBR,大多数MP3文件都是CBR的,而变化的bitrate的MP3文件称作VBR,每个FRAME的长度都可能是变化的。下面是CBR和VBR的不同点:

1)CBR:固定位率的FRAME的大小也是固定的(公式如上所述),只要知道文件总长度,和帧长即可由播放每帧需26ms计算得出mp3播放的总时间,也可通过计数帧的个数控制快进、快退慢放等操作。

2)VBR:VBR是XING公司推出的算法,所以在MP3的FRAME里会有"XING"这个关键字(现在很多流行的小软件也可以进行VBR压缩,它们是否遵守这个约定,那就不得而知了),它存放在MP3文件中的第一个有效FRAME里,它标识了这个MP3文件是VBR的。同时第一个FRAME里存放了MP3文件的FRAME的总个数,这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的FRAME的INDEX,假设4分钟的MP3歌曲,240S,分成100段,每两个相邻INDEX的时间差就是2.4S,所以通过这个INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快进的FRAME头,可参考下文:
This system was created to minimize file lengths and to preserve sound quality.
Higher frequencies generally needs more space for encoding (thats why many codecs cut all frequencies above cca 16kHz) and lower tones requires less. So if some part of song doesnt consist of higher tones then using eg. 192kbps is wasting of space. It should be enough to use only eg. 96kbps.
And it is the principle of VBR. Codec looks over frame and then choose bitrate suitable for its sound quality.

It sounds perfect but it brings some problems:
If you want to jump over 2 minutes in song, it is not a problem with CBR because you are able simply count amount of Bytes which is necessary to skip. But it is impossible with VBR. Frame lengths should be arbitrary so you have to either go frame by frame and counts (time consuming and very unpractical) or use another mechanism for approximate count.
If you want to cut 5 minutes from the middle of VBR file (all we know CDs where last song takes 10 minutes but 5 minutes is a pure silence, HELL!) problems are the same.
Result? VBR files are more difficult for controlling and adjusting. And I dont like feeling that sound quality changes in every moment. And AFAIK many codecs have problems with creation VBR in good quality.
Personally I cant see any reason why to use VBR - I dont give a fuck if size of one CD in MP3 is 55 MB with CBR or 51 MB with VBR. But everybody has a different taste... some people prefer VBR.

VBR File Structure

is the same as for CBR. But the first frame doesnt contain audio data and it is used for special information about VBR file.

Structure of the first frame:
Byte     
 
Content
0-3

Standard audio frame header (as descripted above). Mostly it contains values FF FB 30 4C, from which you can count FrameLen = 156 Bytes. And thats exactly enough space for storing VBR info.
This header contains some important information valid for the whole file:
- MPEG (MPEG1 or MPEG2)
- SAMPLING rate frequency index
- CHANNEL (JointStereo etc.)
 


4-x

Not used till string "Xing" (58 69 6E 67). This string is used as a main VBR file identifier. If it is not found, file is supposed to be CBR. This string can be placed at different locations according to values of MPEG and CHANNEL (ya, these from a few lines upwards):
36-39

"Xing" for MPEG1 and CHANNEL != mono (mostly used)
21-24

"Xing" for MPEG1 and CHANNEL == mono
21-24

"Xing" for MPEG2 and CHANNEL != mono
13-16

"Xing" for MPEG2 and CHANNEL == mono
 




After "Xing" string there are placed flags, number of frames in file and a size of file in Bytes. Each of these items has 4 Bytes and it is stored as 'int' number in memory. The first is the most significant Byte and the last is the least.

Following schema is for MPEG1 and CHANNEL != mono:
40-43

Flags
Value
 
Name
 
Description
00 00 00 01

Frames Flag

set if value for number of frames in file is stored
00 00 00 02

Bytes Flag

set if value for filesize in Bytes is stored
00 00 00 04

TOC Flag

set if values for TOC (see below) are stored
00 00 00 08

VBR Scale Flag

set if values for VBR scale are stored
All these values can be stored simultaneously.
 


44-47

Frames
Number of frames in file (including the first info one)
 


48-51

Bytes
File length in Bytes
 


52-151

TOC (Table of Contents)
Contains of 100 indexes (one Byte length) for easier lookup in file. Approximately solves problem with moving inside file.
Each Byte has a value according this formula:
(TOC / 256) * fileLenInBytes
So if song lasts eg. 240 sec. and you want to jump to 60. sec. (and file is 5 000 000 Bytes length) you can use:
TOC[(60/240)*100] = TOC[25]
and corresponding Byte in file is then approximately at:
(TOC[25]/256) * 5000000

If you want to trim VBR file you should also reconstruct Frames, Bytes and TOC properly.
 


152-155

VBR Scale
I dont know exactly system of storing of this values but this item probably doesnt have deeper meaning.

四.ID3v1
    ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下:
typedef struct tagID3V1
{
char Header[3];    /*标签头必须是"TAG"否则认为没有标签*/
char Title[30];    /*标题*/
char Artist[30];  /*作者*/
char Album[30];    /*专集*/
char Year[4];    /*出品年代*/
char Comment[28];  /*备注*/
char reserve;    /*保留*/
char track;;    /*音轨*/
char Genre;    /*类型*/
}ID3V1,*pID3V1;

    ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用'\0'补足,否则将造成信息错误。Genre使用原码表示,对照表如下:
/* Standard genres */
0="Blues";
1="ClassicRock";
2="Country";
3="Dance";
4="Disco";
5="Funk";
6="Grunge";
7="Hip-Hop";
8="Jazz";
9="Metal";
10="NewAge";
11="Oldies";
12="Other";
13="Pop";
14="R&B";
15="Rap";
16="Reggae";
17="Rock";
18="Techno";
19="Industrial";
20="Alternative";
21="Ska";
22="DeathMetal";
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="SoundClip";
38="Gospel";
39="Noise";
40="AlternRock";
41="Bass";
42="Soul";
43="Punk";
44="Space";
45="Meditative";
46="InstrumentalPop";
47="InstrumentalRock";
48="Ethnic";
49="Gothic";
50="Darkwave";
51="Techno-Industrial";
52="Electronic";
53="Pop-Folk";
54="Eurodance";
55="Dream";
56="SouthernRock";
57="Comedy";
58="Cult";
59="Gangsta";
60="Top40";
61="ChristianRap";
62="Pop/Funk";
63="Jungle";
64="NativeAmerican";
65="Cabaret";
66="NewWave";
67="Psychadelic";
68="Rave";
69="Showtunes";
70="Trailer";
71="Lo-Fi";
72="Tribal";
73="AcidPunk";
74="AcidJazz";
75="Polka";
76="Retro";
77="Musical";
78="Rock&Roll";
79="HardRock";
/* Extended genres */
80="Folk";
81="Folk-Rock";
82="NationalFolk";
83="Swing";
84="FastFusion";
85="Bebob";
86="Latin";
87="Revival";
88="Celtic";
89="Bluegrass";
90="Avantgarde";
91="GothicRock";
92="ProgessiveRock";
93="PsychedelicRock";
94="SymphonicRock";
95="SlowRock";
96="BigBand";
97="Chorus";
98="EasyListening";
99="Acoustic";
100="Humour";
101="Speech";
102="Chanson";
103="Opera";
104="ChamberMusic";
105="Sonata";
106="Symphony";
107="BootyBass";
108="Primus";
109="PornGroove";
110="Satire";
111="SlowJam";
112="Club";
113="Tango";
114="Samba";
115="Folklore";
116="Ballad";
117="PowerBallad";
118="RhythmicSoul";
119="Freestyle";
120="Duet";
121="PunkRock";
122="DrumSolo";
123="Acapella";
124="Euro-House";
125="DanceHall";
126="Goa";
127="Drum&Bass";
128="Club-House";
129="Hardcore";
130="Terror";
131="Indie";
132="BritPop";
133="Negerpunk";
134="PolskPunk";
135="Beat";
136="ChristianGangstaRap";
137="HeavyMetal";
138="BlackMetal";
139="Crossover";
140="ContemporaryChristian";
141="ChristianRock";
142="Merengue";
143="Salsa";
144="TrashMetal";
145="Anime";
146="JPop";
147="Synthpop";



五.ID3V2
    ID3V2到现在一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3。由于ID3V1记录在MP3文件的末尾,ID3V2就只好记录在MP3文件的首部了(如果有一天发布ID3V3,真不知道该记录在哪里)。也正是由于这个原因,对ID3V2的操作比ID3V1要慢。而且ID3V2结构比ID3V1的结构要复杂得多,但比前者全面且可以伸缩和扩展。
下面就介绍一下ID3V2.3。
每个ID3V2.3的标签都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3文件的首部。

1、标签头
在文件的首部顺序记录10个字节的ID3V2.3的头部。数据结构如下:
char Header[3];    /*必须为"ID3"否则认为标签不存在*/
char Ver;    /*版本号ID3V2.3就记录3*/
char Revision;    /*副版本号此版本记录为0*/
char Flag;    /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/
char Size[4];    /*标签大小,包括标签头的10个字节和所有的标签帧的大小*/
1).标志字节
标志字节一般为0,定义如下:
abc00000
a -- 表示是否使用Unsynchronisation(这个单词不知道是什么意思,字典里也没有找到,一般不设置)
b -- 表示是否有扩展头部,一般没有(至少Winamp没有记录),所以一般也不设置
c -- 表示是否为测试标签(99.99%的标签都不是测试用的啦,所以一般也不设置)

2).标签大小
一共四个字节,但每个字节只用7位,最高位不使用恒为0。所以格式如下
0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
计算大小时要将0去掉,得到一个28位的二进制数,就是标签大小(不懂为什么要这样做),计算公式如下:
int total_size;
total_size =  (Size[0]&0x7F)*0x200000
  +(Size[1]&0x7F)*0x400
  +(Size[2]&0x7F)*0x80
  +(Size[3]&0x7F)

2、标签帧
每个标签帧都有一个10个字节的帧头和至少一个字节的不固定长度的内容组成。它们也是顺序存放在文件中,和标签头和其他的标签帧也没有特殊的字符分隔。得到一个完整的帧的内容只有从帧头中的到内容大小后才能读出,读取时要注意大小,不要将其他帧的内容或帧头读入。
帧头的定义如下:
char FrameID[4];  /*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/
char Size[4];  /*帧内容的大小,不包括帧头,不得小于1*/
char Flags[2];  /*存放标志,只定义了6位,稍后详细解说*/

1).帧标识
用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
TIT2=标题 表示内容为这首歌的标题,下同
TPE1=作者
TALB=专集
TRCK=音轨 格式:N/M  其中N为专集中的第N首,M为专集中共M首,N和M为ASCII码表示的数字
TYER=年代 是用ASCII码表示的数字
TCON=类型 直接用字符串表示
COMM=备注 格式:"eng\0备注内容",其中eng表示备注所使用的自然语言
2).大小
这个可没有标签头的算法那么麻烦,每个字节的8位全用,格式如下
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
算法如下:
int FSize;
FSize =  Size[0]*0x100000000
  +Size[1]*0x10000
  +Size[2]*0x100
  +Size[3];
 
3).标志
只定义了6位,另外的10位为0,但大部分的情况下16位都为0就可以了。格式如下:
abc00000 ijk00000
a -- 标签保护标志,设置时认为此帧作废
b -- 文件保护标志,设置时认为此帧作废
c -- 只读标志,设置时认为此帧不能修改(但我没有找到一个软件理会这个标志)
i -- 压缩标志,设置时一个字节存放两个BCD码表示数字
j -- 加密标志(没有见过哪个MP3文件的标签用了加密)
k -- 组标志,设置时说明此帧和其他的某帧是一组

值得一提的是winamp在保存和读取帧内容的时候会在内容前面加个'\0',并把这个字节计算在帧内容的大小中。

详细的情况可以到http://www.id3.org/查询,对于ID3V1和ID3V2的读写,我用DELPHI写了两个类来实现,可以写信给我索取q.d.zhang@sohu.com

附:帧标识的含义
4).  Declared ID3v2 frames
  The following frames are declared in this draft.
  AENC Audio encryption
  APIC Attached picture
  COMM Comments
  COMR Commercial frame
  ENCR Encryption method registration
  EQUA Equalization
  ETCO Event timing codes
  GEOB General encapsulated object
  GRID Group identification registration
  IPLS Involved people list
  LINK Linked information
  MCDI Music CD identifier
  MLLT MPEG location lookup table
  OWNE Ownership frame
  PRIV Private frame
  PCNT Play counter
  POPM Popularimeter
  POSS Position synchronisation frame
  RBUF Recommended buffer size
  RVAD Relative volume adjustment
  RVRB Reverb
  SYLT Synchronized lyric/text
  SYTC Synchronized tempo codes
  TALB Album/Movie/Show title
  TBPM BPM (beats per minute)
  TCOM Composer
  TCON Content type
  TCOP Copyright message
  TDAT Date
  TDLY Playlist delay
  TENC Encoded by
  TEXT Lyricist/Text writer
  TFLT File type
  TIME Time
  TIT1 Content group description
  TIT2 Title/songname/content description
  TIT3 Subtitle/Description refinement
  TKEY Initial key
  TLAN Language(s)
  TLEN Length
  TMED Media type
  TOAL Original album/movie/show title
  TOFN Original filename
  TOLY Original lyricist(s)/text writer(s)
  TOPE Original artist(s)/performer(s)
  TORY Original release year
  TOWN File owner/licensee
  TPE1 Lead performer(s)/Soloist(s)
  TPE2 Band/orchestra/accompaniment
  TPE3 Conductor/performer refinement
  TPE4 Interpreted, remixed, or otherwise modified by
  TPOS Part of a set
  TPUB Publisher
  TRCK Track number/Position in set
  TRDA Recording dates
  TRSN Internet radio station name
  TRSO Internet radio station owner
  TSIZ Size
  TSRC ISRC (international standard recording code)
  TSSE Software/Hardware and settings used for encoding
  TYER Year
  TXXX User defined text information frame
  UFID Unique file identifier
  USER Terms of use
  USLT Unsychronized lyric/text transcription
  WCOM Commercial information
  WCOP Copyright/Legal information
  WOAF Official audio file webpage
  WOAR Official artist/performer webpage
  WOAS Official audio source webpage
  WORS Official internet radio station homepage
  WPAY Payment
  WPUB Publishers official webpage
  WXXX User defined URL link frame

发表于 2007-02-05 18:32 zgf的blog 阅读(3002) | 评论 (4) | 编辑 收藏
2007年1月12日
C程序的代码和数据如何定位(转载)
1,系统定义: 
.cinit 存放C程序中的变量初值和常量;
.const 存放C程序中的字符常量、浮点常量和用const声明的常量;
.switch 存放C程序中switch语句的跳针表;
.text 存放C程序的代码;
.bss 为C程序中的全局和静态变量保留存储空间;
.far 为C程序中用far声明的全局和静态变量保留空间;
.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;
.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间。
2,用户定义:
#pragma CODE_SECTION (symbol, "section name"); #pragma DATA_SECTION (symbol, "section name")
单个地址的时候可以使用 #define
如 #define my_data *(volatile unsigned int*)0x000C
在数组变量时 使用#pragma 宏

XXX.h/XXX.c
#pragma DATA_SECTION(my_data,".data_section")
unsigned char my_data[1024];
在xxx.cmd中建立.data_section并赋予地址就可以了
顶端 Posted: 2008-03-04 18:59 | [1 楼]
springdew



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 936
威望: 0
浮云: 0
在线等级:
注册时间: 2005-12-29
最后登陆: 2024-07-12

5come5帮你背单词 [ magnitude /'mægnitju:d/ n. 大小,量,重要 ]


MPEG-1 Audio Layer 3,经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。

概观

MP3是一个数据压缩格式。它丢弃掉脉冲编码调制(PCM)音频数据中对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了小得多的文件大小。

在MP3中使用了许多技术其中包括心理声学以确定音频的哪一部分可以丢弃。MP3音频可以按照不同的位速进行压缩,提供了在数据大小和声音质量之间进行权衡的一个范围。

MP3格式使用了混合的转换机制将时域信号转换成频域信号:

* 32波段多相积分滤波器(PQF)

* 36或者12 tap 改良离散余弦滤波器(MDCT);每个子波段大小可以在0...1和2...31之间[屏蔽]选择

* 混叠衰减后处理

根据MPEG规范的说法,MPEG-4中的AAC(Advanced audio coding)将是MP3格式的下一代,尽管有许多创造和推广其他格式的重要努力。然而,由于MP3的空前的流行,任何其他格式的成功在目前来说都是不太可能的。MP3不仅有广泛的用户端软件支持,也有很多的硬件支持比如便携式媒体播放器(指MP3播放器)DVD和CD播放器。

发展

MPEG-1 Audio Layer 2编码开始时是德国Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt(后来称为Deutsches Zentrum für Luft- und Raumfahrt, 德国太空中心)Egon Meier-Engelen管理的数字音频广播(DAB)项目。这个项目是欧盟作为EUREKA研究项目资助的,它的名字通常称为EU-147。EU-147 的研究期间是1987年到1994年。

到了1991年,就已经出现了两个提案:Musicam(称为Layer 2)和ASPEC(自适应频谱感知熵编码)。荷兰飞利浦公司、法国CCETT和德国Institut für Rundfunktechnik提出的Musicam方法由于它的简单、出错时的健壮性以及在高质量压缩时较少的计算量而被选中。基于子带编码的Musicam 格式是确定MPEG音频压缩格式(采样率、帧结构、数据头、每帧采样点)的一个关键因素。这项技术和它的设计思路完全融合到了ISO MPEG Audio Layer I、II 以及后来的Layer III(MP3)格式的定义中。在Mussmann教授(University of Hannover)的主持下,标准的制定由Leon van de Kerkhof(Layer I)和Gerhard Stoll(Layer II)完成。

一个由荷兰Leon Van de Kerkhof、德国Gerhard Stoll、法国Yves-François Dehery和德国Karlheinz Brandenburg 组成的工作小组吸收了Musicam和ASPEC的设计思想,并添加了他们自己的设计思想从而开发出了MP3,MP3能够在128kbit/s达到MP2 192kbit/s 音质。

所有这些算法最终都在1992年成为了MPEG的第一个标准组MPEG-1的一部分,并且生成了1993年公布的国际标准ISO/IEC 11172-3。MPEG音频上的更进一步的工作最终成为了1994年制定的第二个MPEG标准组MPEG-2标准的一部分,这个标准正式的称呼是1995年首次公布的ISO/IEC 13818-3。

编码器的压缩效率通常由位速定义,因为压缩率依赖于位数(:en:bit depth)和输入信号的采样率。然而,经常有产品使用CD参数(44.1kHz、两个通道、每通道16位或者称为2x16位)作为压缩率参考,使用这个参考的压缩率通常较高,这也说明了压缩率对于有损压缩存在的问题。

Karlheinz Brandenburg使用CD介质的Suzanne Vega的歌曲Tom’s Diner来评价MP3压缩算法。使用这首歌是因为这首歌的柔和、简单旋律使得在回放时更容易听到压缩格式中的缺陷。一些人开玩笑地将Suzanne Vega称为“MP3之母”。来自于EBU V3/SQAM参考CD的更多一些严肃和critical 音频选段(glockenspiel, triangle, accordion, ...)被专业音频工程师用来评价MPEG音频格式的主观感受质量。
MP3走向大众

为了生成位兼容的MPEG Audio文件(Layer 1、Layer 2、Layer 3),ISO MPEG Audio委员会成员用C语言开发的一个称为ISO 11172-5的参考模拟软件。在一些非实时操作系统上它能够演示第一款压缩音频基于DSP的实时硬件解码。一些其它的MPEG Audio实时开发出来用于面向消费接收机和机顶盒的数字广播(无线电DAB和电视DVB)。

后来,1994年7月7日Fraunhofer-Gesellschaft发布了第一个称为l3enc的MP3编码器。

Fraunhofer开发组在1995年7月14日选定扩展名.mp3(以前扩展名是.bit)。使用第一款实时软件MP3播放器Winplay3(1995年9月9日发布)许多人能够在自己的个人电脑上编码和回放MP3文件。由于当时的硬盘相对较小(如500MB),这项技术对于在计算机上存储娱乐音乐来说是至关重要的。

MP2、MP3与因特网

1993年10月,MP2(MPEG-1 Audio Layer 2)文件在因特网上出现,它们经常使用Xing MPEG Audio Player播放,后来又出现了Tobias Bading为Unix开发的MAPlay。MAPlay于199年2月22日首次发布,现在已经移植到微软视窗平台上。

刚开始仅有的MP2编码器产品是Xing Encoder和CDDA2WAV,CDDA2WAV是一个将CD音轨转换成WAV格式的CD抓取器。

Internet Underground Music Archive(IUMA)通常被认为是在线音乐[屏蔽]的鼻祖,IUMA是因特网上第一个高保真音乐网站,在MP3和网络流行之前它有数千首授权的MP2录音。

从1995年上半年开始直到整个九十年代后期,MP3开始在因特网上蓬勃发展。MP3的流行主要得益于如Nullsoft于1997年发布的Winamp和Napster于1999年发布的Napster这样的公司和软件包的成功,并且它们相互促进发展。这些程序使得普通用户很容易地播放、制作、共享和收集MP3文件。

关于MP3文件的点对点技术文件共享的争论在最近几年迅速蔓延—这主要是由于压缩使得文件共享成为可能,未经压缩的文件过于庞大难于共享。由于MP3文件通过因特网大量传播一些主要唱片厂商通过法律起诉Napster来保护它们的版权(参见知识产权)。

如iTunes Music Store这样的商业在线音乐发行服务通常选择其它或者专有的支持数字版权管理(DRM)的音乐文件格式以控制和限制数字音乐的使用。支持DRM的格式的使用是为了防止受版权保护的素材免被侵犯版权,但是大多数的保护机制都能被一些方法[屏蔽]。这些方法能够被计算机高手用来生成能够自由复制的解锁文件。一个显著的例外是微软公司的Windows Media Audio 10格式,目前它还没有被[屏蔽]。如果希望得到一个压缩的音频文件,这个录制的音频流必须进行压缩并且带来音质的降低。

MP3的音频质量

因为MP3是一种有损格式,它提供了多种不同“位速”的选项—也就是用来表示每秒音频所需的编码数据位数。典型的速度介于每秒128和320kb之间。与此对照的是,CD上未经压缩的音频位速是1411.2 kbit/s(16 位/采样点 × 44100 采样点/秒 × 2 通道)。

使用较低位速编码的MP3文件通常回放质量较低。使用过低的位速,“压缩噪声(:en:compression artifact)”(原始录音中没有的声音)将会在回放时出现。说明压缩噪声的一个好例子是压缩欢呼的声音:由于它的随机性和急剧变化,所以编码器的错误就会更明显,并且听起来就象回声。

除了编码文件的位速之外,MP3文件的质量也与编码器的质量以及编码信号的难度有关。使用优质编码器编码的普通信号,一些人认为128kbit/s的MP3以及44.1kHz的CD采样的音质近似于CD音质,同时得到了大约11:1的压缩率。在这个比率下正确编码的MP3能够获得比调频广播和卡式磁带[来源请求]更好的音质,这主要是那些模拟介质的带宽限制、信噪比和其它一些限制。然而,听力测试显示经过简单的练习测试听众能够可靠地区分出128kbit/s MP3与原始CD的区别[来源请求]。在许多情况下他们认为MP3音质太低是不可接受的,然而其他一些听众或者换个环境(如在嘈杂的车中或者聚会上)他们又认为音质是可接受的。很显然,MP3 编码的瑕疵在低端计算机的扬声器上比较不明显,而在连接到计算机的高质量立体声系统,尤其是使用高质量的headphone时则比较明显。

Fraunhofer Gesellschaft(FhG)在他们的官方网站上公布了下面的MPEG-1 Layer 1、2和3的压缩率和数据速率用于比较:

* Layer 1: 384 kbit/s,压缩率 4:1

* Layer 2: 192...256 kbit/s,压缩率 8:1...6:1

* Layer 3: 112...128 kbit/s,压缩率 12:1...10:1

不同层面之间的差别是因为它们使用了不同的心理声学模型导致的;Layer 1的算法相当简单,所以透明编码就需要更高的位速。然而,由于不同的编码器使用不同的模型,很难进行这样的完全比较。

许多人认为所引用的速率出于对Layer 2和Layer 3记录的偏爱而出现了严重扭曲。他们争辩说实际的速率如下所列:

* Layer 1: 384 kbit/s 优秀

* Layer 2: 256...384 kbit/s 优秀, 224...256 kbit/s 很好, 192...224 kbit/s 好

* Layer 3: 224...320 kbit/s 优秀, 192...224 kbit/s 很好, 128...192 kbit/s 好

当比较压缩机制时,很重要的是要使用同等音质的编码器。将新编码器与基于过时技术甚至是带有缺陷的旧编码器比较可能会产生对于旧格式不利的结果。由于有损编[屏蔽]丢失信息这样一个现实,MP3算法通过建立人类听觉总体特征的模型尽量保证丢弃的部分不被人耳识别出来(例如,由于noise masking),不同的编码器能够在不同程度上实现这一点。

一些可能的编码器:

* Mike Cheng在1998年早些时候首次开发的LAME。 与其它相比,它是一个完全遵循LGPL的MP3编码器,它有良好的速度和音质,甚至对MP3技术的后继版本形成了挑战。

* Fraunhofer Gesellschaft:有些编码器不错,有些有缺陷。

有许多的早期编码器现在已经不再广泛使用:

* ISO dist10 参考代码

* Xing

* BladeEnc

* ACM Producer Pro.

好的编码器能够在128到160kbit/s下达到可接受的音质,在160到192kbit/s下达到接近透明的音质。所以不在特定编码器或者最好的编码器话题内说128kbit/s或者192kbit/s下的音质是容易引起误解的。一个好的编码器在 128kbit/s下生成的MP3有可能比一个不好的编码器在192kbit/s下生成的MP3音质更好。另外,即使是同样的编码器同样的文件大小,一个不变位速的MP3可能比一个变位速的MP3音质要差很多。

需要注意的一个重要问题是音频信号的质量是一个主观判断。Placebo effect is rampant, with many users claiming to require a certain quality level for transparency.许多用户在A/B测试中都没有通过,他们无法在更低的位速下区分文件。一个特定的位速对于有些用户来说是足够的,对于另外一些用户来说是不够的。每个人的声音感知可能有所不同,所以一个能够满足所有人的特定心理声学模型并不明显存在。仅仅改变试听环境,如音频播放系统或者环境可能就会显现出有损压缩所产生的音质降低。上面给出的数字只是大多数人的一个大致有效参考,但是在有损压缩领域真正有效的压缩过程质量测试手段就是试听音频结果。

如果你的目标是实现没有质量损失的音频文件或者用在演播室中的音频文件,就应该使用无损压缩算法,目前能够将16位PCM音频数据压缩到38%并且声音没有任何损失,这样的压缩工具有Lossless Audio LA、Apple Lossless、TTA、FLAC、Windows Media Audio 9 Lossless (wma) 和Monkey’s Audio 等等。对于需要进行编辑、混合处理的音频文件要尽量使用无损格式,否则有损压缩产生的误差可能在处理后无法预测,多次编码产生的损失将会混杂在一起,在处理之后进行编码这些损失将会变得更加明显。无损压缩在降低压缩率的代价下能够达到最好的结果。

一些简单的编辑操作,如切掉音频的部分片段,可以直接在MP3数据上操作而不需要重新编码。对于这些操作来说,只要使用合适的软件(mp3DirectCut和MP3Gain),上面提到的所关心的问题可以不必考虑。
位速

位速对于MP3文件来说是可变的。总的原则是位速越高则声音文件中包含的原始声音信息越多,这样回放时声音质量也越高。在MP3编码的早期,整个文件使用一个固定的位速。

MPEG-1 Layer 3允许使用的位速是32、40、48、56、64、80、96、112、128、160、192、224、25[屏蔽]320 kbit/s,允许的采样频率是32、44.1和48kHz。44.1kHz是最为经常使用的速度(与CD的采样速率相同),128kbit/s是事实上“好品质”的标准,尽管192kbit/s在对等文件共享网络上越来越受到欢迎。MPEG-2和[非正式的]MPEG-2.5包括其它一些位速:6、12、24、32、40、48、56、64、80、96、112、128、144、160kbit/s。

可变位速(VBR)也是可能的。MP3文件的中的音频切分成有自己不同位速的帧,这样在文件编码的时候就可以动态地改变位速。尽管在最初的实现中并没有这项功能,VBR现在已经得到了广泛的应用。这项技术使得在声音变化大的部分使用较大的位速而在声音变化小的部分使用较小的位速成为可能。这个方法类似于声音控制的磁带录音机不记录静止部分节省磁带消耗。一些编码器在很大程度上依赖于这项技术。

高达640kbit/s的非标准位速可以使用LAME编码器和自由格式来实现,但是几乎没有MP3播放器能够播放这些文件。

MP3的设计局限

MP3格式有一些不能仅仅通过使用更好的编码器绕过的内在限制。一些新的压缩格式如Vorbis和AAC不再有这些限制。

按照技术术语,MP3有如下一些限制:

* 位速最大是320 kbit/s

* 时间分辨率相对于变化迅速的信号来说太低

* 对于超过15.5/15.8 kHz的频率没有scale factor band

* Joint stereo 是基于帧与帧完成的

* 没有定义编码器/解码器的整体时延,这就意味着gapless playback缺少一个正式的规定

然而,即使有这些限制,一个好好的调整MP3编码器能够非常有竞争力地完成编码任务。

MP3音频编码

MPEG-1标准中没有MP3编码器的一个精确规范,然而与此相反,解码算法和文件格式却进行了细致的定义。人们设想编码的实现是设计自己的适合去除原始音频中部分信息的算法(或者是它在频域中的修正离散余弦(MDCT)表示)。在编码过程中,576个时域样本被转换成576个频域样本,如果是瞬变信号就使用192而不是576个采样点,这是限制量化噪声随着随瞬变信号短暂扩散。

这是听觉心理学的研究领域:人类主观声音感知。

这样带来的结果就是出现了许多不同的MP3编码器,每种生成的声音质量都不相同。有许多它们的比较结果,这样一个[屏蔽]户很容易选择合适的编码器。需要记住的是高位速编码表现优秀的编码器(如LAME这个在高位速广泛使用的编码器)未必在低位速的表现也同样好。

MP3音频解码

另一方面,解码在标准中进行了细致的定义。

多数解码器是bitstream compliant,也就是说MP3文件解码出来的非压缩输出信号将与标准文档中数学定义的输出信号一模一样(在规定的近似误差范围内)。

MP3文件有一个标准的格式,这个格式就是包括384、576、或者1152个采样点(随MPEG的版本和层不同而不同)的帧,并且所有的帧都有关联的头信息(32位)和辅助信息(9、17或者32字节,随着MPEG版本和立体声或者单通道的不同而不同)。头和辅助信息能够帮助解码器正确地解码相关的霍夫曼编码数据。

所以,大多数的解码器比较几乎都是完全基于它们的计算效率(例如,它们在解码过程中所需要的内存或者CPU时间)。

ID3和其它标签

“标签”是MP3(或其它格式)中保存的包含如标题、艺术家、唱片、音轨号或者其它关于MP3文件信息等添加到文件的数据。最为流行的标准标签格式目前是ID3 ID3v1和ID3v2标签,最近的是APEv2标签。

APEv2最初是为MPC 文件格式开发的(参见 APEv2规范)。APEv2可以与ID3标签在同一个文件中共存,但是它也可以单独使用。

音量归一化(normalization)

由于CD和其它各种各样的音源都是在不同的音量下录制的,在标签中保存文件的音量信息将是有用的,这样的话回放时音量能够进行动态调节。

人们已经提出了一些对MP3文件增益进行编码的标准。它们的设计思想是对音频文件的音量(不是“峰值”音量)进行归一化,这样以保证在不同的连续音轨切换时音量不会有变化。

最流行最常用的保存回放增益的解决方法是被简单地称作“Replay Gain”的方法。音轨的音量平均值和修剪信息都存在元数据标签中。

可选技术

有许多其它的有损音频编解码存在,其中包括:

* MPEG-1/2 Audio Layer 2 (MP2),MP3的前辈;
* MPEG-4 AAC, MP3的继承者,Apple的iTunes Music Store和iPod使用;
* Xiph.org Foundation的Ogg Vorbis,自由软件和没有专利的编解码器;
* MPC,也称作Musepack(以前叫MP+),由MP2派生出来;
* Thomson Multimedia的MP3和SBR的组合mp3PRO;
* AC-3,Dolby Digital和DVD中使用;
* ATRAC,Sony的Minidisc使用;
* Windows Media Audio(WMA)来自于微软公司;
* QDesign, 用于低速QuickTime;
* AMR-WB+ 针对蜂窝电话和其它有限带宽使用进行了优化的增强自适应多速宽带编解码器(Enhanced Adaptive Multi Rate WideBand codec);
* RealNetworks的RealAudio,经常用于网站的流媒体;
* Speex,基于CELP的专gate为语音和VoIP设计的自由软件和无专利编解码器。

mp3PRO、MP3、AAC、和MP2都是同一个技术家族中的成员,并且都是基于大致类似的心里声学模型。Fraunhofer Gesellschaft拥有许多涵盖这些编解码器所用技术的基本专利,Dolby Labs、索尼公司、Thomson Consumer Electronics和AT&T拥有其它一些关键专利。

在因特网上有一些其它无损音频压缩方法。尽管它们与MP3不同,它们是其它压缩机制的优秀范例,它们包括:

* FLAC 表示’自由无损音频编解码(Free Lossless Audio Codec)’
* Monkey’s Audio
* SHN,也称为Shorten
* TTA
* Wavpack
* Apple Lossless

听觉测试试图找出特定位速下的最好质量的有损音频编解码。在128kbit/s下,Ogg Vorbis、AAC、MPC和WMA Pro性能持平处于领先位置,LAME MP3稍微落后。在64kbit/s下,AAC-HE和mp3pro少许领先于其它编解码器。在超过128kbit/s下,多数听众听不出它们之间有明显差别。什么是“CD音质”也是很主观的:对于一些人来说128kbit/s的MP3就足够了,而对于另外一些人来说必须是200kbit/s以上的位速。

尽管如WMA和RealAudio这些新的编解码器的支持者宣称它们各自的算法能够在64kbit/s达到CD音质,听觉测试却显示了不同的结果;然而,这些编解码器在64kbit/s的音质明显超过同样位速下MP3的音质。无专利的Ogg Vorbis编解码器的开发者宣称它们的算法超过了MP3、RealAudio和WMA的音质,上面提到的听觉测试证实了这种说法。Thomson宣称它的mp3PRO 在64kbit/s达到了CD音质,但是测试者报告说64kbit/s的mp3Pro文件与112kbit/s的MP3文件音质类似,但是直到 80kbit/s时它才能接近CD音质。

专gate为MPEG-1/2视频设计的、优化的MP3总体上在低于48kbit/s的单声道数据和低于80kbit/s的立体声上表现不佳。

授权和专利问题

Thomson Consumer Electronics在认可软件专利的国家控制着MPEG-1/2 Layer 3 专利的授权,这些国家包括美国和日本,欧盟国家不包括在内。Thomson积极地加强这些专利的保护。Thomson已经在欧盟国家被欧洲专利局(:en:European Patent Office授予软件专利,但是还不清楚它们是否会被那里的司法所加强。参见欧洲专利协定中的软件专利(:en:Software patents under the European Patent Convention)。

关于Thomson专利文件、授权协议和费用的最新信息请参考它们的网站mp3licensing.com。

在1998年9月,Fraunhofer Institute向几个MP3软件开发者发去了一封信声明“发布或者销售编码器或者解码器”需要授权。这封信宣称非经授权的产品“触犯了 Fraunhofer和THOMSON的专利权。制造、销售或者发布使用[MPEG Layer-3]标准或者我们专利的产品,你们需要从我们这里获得这些专利的授权协议。”

这些专利问题极大地减慢了未经授权的MP3软件开发并且导致人们的注意力转向开发和欢迎其它如WMA和Ogg Vorbis这样的替代品。Windows开发系统的制造商微软公司从MP3专向它们自有的Windows Media格式以避免与专利相关的授权问题。直到那些关键的专利过期之前,未经授权的编码器和播放器在认可软件专利的国家看起来都是非法的。

尽管有这些专利限制,永恒的MP3格式继续向前发展;这种现象的原因看起来是由如下因素带来的网络效应:

* 熟悉这种格式,不知道有其它可选格式存在,
* 这些可选格式没有普遍地明显超过MP3的优势这样一个现实,
* 大量的MP3格式音乐,
* 大量的使用这种格式的不同软件和硬件,
* 没有DRM保护技术,这使得MP3文件可以很容易地修改、复制和通过网络重新发布,
* 大多数家庭用户不知道或者不关心软件专利争端,通常这些争端与他们个人用途而选用MP3格式无关。

另外,专利持有人不愿对于开源解码器加强授权费用的征收,这也带来了许多免费MP3解码器的发展。另外,尽管他们试图阻止发布编码器的二进制代码, Thomson已经宣布使用免费MP3编码器的个人用户将不需要支付费用。这样,尽管专利费是许多公司打算使用MP3格式时需要考虑的问题,对于用户来说并没有什么影响,这就带来了这种格式的广受欢迎。

Sisvel S.p.A. [1]和它的美国子公司Audio MPEG, Inc. [2]以前曾经以侵犯MP3技术专利为由起诉Thomson[3],但是那些争端在2005年11月最终以Sisvel给Thomson MP3授权而结束。Motorola最近也与Audio MPEG签署了MP3的授权协议。由于Thomson和Sisvel都拥有他们声称编解码器必需的单独的专利,MP3专利的法律状态还不清晰。

Fraunhofer的专利将在2010年4月到期,到了那时MP3算法将不再受专利保护。
顶端 Posted: 2008-03-04 21:09 | [2 楼]
我来我网·5come5 Forum » 学业有成

Total 0.018477(s) query 8, Time now is:01-01 19:53, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号