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 ?>
用PHP读取音频文件wav的录音时限
对于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就可以知道大概。