MP3文件格式解析
PeterLee2008-06-05
目录
一、概述
二、整个MP3文件结构
三、MP3帧格式
1.帧头格式
_DATA
四、ID3标准
3V1
3V2
五、MP3文件实例剖析
六、资料
一、概述
MP3文件是由帧(frame)构成的,帧是MP3文件最小的组成单位。MP3的全称应为MPEG1Layer-3音频
文件,MPEG(MovingPictureExpertsGroup)在汉语中译为活动图像专家组,特指活动影音压缩标准,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)
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame
.
.
.
Frame
一系列的帧,个数由文件大小和帧长决定
每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定
每个FRAME又分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE。
三、MP3帧格式
1.帧头格式
帧头长4字节,对于固定位率的MP3文件,所有帧的帧头格式一样其数据结构如下:
typedefFrameHeader{
unsignedintsync:11;//同步信息
unsignedintversion:2;//版本
unsignedintlayer:2;//层
unsignedinterrorprotection:1;//CRC校验
unsignedintbitrate_index:4;//位率
unsignedintsampling_frequency:2;//采样频率
unsignedintpadding:1;//帧长调节
unsignedintprivate:1;//保留字
unsignedintmode:2;//声道模式
unsignedintmodeextension:2;//扩充模式
unsignedintcopyright:1;//版权
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
unsignedintoriginal:1;//原版标志
unsignedintemphasis:2;//强调模式
}HEADER,*LPHEADER;
帧头4字节使用说明见表1。
MP3帧长取决于位率和频率,计算公式为:
.mpeg1.0layer1:帧长=(48000*bitrate)/sampling_freq+padding
layer2&3:帧长=(144000*bitrate)/sampling_freq+padding
.mpeg2.0layer1:帧长=(24000*bitrate)/sampling_freq+padding
layer2&3:帧长=(72000*bitrate)/sampling_freq+padding
例如:位率为64kbps,采样频率为44.1kHz,padding(帧长调节)为1时,帧长为210字节。
帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码
器读到此处时就进行解码了。
表1MP3帧头字节使用说明
名称位长说明
同步信息
11
所有位均为1,第1字节恒为FF。
版本
2
00-MPEG2.501-未定义10-MPEG211-MPEG1
层
2
00-未定义01-Layer310-Layer211-Layer1
CRC校
验
1
第
1、2
字
节0-校验1-不校验
PDF文件使用"pdfFactoryPro"试用版本创建
位率
4
取样率,单位是kbps,例如采用MPEG-1Layer3,64kbps是,值为0101。
bitsV1,L1V1,L2V1,L3V2,L1V2,L2V2,L3
0000freefreefreefreefreefree
(32)32(8)8(8)
(48)48(16)16(16)
(56)56(24)24(24)
28(64)64(32)32(32)
60(80)80(40)64(40)
92(96)96(48)80(48)
224(112)112(56)56(56)
1256(128)128(64)64(64)
1288(144)160(80)128(80)
1320(160)192(96)160(96)
1352(176)224(112)
112
(112)
1184(192)256(128)
128
(128)
1116(224)320(144)
256
(144)
1118(256)384(160)
320
(160)
1111badbadbadbadbadbad
V1-MPEG1V2-MPEG2andMPEG2.5
L1-Layer1L2-Layer2L3-Layer3
"free"表示位率可变"bad"表示不允许值
采样频率
2
第3
字
节
采样频率,对于MPEG-1:00-44.1kHz01-48kHz10-32kHz11-未定义
对于MPEG-2:00-22.05kHz01-24kHz10-16kHz11-未定义
对于MPEG-2.5:00-11.025kHz01-12kHz10-8kHz11-未定义
PDF文件使用"pdfFactoryPro"试用版本创建
帧长调节
1
用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。
保留字
1
没有使用。
声道模式
2
表示声道,00-立体声Stereo01-JointStereo10-双声道11-单声道
扩充模式
2
当声道模式为01是才使用。
Value
强度立体声MS立体声
00offoff
01onoff
10offon
11onon
版权
1
文件是否合法,0-不合法1-合法
原版标志
1
是否原版,0-非原版1-原版
强调方式
2
第4
字
节
用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。
00-未定义01-50/15ms10-保留11-CCITTJ.17
_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,分成1
00段,每两个相邻INDEX的时间差就是2.4S,所以通过这个INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快
进的FRAME头。
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
表2VBR文件第一帧结构
字节说明
1-4与CBR相同的标准声音帧头
存放VBR文件标识“Xing”(58696E67),此标识具体位置视采用的MPEG标准和声道模式
而定。标识的前后字节没有使用。
36-
39
MPEG-1和非单声道(常见)
21-
24
MPEG-1和单声道
21-
24
MPEG-2和非单声道
5-40
13-
16
MPEG-2和单声道
41-44标志,说明是否存储了帧数、文件长度、目录表和VBR规模信息,如果存储了,则01020408。
45-48帧数(包括第一帧)
49-52文件长度
53-
152
目录表,用来按时间进行字节定位。
153-
156
VBR规模,用于位率变动
另可参考下文:
Thissystemwascreatedtominimizefilelengthsandtoprervesoundquality.
Higherfrequenciesgenerallyneedsmorespaceforencoding(thatswhymanycodecscutall
frequenciesabovecca16kHz)mepartofsongdoesntconsistofhig
ldbeenoughtouonlyeg.96kbps.
ooksoverframeandthenchoobitratesuitableforitssoundqualit
y.
Itsoundsperfectbutitbringssomeproblems:
Ifyouwanttojumpover2minutesinsong,itisnotaproblemwithCBRbecauyouareable
lengthsshouldbearbitrarysoyouhavetoeithergoframebyframeandcounts(timeconsuming
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
andveryunpractical)oruanothermechanismforapproximatecount.
Ifyouwanttocut5minutesfromthemiddleofVBRfile(allweknowCDswherelastsongtakes
10minutesbut5minutesisapuresilence,HELL!)problemsarethesame.
Result?ntlikefeelingthat
IKmanycodecshaveproblemswithcreationVBRingoo
dquality.
PersonallyIcanteanyreasonwhytouVBR-IdontgiveafuckifsizeofoneCDinMP3is55MB
rybodyhasadifferenttaste...somepeoplepreferVBR.
firstframedoesntcontainaudiodataanditisudfor
special
informationaboutVBRfile.
Structureofthefirstframe:
ByteContent
0-3Standardaudioframeheader(asdescriptedabove).MostlyitcontainsvaluesFF
FB304C,fromwhichyoucancountFrameLen=txactlyenough
spaceforstoringVBRinfo.
Thisheadercontainssomeimportantinformationvalidforthewholefile:
-MPEG(MPEG1orMPEG2)
-SAMPLINGratefrequencyindex
-CHANNEL(JointStereoetc.)
4-xNotudtillstring"Xing"(58696E67).ThisstringisudasamainVBRfile
notfound,ringcanbeplaced
atdifferentlocationsaccordingtovaluesofMPEGandCHANNEL(ya,thefroma
fewlinesupwards):
36-39"Xing"forMPEG1andCHANNEL!=mono(mostlyud)
21-24"Xing"forMPEG1andCHANNEL==mono
21-24"Xing"forMPEG2andCHANNEL!=mono
13-16"Xing"forMPEG2andCHANNEL==mono
After"Xing"stringthereareplacedflags,numberofframesinfileandasize
theitemshas4Bytesanditisstoredas'int'number
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
stisthemostsignificantByteandthelastistheleast.
FollowingschemaisforMPEG1andCHANNEL!=mono:
40-43Flags
ValueNameDescription
00000001FramesFlagtifvaluefornumberofframesinfileisstored
00000002BytesFlagtifvalueforfilesizeinBytesisstored
00000004TOCFlagtifvaluesforTOC(ebelow)arestored
00000008VBRScaleFlagtifvaluesforVBRscalearestored
Allthevaluescanbestoredsimultaneously.
44-47Frames
Numberofframesinfile(includingthefirstinfoone)
48-51Bytes
FilelengthinBytes
52-151TOC(TableofContents)
Containsof100indexes(oneBytelength)imately
solvesproblemwithmovinginsidefile.
EachBytehasavalueaccordingthisformula:
(TOC[i]/256)*fileLenInBytes
.(andfileis5000
000Byteslength)youcanu:
TOC[(60/240)*100]=TOC[25]
andcorrespondingByteinfileisthenapproximatelyat:
(TOC[25]/256)*5000000
IfyouwanttotrimVBRfileyoushouldalsoreconstructFrames,BytesandTOC
properly.
152-155VBRScale
Idontknowexactlysystemofstoringofthisvaluesbutthisitemprobablydoesnt
havedeepermeaning.
四、ID3标准
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
MP3帧头中除了存储一些象private、copyright、original的简单音乐说明信息以外,没有考虑存放歌名、作
者、专辑名、年份等复杂信息,而这些信息在MP3应用中非常必要。1996年,FricKemp在“Studio3”项目中提
出了在MP3文件尾增加一块用于存放歌曲的说明信息,形成了ID3标准,至今已制定出ID3V1.0,V1.1,V2.0,
V2.3和V2.4标准。版本越高,记录的相关信息就越丰富详尽。
3V1
ID3V1.0标准并不周全,存放的信息少,无法存放歌词,无法录入专辑封面、图片等。V2.0是一个相当完备
的标准,但给编写软件带来困难,虽然赞成此格式的人很多,在软件中真正实现的却极少。绝大多数MP3仍使用I
D3V1.0标准。此标准是将MP3文件尾的最后128个字节用来存放ID3信息,这128个字节使用说明见表3。
表3ID3V1.0文件尾说明
字节长度(字节)说明
1-33
存放“TAG”字符,表示ID3V1.0标准,紧接其后的是歌曲信息。
4-3330
歌名
34-6330
作者
64-9330
专辑名
94-974
年份
98-12730
附注
1281
MP3音乐类别,共147种。
表4MP3音乐类别:
0'Blues'20'Alternative'40'AlternRock'60'Top40'
1'ClassicRock'21'Ska'41'Bass'61'ChristianRap'
2'Country'22'DeathMetal'42'Soul'62'Pop/Funk'
3'Dance'23'Pranks'43'Punk'63'Jungle'
4'Disco'24'Soundtrack'44'Space'64'NativeAmerican'
5'Funk'25'Euro-Techno'45'Meditative'65'Cabaret'
6'Grunge'26'Ambient'46'InstrumentalPop'66'NewWave'
7'Hip-Hop'27'Trip-Hop'47
'Instrumental
Rock'
67'Psychadelic'
8'Jazz'28'Vocal'48'Ethnic'68'Rave'
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
9'Metal'29'Jazz+Funk'49'Gothic'69'Showtunes'
10'NewAge'30'Fusion'50'Darkwave'70'Trailer'
11'Oldies'31'Trance'51'Techno-Industrial'71'Lo-Fi'
12'Other'32'Classical'52'Electronic'72'Tribal'
13'Pop'33'Instrumental'53'Pop-Folk'73'AcidPunk'
14'R&B'34'Acid'54'Eurodance'74'AcidJazz'
15'Rap'35'Hou'55'Dream'75'Polka'
16'Reggae'36'Game'56'SouthernRock'76'Retro'
17'Rock'37'SoundClip'57'Comedy'77'Musical'
18'Techno'38'Gospel'58'Cult'78'Rock&Roll'
19'Industrial'39'Noi'59'Gangsta'79'HardRock'
80Folk81Folk/Rock82NationalFolk83Swing
84Fast-Fusion85Bebob86Latin87Revival
88Celtic89Bluegrass90Advantgarde91GothicRock
92ProgressiveRock93PsychadelicRock94SymphonicRock95SlowRock
96BigBand97Chorus98EasyListening99Acoustic
100Humour101Speech102Chanson103Opera
104ChamberMusic105Sonata106Symphony107BootyBass
108Primus109PornGroove110Satire111SlowJam
112Club113Tango114Samba115Folklore
Anyothervalueshouldbeconsideredas'Unknown'
3V2
ID3V2到现在一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3。由于ID3V1记录
在MP3文件的末尾,ID3V2就只好记录在MP3文件的首部了(如果有一天发布ID3V3,真不知道该记录在哪
里)。也正是由于这个原因,对ID3V2的操作比ID3V1要慢。而且ID3V2结构比ID3V1的结构要复杂得多,
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
但比前者全面且可以伸缩和扩展。
下面就介绍一下ID3V2.3。
每个ID3V2.3的标签都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者
等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签
头和标签帧一起顺序存放在MP3文件的首部。
1、标签头
在文件的首部顺序记录10个字节的ID3V2.3的头部。数据结构如下:
charHeader[3];/*必须为"ID3"否则认为标签不存在*/
charVer;/*版本号ID3V2.3就记录3*/
charRevision;/*副版本号此版本记录为0*/
charFlag;/*存放标志的字节,这个版本只定义了三位,稍后详细解说*/
charSize[4];/*标签大小,包括标签头的10个字节和所有的标签帧的大小*/
1).标志字节
标志字节一般为0,定义如下:
abc00000
a--表示是否使用Unsynchronisation(这个单词不知道是什么意思,字典里也没有找到,一般不设置)
b--表示是否有扩展头部,一般没有(至少Winamp没有记录),所以一般也不设置
c--表示是否为测试标签(99.99%的标签都不是测试用的啦,所以一般也不设置)
2).标签大小
一共四个字节,但每个字节只用7位,最高位不使用恒为0。所以格式如下
0xxxxxxx0xxxxxxx0xxxxxxx0xxxxxxx
计算大小时要将0去掉,得到一个28位的二进制数,就是标签大小(不懂为什么要这样做),计算公式如
下:
inttotal_size;
total_size=(Size[0]&0x7F)*0x200000
+(Size[1]&0x7F)*0x400
+(Size[2]&0x7F)*0x80
+(Size[3]&0x7F)
2、标签帧
每个标签帧都有一个10个字节的帧头和至少一个字节的不固定长度的内容组成。它们也是顺序存放在文件
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
中,和标签头和其他的标签帧也没有特殊的字符分隔。得到一个完整的帧的内容只有从帧头中的到内容大
小后才能读出,读取时要注意大小,不要将其他帧的内容或帧头读入。
帧头的定义如下:
charFrameID[4];/*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/
charSize[4];/*帧内容的大小,不包括帧头,不得小于1*/
charFlags[2];/*存放标志,只定义了6位,稍后详细解说*/
1).帧标识
用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
TIT2=标题表示内容为这首歌的标题,下同
TPE1=作者
TALB=专集
TRCK=音轨格式:N/M其中N为专集中的第N首,M为专集中共M首,N和M为ASCII码表示的数字
TYER=年代是用ASCII码表示的数字
TCON=类型直接用字符串表示
COMM=备注格式:"eng0备注内容",其中eng表示备注所使用的自然语言
2).大小
这个可没有标签头的算法那么麻烦,每个字节的8位全用,格式如下
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
算法如下:
intFSize;
FSize=Size[0]*0x100000000
+Size[1]*0x10000
+Size[2]*0x100
+Size[3];
3).标志
只定义了6位,另外的10位为0,但大部分的情况下16位都为0就可以了。格式如下:
abc00000ijk00000
a--标签保护标志,设置时认为此帧作废
b--文件保护标志,设置时认为此帧作废
c--只读标志,设置时认为此帧不能修改(但我没有找到一个软件理会这个标志)
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
i--压缩标志,设置时一个字节存放两个BCD码表示数字
j--加密标志(没有见过哪个MP3文件的标签用了加密)
k--组标志,设置时说明此帧和其他的某帧是一组
值得一提的是winamp在保存和读取帧内容的时候会在内容前面加个'0',并把这个字节计算在帧内容的
大小中。
附:帧标识的含义
4).DeclaredID3v2frames
Thefollowingframesaredeclaredinthisdraft.
AENCAudioencryption
APICAttachedpicture
COMMComments
COMRCommercialframe
ENCREncryptionmethodregistration
EQUAEqualization
ETCOEventtimingcodes
GEOBGeneralencapsulatedobject
GRIDGroupidentificationregistration
IPLSInvolvedpeoplelist
LINKLinkedinformation
MCDIMusicCDidentifier
MLLTMPEGlocationlookuptable
OWNEOwnershipframe
PRIVPrivateframe
PCNTPlaycounter
POPMPopularimeter
POSSPositionsynchronisationframe
RBUFRecommendedbuffersize
RVADRelativevolumeadjustment
RVRBReverb
SYLTSynchronizedlyric/text
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
SYTCSynchronizedtempocodes
TALBAlbum/Movie/Showtitle
TBPMBPM(beatsperminute)
TCOMCompor
TCONContenttype
TCOPCopyrightmessage
TDATDate
TDLYPlaylistdelay
TENCEncodedby
TEXTLyricist/Textwriter
TFLTFiletype
TIMETime
TIT1Contentgroupdescription
TIT2Title/songname/contentdescription
TIT3Subtitle/Descriptionrefinement
TKEYInitialkey
TLANLanguage(s)
TLENLength
TMEDMediatype
TOALOriginalalbum/movie/showtitle
TOFNOriginalfilename
TOLYOriginallyricist(s)/textwriter(s)
TOPEOriginalartist(s)/performer(s)
TORYOriginalreleayear
TOWNFileowner/licene
TPE1Leadperformer(s)/Soloist(s)
TPE2Band/orchestra/accompaniment
TPE3Conductor/performerrefinement
TPE4Interpreted,remixed,orotherwimodifiedby
TPOSPartofat
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
TPUBPublisher
TRCKTracknumber/Positionint
TRDARecordingdates
TRSNInternetradiostationname
TRSOInternetradiostationowner
TSIZSize
TSRCISRC(internationalstandardrecordingcode)
TSSESoftware/Hardwareandttingsudforencoding
TYERYear
TXXXUrdefinedtextinformationframe
UFIDUniquefileidentifier
USERTermsofu
USLTUnsychronizedlyric/texttranscription
WCOMCommercialinformation
WCOPCopyright/Legalinformation
WOAFOfficialaudiofilewebpage
WOAROfficialartist/performerwebpage
WOASOfficialaudiosourcewebpage
WORSOfficialinternetradiostationhomepage
WPAYPayment
WPUBPublishersofficialwebpage
WXXXUrdefinedURLlinkframe
五、MP3文件实例剖析
在VC++中打开一个名为3文件,其内容如下:
000000FFFB528CC5052460002AC1
A6182
0400C121415064
……
0000D0FEFFFB528C118001EE90656E08200230
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
0000E0320CCDC9B8
0000F033B700000102FFFFFFF4E12FFFFFFFFF
……
0001A0DFFFFFFB528C120001FE90586E09A002
0001B033B0CA85E1500145F61961BC2680287C
0001C005ACB4202894FFFFFFFFFFFFFFFFFFFF
……
0013907FFFFFFFFD4E53540000
0013A000000000
……
0013F914000000
00
0000004E
该文件长度1416H(5.142K),帧头为:FFFB528C,转换成二进制为:
11011
1100
对照表1可知,3帧头信息见表5。
表3文件帧头信息
名称位值说明
同步信息
第1字节恒为FF,11位均为1。
版本
11MPEG1
层
01Layer3
CRC校验
1
不校验
位率
010164kbps
频率
0044.1kHz
帧长调节
1
调整,帧长是210字节。
保留字
0
没有使用。
声道模式
10
双声道
扩充模式
00
未使用。
PDF文件使用"pdfFactoryPro"试用版本创建
版权
1
合法
原版标志
1
原版
强调方式
00
未定义
第1397H开始的三个字节是544147,存放的是字符“TAG”,表示此文件有ID3V1.0信息。
139AH开始的30个字节存放歌名,前4个非00字节是54455354,表示“TEST”;
13F4H开始的4个字节是04191403,存放年份“04/25/2003”;
最后1个字节是4E,表示音乐类别,代号为78,即“Rock&Roll”;
其它字节均为00,未存储信息。
六、资料
/
PDF文件使用"pdfFactoryPro"试用版本创建ÿ
本文发布于:2023-03-10 13:25:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678425924204455.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:mp3.doc
本文 PDF 下载地址:mp3.pdf
留言与评论(共有 0 条评论) |