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

PHP 取得音樂檔案播放長度:COM 元件呼叫 Windows Media Player

     編輯:PHP 相關知識

前言

在 Windows 伺服器環境下,PHP 可透過 COM 元件呼叫 Windows Media Player (WMP) 物件模型,讀取 MP3、WAV 等媒體檔案的播放長度。此方法僅限 Windows 平台且需安裝 WMP,Linux/Unix 環境請改用 getID3 函式庫或 FFmpeg。

完整程式碼範例

<?php
$file = "C:/Users/Public/Music/Sample Music/Kalimba.mp3";

if (!file_exists($file)) {
    exit('媒體檔案不存在。');
}

// 建立 Windows Media Player COM 物件
$player = new COM("WMPlayer.OCX");
$media = $player->newMedia($file);

// 取得播放長度(單位:秒,浮點數)
$duration = $media->duration;

echo "檔案:{$file}<br>";
echo "播放長度:{$duration} 秒<br>";
echo "格式化:" . gmdate("H:i:s", $duration) . "<br>"; // 時:分:秒

// 釋放 COM 物件
$media = null;
$player = null;
?>

關鍵屬性與方法說明

屬性/方法說明
newMedia(path)建立媒體物件,載入檔案資訊
duration播放總長度(秒,double)
durationString格式化字串(如 "04:32")
name媒體標題/檔名
getItemInfo("Attribute")取得擴充屬性(如 "Author", "Album", "Genre")

進階:批次讀取資料夾內所有音樂長度

<?php
function getAudioDuration($filepath) {
    if (!file_exists($filepath)) return false;
    try {
        $player = new COM("WMPlayer.OCX");
        $media = $player->newMedia($filepath);
        $dur = $media->duration;
        $media = null;
        $player = null;
        return $dur;
    } catch (com_exception $e) {
        return false;
    }
}

$dir = "D:/Music/";
$files = glob($dir . "*.{mp3,wav,wma,flac}", GLOB_BRACE);

echo "<table border='1'><tr><th>檔名</th><th>長度(秒)</th><th>時:分:秒</th></tr>";
foreach ($files as $file) {
    $sec = getAudioDuration($file);
    if ($sec !== false) {
        echo "<tr><td>" . basename($file) . "</td>";
        echo "<td>" . round($sec, 2) . "</td>";
        echo "<td>" . gmdate("H:i:s", $sec) . "</td></tr>";
    }
}
echo "</table>";
?>

常見問題與解決方案

  • Class 'COM' not found:PHP 未啟用 COM 擴展。修改 php.ini:extension=php_com_dotnet.dll(Windows 專用)。
  • Failed to create COM object:伺服器未安裝 Windows Media Player,或權限不足(IIS 執行身分需有桌面互動權限)。
  • 執行緩慢:每次實例化 COM 較耗資源,批次處理建議重用 $player 物件,或改用純 PHP 解析器(如 getID3)。
  • 非 Windows 環境:請使用 getID3、ffprobe (FFmpeg) 或 mediainfo 指令列工具。

跨平台替代方案:getID3 函式庫

<?php
require_once('getid3/getid3.php');
$getID3 = new getID3;
$fileinfo = $getID3->analyze('audio.mp3');
echo "播放長度:" . $fileinfo['playtime_seconds'] . " 秒<br>";
echo "比特率:" . $fileinfo['bitrate'] . " bps<br>";
echo "編碼格式:" . $fileinfo['audio']['codec'] . "<br>";
?>

總結

COM 呼叫 WMP 是 Windows 環境下快速取得音訊長度的便利方法,適合內部管理工具或 Windows 專用專案。對於跨平台、高效能或生產環境服務,強烈建議採用 getID3 等純 PHP 解析器或 FFmpeg 等專業媒體處理工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved