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

本文介绍了一种使用PHP计算WAV文件时长的方法。通过解析WAV文件的内部结构,利用fread和unpack函数获取关键信息,并最终计算出文件的播放时长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于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  } /* }}} */
30
31  ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值