国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ID3文件格式

轉(zhuǎn)貼自:CSDN

ID3文件格式
前言
 2001年11月的一天,我決定整理一下我的硬盤中亂七八糟的MP3,但使用Winamp+Expleror效率太慢,到網(wǎng)上找了一下只有一個(gè)叫MP3/Tag Studio v2.6的工具還不錯(cuò),可惜是陰文的不說(shuō),還只能用30天,而且要插廣告。我呸,這么麻煩。一氣之下,決定自己寫一個(gè)從此在網(wǎng)上查閱資料,寫下了這輩子的第一個(gè)自由軟件和這篇文章。大家可以在http://www.csdn.net/cnshare/soft/10/10119.shtm看到這個(gè)軟件的詳細(xì)說(shuō)明和下載鏈接。
 
ID3v1
 ID3V1比較簡(jiǎn)單,它是存放在MP3文件的末尾,用16進(jìn)制的編輯器打開一個(gè)MP3文件,查看其末尾的128個(gè)順序存放字節(jié),數(shù)據(jù)結(jié)構(gòu)定義如下:
 char Header[3];    /*標(biāo)簽頭必須是"TAG"否則認(rèn)為沒有標(biāo)簽*/
 char Title[30];    /*標(biāo)題*/
 char Artist[30];   /*作者*/
 char Album[30];    /*專集*/
 char Year[4];    /*出品年代*/
 char Comment[30];   /*備注*/
 char Genre;    /*類型*/
 ID3V1的各項(xiàng)信息都是順序存放,沒有任何標(biāo)識(shí)將其分開,比如標(biāo)題信息不足30個(gè)字節(jié),則使用‘\0‘補(bǔ)足,否則將造成信息錯(cuò)誤。Genre使用原碼表示,對(duì)照表如下:
 /* 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到現(xiàn)在一共有4個(gè)版本,但流行的播放軟件一般只支持第3版,既ID3v2.3。由于ID3V1記錄在MP3文件的末尾,ID3V2就只好記錄在MP3文件的首部了(如果有一天發(fā)布ID3V3,真不知道該記錄在哪里)。也正是由于這個(gè)原因,對(duì)ID3V2的操作比ID3V1要慢。而且ID3V2結(jié)構(gòu)比ID3V1的結(jié)構(gòu)要復(fù)雜得多,但比前者全面且可以伸縮和擴(kuò)展。
 下面就介紹一下ID3V2.3。
 每個(gè)ID3V2.3的標(biāo)簽都一個(gè)標(biāo)簽頭和若干個(gè)標(biāo)簽幀或一個(gè)擴(kuò)展標(biāo)簽頭組成。關(guān)于曲目的信息如標(biāo)題、作者等都存放在不同的標(biāo)簽幀中,擴(kuò)展標(biāo)簽頭和標(biāo)簽幀并不是必要的,但每個(gè)標(biāo)簽至少要有一個(gè)標(biāo)簽幀。標(biāo)簽頭和標(biāo)簽幀一起順序存放在MP3文件的首部。
 
一、標(biāo)簽頭
在文件的首部順序記錄10個(gè)字節(jié)的ID3V2.3的頭部。數(shù)據(jù)結(jié)構(gòu)如下:
 char Header[3];    /*必須為"ID3"否則認(rèn)為標(biāo)簽不存在*/
 char Ver;    /*版本號(hào)ID3V2.3就記錄3*/
 char Revision;    /*副版本號(hào)此版本記錄為0*/
 char Flag;    /*存放標(biāo)志的字節(jié),這個(gè)版本只定義了三位,稍后詳細(xì)解說(shuō)*/
 char Size[4];    /*標(biāo)簽大小,包括標(biāo)簽頭的10個(gè)字節(jié)和所有的標(biāo)簽幀的大小*/

 1.標(biāo)志字節(jié)
 標(biāo)志字節(jié)一般為0,定義如下:
 abc00000

 a -- 表示是否使用Unsynchronisation(這個(gè)單詞不知道是什么意思,字典里也沒有找到,一般不設(shè)置)
 b -- 表示是否有擴(kuò)展頭部,一般沒有(至少Winamp沒有記錄),所以一般也不設(shè)置
 c -- 表示是否為測(cè)試標(biāo)簽(99.99%的標(biāo)簽都不是測(cè)試用的啦,所以一般也不設(shè)置)
 
 2.標(biāo)簽大小
 一共四個(gè)字節(jié),但每個(gè)字節(jié)只用7位,最高位不使用恒為0。所以格式如下
 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
 計(jì)算大小時(shí)要將0去掉,得到一個(gè)28位的二進(jìn)制數(shù),就是標(biāo)簽大小(不懂為什么要這樣做),計(jì)算公式如下:
 int total_size;
 total_size =   (Size[0]&0x7F)*0x200000
   +(Size[1]&0x7F)*0x400
   +(Size[2]&0x7F)*0x80
   +(Size[3]&0x7F)
 
二、標(biāo)簽幀
每個(gè)標(biāo)簽幀都有一個(gè)10個(gè)字節(jié)的幀頭和至少一個(gè)字節(jié)的不固定長(zhǎng)度的內(nèi)容組成。它們也是順序存放在文件中,和標(biāo)簽頭和其他的標(biāo)簽幀也沒有特殊的字符分隔。得到一個(gè)完整的幀的內(nèi)容只有從幀頭中的到內(nèi)容大小后才能讀出,讀取時(shí)要注意大小,不要將其他幀的內(nèi)容或幀頭讀入。

幀頭的定義如下:
 char FrameID[4];  /*用四個(gè)字符標(biāo)識(shí)一個(gè)幀,說(shuō)明其內(nèi)容,稍后有常用的標(biāo)識(shí)對(duì)照表*/
 char Size[4];   /*幀內(nèi)容的大小,不包括幀頭,不得小于1*/ 
 char Flags[2];   /*存放標(biāo)志,只定義了6位,稍后詳細(xì)解說(shuō)*/
 
 1.幀標(biāo)識(shí)
 用四個(gè)字符標(biāo)識(shí)一個(gè)幀,說(shuō)明一個(gè)幀的內(nèi)容含義,常用的對(duì)照如下:
 TIT2=標(biāo)題 表示內(nèi)容為這首歌的標(biāo)題,下同
 TPE1=作者
 TALB=專集
 TRCK=音軌 格式:N/M  其中N為專集中的第N首,M為專集中共M首,N和M為ASCII碼表示的數(shù)字
 TYER=年代 是用ASCII碼表示的數(shù)字
 TCON=類型 直接用字符串表示
 COMM=備注 格式:"eng\0備注內(nèi)容",其中eng表示備注所使用的自然語(yǔ)言

 2.大小
 這個(gè)可沒有標(biāo)簽頭的算法那么麻煩,每個(gè)字節(jié)的8位全用,格式如下
 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
 算法如下:
 int FSize;
 FSize =  Size[0]*0x100000000
  +Size[1]*0x10000
  +Size[2]*0x100
  +Size[3];
  
 3.標(biāo)志
 只定義了6位,另外的10位為0,但大部分的情況下16位都為0就可以了。格式如下:
 abc00000 ijk00000
 a -- 標(biāo)簽保護(hù)標(biāo)志,設(shè)置時(shí)認(rèn)為此幀作廢
 b -- 文件保護(hù)標(biāo)志,設(shè)置時(shí)認(rèn)為此幀作廢
 c -- 只讀標(biāo)志,設(shè)置時(shí)認(rèn)為此幀不能修改(但我沒有找到一個(gè)軟件理會(huì)這個(gè)標(biāo)志)
 i -- 壓縮標(biāo)志,設(shè)置時(shí)一個(gè)字節(jié)存放兩個(gè)BCD碼表示數(shù)字
 j -- 加密標(biāo)志(沒有見過(guò)哪個(gè)MP3文件的標(biāo)簽用了加密)
 k -- 組標(biāo)志,設(shè)置時(shí)說(shuō)明此幀和其他的某幀是一組
 
 值得一提的是winamp在保存和讀取幀內(nèi)容的時(shí)候會(huì)在內(nèi)容前面加個(gè)‘\0‘,并把這個(gè)字節(jié)計(jì)算在幀內(nèi)容的大小中。
 
 詳細(xì)的情況可以到www.id3.org查詢,對(duì)于ID3V1和ID3V2的讀寫,我用DELPHI寫了兩個(gè)類來(lái)實(shí)現(xiàn),可以寫信給我索取q.d.zhang@sohu.com
 
附:幀標(biāo)識(shí)的含義
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

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MP3文件的ID3V1信息與ID3V2信息結(jié)構(gòu)的分析
詳述一則數(shù)據(jù)庫(kù)死鎖故障的分析過(guò)程
<frame> 標(biāo)簽
純c語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)分配多維數(shù)組的方法
好看的qq備注前綴符號(hào),不要太長(zhǎng),要純符號(hào) 不要文字(7組左右) 謝謝
修改srs服務(wù)器端支持h.265編碼(rtmp協(xié)議)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服