用PHP读取音频文件wav的录音时限

来源:互联网 发布:淘宝优惠券转手机端 编辑:程序博客网 时间:2024/04/30 14:38
对于WAV格式的文件结构,这里有详细的解释:http://dev.gameres.com/Program/Listen/wavePX.htm。读取其录音时间长度时,我在一个网站找到了下面这种方法。这里用到了PHP的pack函数。近来学习PERL时第一次接触pack函数,却不知道用了这么多年的PHP中也有这个函数,真实惭愧。其实PERL中的Audio::Wav模块也是通过类似的方法实现的,在/usr/lib/perl5/site_perl/5.8.6/Audio/Wav/Read.pm中搜索data_length就可以知道大概。
 1  <?php 2 3  /* 4  calculate the duration of wav files 5  */ 6  function wav_sec($file, $base=10) /* {{{ */ 7  { 8      $fp = fopen($file, 'r'); 9      if (fread($fp,4) != 'RIFF') return 'format not valide';10      fseek($fp, 20);11      $rawheader = fread($fp, 16);12      $header = unpack('vtype/vchannels/Vsamplerate/Vbytespersec/valignment/vbits',$rawheader);13      $pos = ftell($fp);14      while (fread($fp, 4) != 'data' && !feof($fp))15      {16          $pos++;17          fseek($fp,$pos);18      }19      $rawheader = fread($fp, 4);20      $data = unpack('Vdatasize',$rawheader);21      $sec = $data[datasize] / $header[bytespersec];22      if($base==60)23      {24          $seconds = intval($sec % 60);25          $minutes = intval(($sec - $sec * 60) / 60);26          return $minutes.':'.$seconds;27      }28      else return $sec;29  } /* }}} */3031  ?>
0 0
原创粉丝点击