目錄
1 前言
該文檔旨在提供一個對MP3整體的認識,方便入門,文章引用已標明,如有錯誤紕漏,非常歡迎指出。
MP3全稱爲MPEG Audio Layer 3,是一種音頻編碼方案。MPEG有三種音頻編碼方案,包括Layer1、Layer2、Layer3。通常MP3指的是Layer3。
2 格式解析
MP3主要由多個數據幀組成,一個數據幀包括幀頭與數據塊。在MP3文件的開頭,可能包括ID3V2元數據,而文件末尾可能包括128字節的ID3V1元數據MP3最開始只有數據幀,對於應用者而言,無從得知該mp3文件的相關信息,包括演唱者,作曲家,專輯名等,因此產生了ID3V1標籤,固定128個字節,放在文件最後,該標籤可以提供如上的信息。然而,固定的128個字節ID3V1標籤所能提供的信息實在有限,越來越不滿足應用的需要,ID3V2應運而生,該標籤存在於文件首部,作爲ID3V1的補充。畢竟,文件尾部已經被佔用了。
2.1 ID3V1
ID3v1是第一個版本的音頻標籤,長度爲固定的 128 字節,位置在 MP3 文件的尾部。
名稱 | 字長長度 | 字節位置 | 說明 |
---|---|---|---|
Tag | 3 | 1~3 | ID3V1標識符“TAG”的Ascii碼 |
Title | 30 | 4~33 | 歌曲名的音頻 |
Artist | 30 | 34~63 | 歌手名的音頻 |
Album | 30 | 64~93 | 專輯名的音頻 |
Year | 4 | 94~97 | 日期信息音頻 |
Comment | 28 | 98~125 | 註釋信息,有時爲30字節 |
Reserved | 1 | 126 | =0說明有音軌,下一字節就是音軌;≠0表示註釋是30個字節 |
Track | 1 | 127 | 音軌(字節型數值),歌曲在專輯裏的序號 |
Genre | 1 | 128 | 歌曲風格(字節型數值) |
註釋:
1.如果MP3的註釋=30字節,那麼就要佔用 Reserved 和 Track 兩個字節,這要看 Reserved 是否=0,如果=0,那麼註釋有 28 個字節。如果不是,那麼註釋有 30 個字節。當註釋=30 個字節的時候,那就沒有 Track 了。
2.如果 MP3 文件後面雖然有“TAG”三個字母,但字母后面全是0,那就不是一個合法的 ID3V1 信息,應該認爲沒有 ID3V1 信息。
3.ID3V1 的各項信息都是順序存放,沒有任何標識將其分開,一般用 0補足規定的長度。比如歌曲名有 20 個字節,則在歌曲名後要補足 10 個 0,否則將造成信息錯誤。
4.歌曲風格共 148 種,用編號表示,詳情可上網查詢。其數據存放按照順序一個個存放,如果長度不足則補 0,ID3v1 應該已經比較少用了。
2.2 ID3V2
ID3V2由10個字節的標籤頭與多個標籤幀組成,標籤幀不固定長度,包括10個字節的幀頭與至少1字節的幀內容。
2.2.1 ID3V2.3標籤頭內容
名稱 | 字節長度 | 字節位置 | 說明 |
---|---|---|---|
Header | 3 | 1~3 | ID3V2.3標識符"ID3"的Ascii碼 |
Ver | 1 | 4 | 版本號 |
Revision | 1 | 5 | 副版本號 |
Flag | 1 | 6 | 標誌字節,一般沒意義,=00 |
Size | 4 | 7~10 | 標籤內容長度,高位在前,不包括標籤頭的10個字節 |
註釋
1.Size 字段的計算公式如下(從左至右):
size =字節1的值*0x200000+字節2的值*0x4000+字節3的值*0x80+字節4的值(每個字節只用7位,最高位不使用,恆爲0)
2.如果所有標籤幀的總長度<標籤內容長度,則須用0填滿。
2.2.2 ID3V2.3標籤幀結構
名稱 | 字節長度 | 字節位置 | 說明 |
---|---|---|---|
FrameID | 4 | 1~4 | 幀標識符的Ascii碼 |
Size | 4 | 5~8 | 幀內容及編碼方式的合計長度,高位在前,不包括幀頭 |
Flags | 2 | 9~10 | 標誌,只使用了6位,一般均=0 |
幀內容 | 至少 1 個字節 |
ID3V2長度不固定,尾部可能有補空數據。
註釋
1.標籤幀大小計算公式:Size = Size[0]*0x1000000+Size[1]*0x10000+Size[2]*0x100+Size[3]。
2.標籤幀之間沒有特殊的分隔符,要得到一個完整的標籤幀內容必須先從幀頭中得到幀內容長度。
3.幀內容均爲字符串,常以 00 開頭。
4.Flags一般沒用,通常爲0.
2.2.3 標籤幀標識符
名稱 | 意義 | 名稱 | 意義 |
---|---|---|---|
TALB | 專輯 | TCOM | 作曲家 |
TCON | 流派 | TCOP | 版權 |
TDAT | 日期 | TENC | 編碼 |
TEXT | 歌詞作者 | TFLT | 文件類型 |
TIT2 | 標題 | TIT3 | 副標題 |
TLAN | 語言 | TLEN | 長度 |
TMED | 媒體類型 | TOWM | 文件所有者 |
TRCK | 音軌 | TSIZ | 大小 |
註釋
1.幀內容是數字的,都用 Ascii 字符表示。
2.有的 TCON(風格、流派)的幀內容是直接用字符串表示的,如“genre”,而有的則是用編號表示的,如“28 31 32 29”就是用字符串“(12)”表示 12 號風格,我們在解析的時候要注意。
3.TRCK(音軌)的幀內容格式是:N/M。其中,分母表示專輯中共有 M 首歌曲,分子表示專輯中的第 N 首曲。
2.3 數據幀
2.3.1 編碼方式:CBR與VBR
MP3有兩種編碼方式,一種是CBR,一種是VBR,前者是恆定碼率,後者是可變碼率。
恆定碼率的幀大小是固定的,除去ID3V1與ID3V2,有效數據幀總長度爲幀大小與幀數據的乘積,從而可算得MP3播放時長,跳播容易。一般有效數據幀第一幀即爲音頻數據,但也有例外,有些編碼器在編碼CBR文件時也像VBR那樣將信息記入第一幀,比如著名的lame,它使用"Info"來做CBR的標記。
VBR是XING公司推出的算法,所以在MP3的FRAME裏會有“Xing"這個關鍵字(也有用"Info"來標識的,現在很多流行的小軟件也可以進行VBR壓縮,它們是否遵守這個約定,那就不得而知了),它存放在MP3文件中的第一個有效幀的數據區裏,它標識了這個MP3文件是VBR的,也就是說,MP3數據幀如果是VBR編碼,則第一幀是VBR幀。。同時第一個幀裏存放了MP3文件的幀的總個數,這就很容易獲得了播放總時間,同時還有100個字節存放了播放總時間的100個時間分段的幀索引,假設4分鐘的MP3歌曲,240S,分成100段,每兩個相鄰INDEX的時間差就是2.4S,所以通過這個INDEX,只要前後處理少數的FRAME,就能快速找出我們需要快進的幀頭。其實這第一幀就相當於文件頭了 。[1]
CBR相關計算公式:
LayerII 與 LayerII
幀長 = (每幀採樣次數 * 比特率 / 8 / 採樣率) + 補白
LayerI
幀長 = (每幀採樣次數 * 比特率 / 8 / 採樣率) + 補白 * 4
CBR 總播放時長計算公式:
播放時長 = (文件大小 – ID3標籤大小) * 8 / 比特率
VBR相關計算公式:
VBR 總播放時長計算公式:
播放時長 = 有效數據幀總幀數 * 每幀採樣數 / 採樣率
每一幀的播放時長計算公式:
幀播放時長 = 採樣數 / 採樣頻率 * 1000 毫秒
關於VBR幀、INFO幀、VBRI幀的結構與實例分析,參見參考文獻[1],該文章對照着MP3二進制數據,解析了VBR幀與VBRI幀。另外也可以見附錄1,引用自文獻[1]。
2.3.2 有效音頻數據幀
每個幀都有一個幀頭,長度是四個字節,幀後面可能有2字節的CRC校驗,取決於幀頭的第16位,爲0則無校驗,爲1則有校驗,後面是可變長度的附加信息,對於標準的MP3文件來說,其長度是32字節,緊接其後的是壓縮的聲音數據,當解碼器讀到此處時就進行解碼了。
幀頭結構
typedef FrameHeader
{
unsigned int sync:11; //同步信息
unsigned int version:2; //版本
unsigned int layer: 2; //層
unsigned int error protection:1; // CRC校驗
unsigned int bitrate_index:4; //位率
unsigned int sampling_frequency:2; //採樣頻率
unsigned int padding:1; //幀長調節
unsigned int private:1; //保留字
unsigned int mode:2; //聲道模式
unsigned int mode extension:2; //擴充模式
unsigned int copyright:1; // 版權
unsigned int original:1; //原版標誌
unsigned int emphasis:2; //強調模式
}HEADER;
幀頭信息
幀頭信息如下表所示,該圖引用於博文[1]。
幀邊信息(通道信息)
在幀頭後邊是Side Info(姑且稱之爲通道信息)。對標準的立體聲MP3文件來說其長度爲32字節。當解碼器在讀到上述信息後,就可以進行解碼了。幀邊信息解碼的主要目的在於找出解這幀的各個參數,包括主數據開始位置,尺度因子長度等。幀邊信息如下圖所示。
3 解碼原理
MP3音頻解碼可以用下圖表示總體流程,具體可參見文檔《mp3解碼算法原理詳解》。
在博文《MP3解碼詳細過程》中,也有大概地論述MP3解碼流程,如下所述:
PCM信號進行MP3壓縮時,以1152個PCM採樣值爲單位,封裝成具有固定長度的MP3數據幀,幀是MP3文件的最小組成單位。在解碼時,利用數據幀裏的信息就可以恢復出1152個PCM採樣值。這1152個採樣值被分爲2個粒度組,每個粒度組包含576個採樣值。一個MP3數據幀分爲5個部分:幀頭、CRC校驗值、邊信息、主數據、附加數據。
1 數據流的同步以及幀頭信息的讀取
MP3數據流的同步以幀爲單位,每一幀的幀頭都包含同步信息。這個同步信息是連續的12比特的‘1’組成。MP3音頻解碼過程中的第一步就是使解碼器與輸入數據流同步。在啓動解碼器後,可以通過搜索數據流中的12比特長的同步字來完成。在取得同步以後跟着的數據就是幀頭信息,包括採樣率、填充位、比特率等信息。
2 主數據的讀取
在MP3編碼過程中使用了比特池技術,所以當前幀的主數據不一定全部都在當前幀中,在解碼過程中,必須結合主數據開始指針的值來確定主數據的開始位置。主數據包含的數據有縮放因子、哈夫曼數據及附加數據。這些字段在主數據中有固定的格式。
3 哈夫曼解碼和反量化
在MP3編碼過程中,根據心理聲學模型的輸出,對離散餘弦變換的輸出樣本以粒度爲單位進行的量化和分配,再對量化的結果進行哈夫曼編碼。量化和編碼主要是通過循環迭代完成的,循環模塊分爲三層來描述,最高層爲幀循環,它調用外層迭代循環,而外層迭代循環又調用內層迭代循環。但在解碼過程中,哈夫曼解碼和反量化過程是分開實現的。每個粒度組的頻率線都是用不同的哈夫曼表來進行編碼的,因此在解碼過程中,需要採用不同的解碼方法。反量化頻譜過程就是基於所得到的哈夫曼解碼數據,根據逆量化全縮放公式和幀邊信息,對於不同的窗類型採用不同的公式以恢復576個頻率線的真實值。
4 立體聲處理
5 重排序和反混疊
反量化過程中得出的頻譜值不是按相同順序排列的。在編碼的MDCT過程中,對於長窗產生的頻譜值先按子帶然後按頻率排列;對於短窗,產生的頻譜值按子帶、窗、頻率的順序排列。爲了提供哈夫曼編碼效率,短窗中的數據被重新排列,按照子帶、頻率、窗的順序排列。解碼時,重排序及時將短窗中的頻譜值重新排列。同樣,在編碼的MDCT過程中,爲了得到更好的頻域特性,對長窗對應每個子帶進行了去混疊處理,爲了得到正確的音頻信號,在解碼時必須對長窗對應的子帶進行混疊重建。
6 逆向離散餘弦變換
逆向離散餘弦變換主要是使用逆向離散餘弦變換的公式,對反量化得出的信號進行變換。逆向離散餘弦變換的計算十分複雜,爲了提高效率,可以對計算做一些優化。
7 頻率反轉和子帶合成
頻率反轉是對逆向離散餘弦變換的輸出值中的奇數號子帶(0到31號子帶中的1,3,5,...,31)中的奇數號樣本值(每個子帶中的0到17號樣本值的1,3,5,...,17號樣本值)進行反相處理,用來補償編碼時爲提高離散餘弦變換效率而進行的頻率反轉。子帶合成濾波器將32個帶寬相等的子帶中的頻域信號反變換成時域信號。子帶合成是逆向離散餘弦變換後的一個通道中32個子帶的樣值,經過一系列的計算還原出32個PCM數字音頻信號的過程。子帶合成過程先將32個子帶樣值進行逆向離散餘弦變換,生成64箇中間值,將這64箇中間值轉入到一個長爲1024點的類似先進先出FIFO的緩存,再在這1024個值中抽取一半,構成一個512個值的矢量,再進行加窗運算,最後將加窗結果進行疊加生成32個時域輸出。
4 常見問題
1.MP3的同步標識是什麼?
“FF FA xx xx”或者“FF FB xx xx”
2.採樣率有哪些?
在當今的主流採集卡上,採樣頻率一般共分爲22.05KHz、44.1KHz、48KHz三個等級,22.05KHz只能達到FM廣播的聲音品質,44.1KHz則是理論上的CD音質界限,48KHz則更加精確一些。
3.MP3的編碼原理大概是怎樣的?
MP3音頻壓縮包含編碼和解碼兩部分,編碼是將原始信號轉換成電平信號的過程,解碼即是逆過程,MP3 採用了感知音頻編碼(PerceptualAudio Coding)這一失真算法。人耳感受聲音的頻率範圍是20Hz-20kHz,MP3截掉了大量的冗餘信號和無關的信號,編碼器通過混合濾波器組將原始聲音變換到頻率域,利用心理聲學模型,估算剛好能被察覺到的噪聲水平,再經過量化,轉換成Huffman編碼,形成MP3位流。解碼器要簡單得多,它的任務是從編碼後的譜線成分中,經過反量化和逆變換,提取出聲音信號。[1]
4.MP3一幀的時長是多少秒?一幀大小是多大?[1]
根據公式,幀時長=每幀採樣數/採樣頻率,易知MPEG1 Layer3在44.1kHz的條件下:
幀時長=1152/4=0.026s
一幀數據的採樣個數根據音頻的Layer與MPEG標準不同而不同。如下表所示:
None | MPEG 1 | MPEG 2(LSF) | MPEG 2.5(LSF) |
---|---|---|---|
Layer 1 | 384 | 384 | 384 |
Layer 2 | 1152 | 1152 | 1152 |
Layer 3 | 1152 | 576 | 576 |
幀長度是壓縮時每一幀的長度,包括幀頭的4個字節。它將填充的空位也計算在內。Layer 1的一個空位長4字節,Layer 2和Layer 3的空位是1字節。當讀取MPEG文件時必須計算該值以便找到相鄰的幀。注意:因爲有填充和比特率變換,幀長度可能變化
計算公式如下:
Layer 1:Len(字節) = ((每幀採樣數/8比特率)/採樣頻率)+填充4
Layer2/3:Len(字節) = ((每幀採樣數/8*比特率)/採樣頻率)+填充
例:MPEG1 Layer3 比特率128000,採樣率44100,填充0,幀長度爲:((1152/8*128K)/44.1K+0=417字節
5.VBR頭結構是怎樣的?
VBR文件頭位於MP3文件中第一個有效幀的數據區 ,引用自參考文獻[1]。
6.ID3是怎麼來的?
起初MP3並不能保存歌手名稱、專輯名稱、歌名、備註等附加信息,直到1996年,一個叫做Eric Kemp的人制作了Studio3軟件,它可以在MP3文件的最後部分增加固定的128字節小塊數據,用來記錄音樂的信息。很快,MP3ext的作者Michael Mutschler又將這個標記進行了擴展,並正式將其命名爲ID3,而且還使用註釋的最後兩個字節來記錄CD和音樂的來源,其版本被定爲ID3v1.1。不過ID3v1版本的限制太多,比如歌曲名長度被限制在30個英文字母,稍長一點的曲名就會被截掉,讓人頭痛不已。在這種情況下,它的升級版本ID3v2出現了。它首先解除了128個字節的限制,各個字段的長度也是彈性可變的,使可包含的音樂信息更爲豐富,除了歌名、專輯名、演唱者外,還可保存歌詞、均衡器設置、圖片等信息。ID3v2的設計更靈活,擴展性更強,並且支持Unicode,因此歌詞信息支持多語言。ID3v2甚至能包含一個文件,所以未來的MP3可能會附帶有視頻文件,讓你不僅能聽,還可以看。微軟的Windows Midia Player就能很好地支持ID3v2,甚至在Windows XP中,你不需要打開任何播放器,只要進入一個存放MP3的文件夾,系統就能讀取ID3v2的信息來對文件分類排列。
5 參考資料
1.《MP3文件結構解析》(https://blog.csdn.net/aigoogle/article/details/21384895)
2.《MP3解碼算法原理詳解》(https://wenku.baidu.com/view/0dc1c929647d27284b735149.html)
6 附錄[1]
6.1 VBR幀
標準聲音幀頭:Mp3時,爲“FF FA xx xx”或者“FF FB xx xx”
36-39:Mp3的就是這種情況,第5至36的數據存儲的是前面提到過的32字節的邊信息,無效邊信息時是32字節的“00”
45-48:幀數(包括第一幀)
VBR規模:VBR規模,用於位率變動音頻質量指示,最差 0,最好 100,大端[可選]
舉例說明: https://blog.csdn.net/xsjm206/article/details/6719958
曲子是:劉德華 - 虹橋機場的咖啡廳.mp3(5,898,130字節,時長3分14秒)
a. 第37至40地址爲“58 69 6E 67”,就是“Xing”標誌了;
b. 第41至44地址爲“00 00 00 0F”,這裏是Flag了,表示該幀存儲了幀數、文件長度、目錄表和VBR規模信息。
c. 第45至48地址爲“00 00 1D 11”,這裏是文件的總幀數(包括第一幀),是big-endia的,(116^3+1316^2+1*16+1)幀。
d. 第49至52地址爲“00 59 FD DE”,這裏是文件的總大小,也是Big-Endian的,(516^5+916^4+1516^3+1316^2+13*16+14)=5,897,694(字節)。
e. 第53至152地址,就是100字節的目錄表了(稱作TOC表),如圖藍色的部分。
TOC (Table of Contents)
TCO 索引的計算方式如下:文件長度 100 比如文件持續 240 秒,我需要跳到 60 秒,文件長度爲 5000000 字節 計算如下TOC[(60/240)*100] =TOC[25] 然後相對於文件中的位置大約是在 (TOC[25]/256) * 5000000 如果要自己重建的話,基本是把這個步驟反過來做就可以了。要求準確的話,就需要根據時間點找到正確幀的位置然後再計算, 定位幀的做法都是從第一幀開始搜索。
f. 第153至156字節地址爲“00 00 00 64”,,音頻質量指示質量指示器,爲 0(最好)-100(最差)的 Big-Endian 值,沒想到這個文件的音質是最差的100。
g. 接下來是Lame版本的相關信息。
Info 幀
info幀,結構和Xing幀是相同的,從一些網上的資料顯示:這種類型的幀有點怪,在CBR文件中的第一個數據幀可以是Info幀,在VBR文件中的第一個數據幀也有可能是Info幀。根據文章xx,第一個數據幀爲Info幀的文件大概率是CBR文件,比如Kugoo軟件製作的鈴聲的第一幀都是Info幀,而且是CBR文件。
VBRI幀
據瞭解,目前此頭信息,只有用 Fraunhofer 的編碼器生成的 MPEG音頻文件,纔會用到此頭。其和Xing 頭不一樣,其放在第一個MPEG頭的後面,大小正好是 32字節。其位置,長度和示例,都是以字節爲單位。下表是 VBRi 頭的具體格式及含義,單位爲字節:
位置(字節) | 長度(字節) | 含義 | 示例 |
---|---|---|---|
0 | 4 | 4個 ASCII字符的 VBR 頭ID: “VBRI”無NULL結尾 | VBRI |
4 | 2 | 版本 ID,大端,類型:DWORD | 00 01 |
6 | 2 | 延遲,類型:float | 0D B1 |
8 | 2 | 音頻質量指示 | 00 64 |
10 | 4 | 文件總大小,大端,類型:DWORD | 00 5F 09 68 |
14 | 4 | 總的幀數,大端,類型:DWORD | 00 00 26 8C |
18 | 2 | TOC 表的表項數目,大端,類型:WORD | 00 9A |
20 | 2 | TOC 表項的縮放因子,大端,類型:DWORD | 00 02 |
22 | 2 | 單個 TOC 表項的大小,單位字節,最大爲 4,大端,類型:DWORD | 00 02 |
24 | 2 | 幀數/表項,大端,類型:WORD | 00 40 |
26 | 用於檢索的 TOC 表,整型值,可以通過每個表項大小乘以表項個數得到此TOC 表的總大小,大端 | 9A * 02 = 0X134 |
如下圖所示,藍色部分包括了4個字節的幀頭,32個字節的空字節,以及26個字節的不包括TOC表的VBRI幀內容。從地址0x6BC開始,0x6BC--0X6BF爲VBRI字符。從0X6D7至0X80A爲TOC表內容。文件總大小爲0X5F0968字節,不包括ID3與TAG,也就是說,如果用HXD看整個文件的大小,實際上是大於0X5F0968字節的。
6.2 MPEG 音頻版本表
index | content |
---|---|
00 | MPEG 2.5 |
01 | reserved |
10 | MPEG 2 |
11 | MPEG 1 |
6.3 比特率索引表(單位 Kbps)
Bitrate Index | MPEG 1 | MPEG 2,2.5 | |||
---|---|---|---|---|---|
LayerI | LayerII | LayerIII | LayerI | LayerII&LayerIII | |
0000 | FREE | ||||
0001 | 32 | 32 | 32 | 32 | 8 |
0010 | 64 | 48 | 40 | 48 | 16 |
0011 | 96 | 56 | 48 | 56 | 24 |
0100 | 128 | 64 | 56 | 64 | 32 |
0101 | 160 | 80 | 64 | 80 | 40 |
0110 | 192 | 96 | 80 | 96 | 48 |
0111 | 224 | 112 | 96 | 112 | 56 |
1000 | 256 | 128 | 112 | 128 | 64 |
1001 | 288 | 160 | 128 | 144 | 80 |
1010 | 320 | 192 | 160 | 160 | 96 |
1011 | 352 | 224 | 192 | 176 | 112 |
1100 | 384 | 256 | 224 | 192 | 128 |
1101 | 416 | 320 | 256 | 224 | 144 |
1110 | 448 | 384 | 320 | 256 | 160 |
1111 | FREE |
6.4 採樣率索引表
採樣率索引 | MPEG-1 (Hz) | MPEG-2 (Hz) | MPEG-2.5 (Hz) |
---|---|---|---|
00 | 44100 | 22050 | 11025 |
01 | 48000 | 24000 | 12000 |
10 | 32000 | 16000 | 8000 |
11 | reserved | reserved | reserved |
6.5 每幀數據的採樣數
-- | MPEG 1 | MPEG 2 (LSF) | MPEG 2.5 (LSF) |
---|---|---|---|
Layer I | 384 | 384 | 384 |
Layer II | 1152 | 1152 | 1152 |
Layer III | 1152 | 576 | 576 |
6.6 channel 模式表
index | content |
---|---|
00 | Stereo |
01 | Joint Stereo (Stereo) |
10 | Dual channel (Two mono channels) |
11 | Single channel (Mono) |
6.7 標籤幀的標識以及其意義對照表
index content
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
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]