通过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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章