分析ID3格式

2021-07-24 14:17:43 字數 3055 閱讀 2605

id3 是一種 metadata 容器,多應用於***格式的音訊檔案中。

id3,一般是位於乙個***檔案的開頭或末尾的若干位元組內,附加了關於該***的歌手,標題,**名稱,年代,風格等資訊,該資訊就被稱為id3資訊,id3資訊分為兩個版本,v1和v2版。 其中:v1版的id3在***檔案的末尾128位元組,以tag三個字元開頭,後面跟上歌曲資訊。 v2版一般位於***的開頭,可以儲存歌詞,該**的等大容量的資訊。

id3檢視的工具:afinst

用例:我要你

comm: 備註

talb:**

tit2:表示這首歌的標題。

tpe1:作者

trck:音軌。 格式:n/m 其中n為專集中的第n首,m為專集中共m首,n和m為ascii碼表示的數字

apic:apic=attached picture(**封面)

id3v1.1的資料結構如下:

乙個英文本母乙個位元組,乙個中文兩個位元組。 id3v1的各項資訊都是順序存放,沒有任何標識將其分開,比如標題資訊不足30個位元組,則使用』\0』補足,否則將造成資訊錯誤。

tag:固定字段。」544147」

花火:title。」 bba8bbf0」,不足30個位元組,用0補充。

丁噹(叮噹):aritist。」 b6a1b5b128b6a3b5b129」,不足30個位元組,用0補充。

夜貓:album。」 d2b9c3a8」,不足30個位元組,用0補充。

2009:year。」 32303039」,4個位元組。

www.top100.cn巨鯨**網:」 5757572e544f503130302e434ebedebea8d2f4c0d6cdf8」

genre:

2020202000010c

2.1.1 標誌位元組flag

標誌位元組一般為0,定義如下:

abc00000

a – 表示是否使用unsynchronisation(這個一般不設定)

b – 表示是否有擴充套件頭部,一般沒有(至少winamp沒有記錄),所以一般也不設定

c – 表示是否為測試標籤(99.99%的標籤都不是測試用的,所以一般也不設定)

3.1.2標籤大小size[4]

一共四個位元組,但每個位元組只用7位,最高位不使用恒為0。所以格式如下

0******x 0******x 0******x 0******x

計算大小時要將0去掉,得到乙個28位的二進位制數,就是標籤大小。計算公式如下:

int total_size;

total_size = (size[0]&0x7f)*0x200000

+(size[1]&0x7f)*0x4000

+(size[2]&0x7f)*0x80

+(size[3]&0x7f)

3.2 標籤幀

標籤幀=10位元組的幀頭+至少不固定位元組長度的內容。

順序存放在檔案中,標籤幀和標籤頭以及標籤幀和其他的標籤幀之間沒有特殊的字元分隔。得到乙個完整的幀的內容只有從幀頭中得到內容大小後才能讀出,讀取時要注意大小,不要將其他幀的內容或幀頭讀入。

3.2.1 幀頭(10位元組)

幀頭的定義如下:

a. frameid[4]幀標識

用四個字元標識乙個幀,說明乙個幀的內容含義,常用的對照如下:

tit2=標題

tpe1=作者

talb=專集

trck=音軌 (格式:n/m 其中n為專集中的第n首,m為專集中共m首,n和m為ascii 碼表示的數字)

tyer=年代 是用ascii碼表示的數字

tcon=型別 直接用字串表示

comm=備註 格式:」eng\0備註內容」,其中eng表示備註所使用的自然語言

附:幀標識的含義

b. size[4]幀內容大小

每個位元組的8位全用,格式如下

******xx ******xx ******xx ******xx

演算法如下:

int fsize;

fsize = size[0]*0x1000000

+size[1]*0x10000

+size[2]*0x100

+size[3];

c. flags[2]存放標誌

只定義了6位,另外的10位為0,但大部分的情況下16位都為0就可以了。格式如下:

abc00000 ijk00000

a – 標籤保護標誌,設定時認為此幀作廢

b – 檔案保護標誌,設定時認為此幀作廢

c – 唯讀標誌,設定時認為此幀不能修改(但我沒有找到乙個軟體理會這個標誌)

i – 壓縮標誌,設定時乙個位元組存放兩個bcd碼表示數字

j – 加密標誌,(沒有見過哪個***檔案的標籤用了加密)

k – 組標誌,設定時說明此幀和其他的某幀是一組

值得一提的是winamp在儲存和讀取幀內容的時候會在內容前面加個』\0』,並把這個位元組計算在幀內容的大小中。

tit2:幀標識(4個位元組)。「54495432」。

5:幀大小(4個位元組)。「00000005」。

存放標誌:「0000」。

花火:幀內容(長度=幀大小,即5個位元組)。「00bba8bbf0」

同理可分析其他id3v2標籤幀,比如year。

ID3 演算法介紹

如果我的朋友說介紹個女生給我認識,那麼我會問我朋友女生的條件,然後再決定認不認識。他說他只知道關於女生的這些資訊 王者榮耀 玩的好不好。喜不喜歡寵物。長得漂不漂亮。脾氣好不好。長頭髮還是短頭髮。是否要求南方有車有房。喜不喜歡吃辣條。會不會做飯。但是我的朋友很勢利,他說我每問乙個關於女生的問題就必須給...

ID3演算法Java實現

1.1 資訊熵 熵是無序性 或不確定性 的度量指標。假如事件a 的全概率劃分是 a1,a2,an 每部分發生的概率是 p1,p2,pn 那資訊熵定義為 通常以2 為底數,所以資訊熵的單位是 bit。1.2 決策樹 決策樹是以例項為基礎的歸納學習演算法。它從一組無次序 無規則的元組中推理出決策樹表示形...

java實現ID3演算法

id3是經典的分類演算法,要理解id3演算法,需要先了解一些基本的資訊理論概念,包括資訊量,熵,後驗熵,條件熵。id3演算法的核心思想是選擇互資訊量最大的屬性作為分割節點,這樣做可以保證所建立的決策樹高度最小。樹結構 c4.5決策樹資料結構 author zhenhua.chen descripti...