• 沒有找到結果。

MP3 音效格式

Moving Picture Experts Group Audio Layer III 又被稱為 MP3,是當今廣 為流行的一種數位音訊編碼和破壞性壓縮格式,它被設計用來大幅度地降 低音訊資料量,而對於大多數使用者的聽覺感受來說,重放的音質與最初 的無壓縮音訊相比沒有明顯的下降。

MP3 是一種資料壓縮格式,它捨棄了音訊資料在脈衝編碼調變(Pulse Code Modulation)中對人類聽覺不重要的資料,從而達到了壓縮成較小檔 案的目的。當談及數位媒體的所需頻寬時,會以位元速率(NBPS)描述,位元 速率指的是每一秒位元資料的流量,單位是bps (bit per second)。而將位元 速率乘上取樣時間就可以得到所須要的儲存空間(Nsize) [14]。

以 CD 數位音訊的音質為例,其取樣位元數為 16 位元,取樣頻率為 44.1KHz,雙聲道音訊,則每秒位元速率由(38)可為得 1411.2kbps,每分鐘 所須的儲存空間由(39)可得為 10584000 bytes。當選擇 128Kbps 位元速率來 進行MP3 壓縮時,可算出其壓縮倍數為 11.025 (1411.2 / 128),並且能達到 相當不錯的音質,而每分鐘的歌曲經過壓縮後,約只需要 0.9MBytes 儲存 空間即可。

NBPS f N N (38) N NBPS T / 8 (39) 其中NBPS

位元速率,fs為取樣頻率,Nbit為取樣位元,Nch為聲道數,Nsize

為資料容量,Ts為取樣時間。

6.1 MP3 文件的標籤格式

MPEG Layer I、Layer II 與 Layer III(MP3)音頻格式並沒有內置保存信息 內容的方式,而為了解決這一問題 MP3 文件引入了“Studio 3"的標籤結 構,用來記錄音樂文件的訊息,表6-1 為 MP3 的檔案結構。其中有兩組標 籤資訊,分別為儲存在檔案尾端的TAG1 與檔案開頭的 TAG2。

標籤(TAG)可以將該歌曲的相關資訊如專輯名稱、曲名、演唱者、出品 年代、歌詞等詳細資訊附加在 MP3 檔案中,目前較為常用的標籤格式為 ID3,分為 V1 和 V2 兩個版本,其中 V2 儲存於檔案的開頭,而 V1 儲存於 末尾,底下將簡介ID3V1 與 ID3V2 標籤的結構,詳細的 ID3 標籤應用方式 請參考ID3 官方網頁

http://www.id3.org

的ID3 tag version 2.3 文件。

表 6-1 MP3 檔案結構

MP3 File Structure

TAG_2 Frame 1 ……… Frame N TAG_1

ID3V1 標籤

ID3V1 的資料結構可以很容易被程式解碼,其資料長度為固定的 128 位元組,並且位於MP3 檔案的最尾端,由於其結構並沒有保留供將來使用 的空間,因此存放的訊息種類並不多,圖 6-1 為 ID3V1 標籤的資料結構定 義,其包含了作者,作曲,專輯內容等訊息,每一個段落最長為30 個字元,

且無法擴充與缺乏彈性。

程式名稱:typedef struct TagID3V1 功能敘述:MP3 ID3V1 結構定義

typedef struct TagID3V1 {

char Header[3]; // “TAG”

char Title[30]; // 標題 char Artist[30]; // 作者 char Album[30]; // 專輯 char Year[4]; // 出品年代 char Comment[28]; // 備註欄 char reserve; // 保留, 0 char track; // 音軌 char Genre; // 類型 } ID3V1;

圖 6-1 ID3V1 資料結構定義

圖6-2 為本系統使用的 MP3 音樂文件所記錄的 ID3V1 標籤內容,我們 可以清楚的看出其標題、作者與出品年代等內容訊息。

圖 6-2 MP3 ID3V1 資料內容

ID3V2 標籤

ID3V2 的資料格式定義與 ID3V1 截然不同,其具有較大的靈活度與自 由度可供使用者添加訊息,目前最常使用的 ID3V2 格式是第三版,所以又 被稱為 ID3V2.3,由於 ID3V1 已經佔據在檔案的最尾端,因此 ID3V2.3 被 存放於檔案的起端。ID3V2.3 的結構包含了一個標籤頭(Header)與數個標籤

框(Frame),Header 共有 10 個位元組用來紀錄整個 ID3V2.3 標籤的容量大 小,其結構如圖6-3。

程式名稱:typedef struct TagID3V2.3_H 功能敘述:MP3 ID3V2.3 結構定義

typedef struct TagID3V2.3_H {

char Header[3]; // “ID3”

char Ver; // 版本號 ID3V2.3 … “3”

char Revision; // 副版本號,”0”

char Flag; // 旗標

char Size[4]; // 標籤內容大小 } H_ID3V2.3;

圖 6-3 ID3V2.3 結構定義

在此須要注意標籤容量的計算方式與一般常見的方式不太一樣,標籤 容量有4 bytes,但是每一個 byte 只使用 7 個 bit,最高位元不使用,因此在 計算容量時要進行移位的動作,其計算程式如圖6-4。

程式名稱:Count_ID3V2_Size( ) 功能敘述:計算 MP3 ID3V2.3 容量

u32 Count_ID3V2_Size (u8 *Size) {

u32 ID3V2_size;

ID3V2_size = (int) (Size[0] & 0x7E) << 21 + (int) (Size[1] & 0x7E) << 14 + (int) (Size[2] & 0x7E) << 7 + (int) (Size[3] & 0x7E);

return ID3V2_size;

}

圖 6-4 ID3V2.3 容量計算程式

ID3V2 標籤內容是由數個標籤框構成,每個標籤框就代表一種訊息內 容,而且長度可以自由的擴展,標籤框由 10 位元組的框頭(Header)與非固 定長度的內容所組成,圖6-5 為 ID3V2.3 標籤框頭的資料結構。圖 6-6 為本 系統使用的MP3 音樂文件所記錄的 ID3V2.3 標籤內容,我們可以看出每個 標籤框內容訊息。

程式名稱:typedef struct TagID3V2.3_H 功能敘述:MP3 ID3V2.3 結構定義 typedef struct TagID3V2.3_F

{ char FrameID[4]; //標籤框標識 char Size[4]; //標籤內容大小 char Flags[2];

} F_ID3V2.3;

圖 6-5 ID3V2.3 Frame 結構定義

圖 6-6 MP3 ID3V2.3 資料內容

6.2 MP3 音框(Frame)格式

MP3 檔案的音訊資料是由音框(簡稱 Frame)所組成的,每個 Frame 的大 小會依照壓縮位元率而不同,圖6-7 為 MP3 音框結構,每個 Frame 都是由 Header、CRC、Side Information 和 Main data 等四個部分所組成的,詳細的 MP3 規格請參考 ISO-ICE IS11172-3MPEG Information Technology [15]。

MP3 Audio Frame

Header (4 bytes) CRC (0 or 2 bytes) Side Information (17 or 32 bytes)

Main Data

圖 6-7 MP3 音框結構 [15]

相關文件