因爲一朋友需要獲取目錄下所有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,它可以獲取你需要的數據,並能導出不同的格式,界面如下: