首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 解析 MP3 (ID3v1/ID3v2) 與 WMA 檔案頭資訊:讀取標題、藝術家、專輯、年份、流派與音訊元數據

     編輯:PHP 綜合知識

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 差異

特性ID3v1ID3v2
位置檔案尾部固定 128 bytes檔案開頭可變長度
編碼ISO-8859-1UTF-16/UTF-8
欄位長度固定 30 字元可變長度
支援圖片否是 (APIC 幀)

注意事項

  • 需啟用 mbstring 擴展處理 WMA Unicode
  • 寫入需檔案可寫入權限
  • 大檔案寫入會整體重寫,耗時較久
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved