AudioExif 類別特色
- 支援 MP3 (ID3v1 + ID3v2) 與 WMA (ASF) 兩種格式
- 讀取:Title、Artist、AlbumTitle、Year、Genre、Copyright、Description、Track
- 寫入:上述欄位(MP3 額外支援 Track 寫入)
- 自動處理 WMA Unicode (UCS-2LE) 編碼轉換
- 無需外部擴展,純 PHP 實現
核心類別結構(節錄關鍵方法)
class AudioExif {
private $_wma, $_mp3;
public function CheckSize($file) { /* 檢查檔案完整性 */ }
public function GetInfo($file) { /* 回傳資訊陣列 */ }
public function SetInfo($file, $data) { /* 寫入標籤 */ }
// 內部:_WmaExif、_Mp3Exif 分別處理格式
}
class _Mp3Exif extends _AudioExif {
// ID3v1:固定 128 bytes 尾部 TAG
// ID3v2:檔案開頭可變長度標籤
// 讀取優先 ID3v2,寫入同時更新 v1/v2
// 額外解析音訊元數據:bitrate、samplerate、mode、layer 等
}
class _WmaExif extends _AudioExif {
// ASF 容器格式,GUID 識別標籤區塊
// 標準資訊區塊 (3326b275...) + 擴展資訊區塊 (40a4d0d2...)
// Unicode 存儲,需 mb_convert_encoding 處理
}
使用範例
require 'AudioExif.class.php';
$ae = new AudioExif;
$file = '/path/to/song.mp3';
// 1. 檢查完整性(WMA 有效,MP3 恆真)
var_dump($ae->CheckSize($file));
// 2. 讀取資訊
$info = $ae->GetInfo($file);
print_r($info);
/* 輸出範例:
Array(
[Title] => Song Name
[Artist] => Singer
[AlbumTitle] => Album
[Year] => 2023
[Genre] => Pop
[Track] => 3
[meta] => Array([bitrate]=>320 [samrate]=>44100 [mode]=>stereo ...)
)
*/
// 3. 寫入標籤
$ae->SetInfo($file, [
'Title' => 'New Title',
'Artist' => 'New Artist',
'Genre' => 'Rock'
]);
ID3v1 vs ID3v2 差異
| 特性 | ID3v1 | ID3v2 |
| 位置 | 檔案尾部固定 128 bytes | 檔案開頭可變長度 |
| 編碼 | ISO-8859-1 | UTF-16/UTF-8 |
| 欄位長度 | 固定 30 字元 | 可變長度 |
| 支援圖片 | 否 | 是 (APIC 幀) |
注意事項
- 需啟用
mbstring 擴展處理 WMA Unicode
- 寫入需檔案可寫入權限
- 大檔案寫入會整體重寫,耗時較久