资源描述:
《PHP分析.wav文件并绘制png格式的波形图.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、PHP分析.wav文件并绘制png格式的波形图 用Php分析并绘制音频文件的波形图,网上还是很少见到。其实只要根据wav文件的规范,用Php的fseek,fopen,fopen,pack/unpack等函数,以及强大的gd图形库,这些都是很容易的。很多人可能对pack/unpack函数不熟悉;这其实是Php借用perl的,他们提供了使用脚本语言访问复杂二进制数据结构的方法。我的这段简化的程序只能处理PCM格式的RIFF音频文件(这也是最常见的wav格式),不限声道,但是比特率(BitsPerSample)最好是16。 这里有wavefileformat和Micr
2、oSoftwavesoundfileformat可以参考。这里是一个实际的例子(下载放大看) 1
3、ls/VSampleRate/VByteRate/vBlockAlign/vSampleBits',$raw); 12foreach($headeras$k=>$v) 13$str.=$k.':'.$v.''; 14fseek($fp,36+$header['HeadSize']-16); 15$raw=fread($fp,8); 16$data=unpack('A4Data/VDataSize',$raw); 17foreach($dataas$k=>$v) 18$str.=$k.':'.$v.''; 19 20$b=$header['Sampl
4、eBits']; 21$c=$header['Channels']; 22$l=$b*$c/8;//sampleframelengthinbytes 23$s=$data['DataSize']/$l;//totalnumberofsamples 24$r=$header['SampleRate']; 25if($f)$h=pow(2,$b)/$f; 26else{$h=200;$f=pow(2,$b-1)/$h;} 27if($w==0)$w=round($r/1000);//defaulttoshow1ksampleframesperminute
5、 28 29header("Content-type:image/png"); 30$im=imagecreate($s/$w,$h*$c*2); 31imagecolorallocate($im,0xff,0xff,0xff);//whitebg 32$color=imagecolorallocate($im,0,0,255);//black 33//imagestring($im,5,5,5,$str,$color); 34 35$x=0;$y=array();$yn=array(); 36for($i=0;$i<$c;$i++)$y[$i]=$
6、h*$i+$h; 37$n=$l*$w; 38while(1) 39{ 40if($s==0)break; 41if($s<$n)$n=$s; 42$samples=fread($fp,1000*$n); 43if($samples===FALSE)break; 44$packed=unpack("s*",$samples); 45foreach($packedas$k=>$v) 46{ 47$cnt=($k-1)%($w*$l); 48if($cnt>$c-1)continue; 49$yn[$cnt]=$h*$cnt+$h-$v/$f;
7、 50imageline($im,$x,$y[$cnt],$x+1,$yn[$cnt],$color); 51$y[$cnt]=$yn[$cnt]; 52$x++; 53} 54$s-=$n; 55} 56 57imagepng($im); 58imagedestroy($im); 59} 60 61//wav_graph('audio2.wav'); 62?>更多相关阅读请点击:新濠天地娱乐场66bb.org有更多精彩文章。