通過PHP讀取wav音頻時長

  因爲一朋友需要獲取目錄下所有wav格式的音頻文件時長,讓我幫忙,開始打算通過linux命令寫的,找了半天沒有找到,只找到通過php實現的方法,核心算法是從網上借鑑,我修改了一下,不說太多,直接上代碼:

<?php

function getWavLength($file, $base=10) {
    $fp = fopen($file, 'r');
    if (fread($fp,4) != 'RIFF') {
        return '';
    }
    fseek($fp, 20);
    $rawheader = fread($fp, 16);
    $header = unpack('vtype/vchannels/Vsamplerate/Vbytespersec/valignment/vbits',$rawheader);
    $pos = ftell($fp);
    while (fread($fp, 4) != 'data' && !feof($fp)) {
        $pos++;
        fseek($fp,$pos);
    }
    $rawheader = fread($fp, 4);
    $data = unpack('Vdatasize',$rawheader);
    $sec = $data[datasize] / $header[bytespersec];
    if($base==60) {
        $seconds = intval($sec % 60);
        $minutes = intval(($sec - $sec * 60) / 60);
        return $minutes.':'.$seconds;
    } else {
        return $sec;
    }
}

$filePath = './wav/';
$arrWavData = array();
$arrWavData = scandir($filePath);
foreach ($arrWavData as $wavData) { 
    $lengh = getWavLength($filePath . $wavData);
    if (!empty($lengh)) {
        echo $wavData . ': ' . $lengh . "\n";
    }
}

源文件:
這裏寫圖片描述
輸出:
這裏寫圖片描述
  如果需要通過現有的軟件實現該功能,推薦一款軟件DirectoryLister,它可以獲取你需要的數據,並能導出不同的格式,界面如下:
  這裏寫圖片描述

發佈了21 篇原創文章 · 獲贊 14 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章