进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 网站开发 -> PHP -> 文章内容  
PHP分析.wav文件并绘制png格式的波形图

  用Php分析并绘制音频文件的波形图,网上还是很少见到。其实只要根据wav文件的规范,用Php的fseek,fopen,fopen,pack/unpack等函数,以及强大的gd图形库,这些都是很容易的。很多人可能对pack/unpack函数不熟悉;这其实是Php借用perl的,他们提供了使用脚本语言访问复杂二进制数据结构的方法。我的这段简化的程序只能处理PCM格式的RIFF音频文件(这也是最常见的wav格式) ,不限声道,但是比特率(BitsPerSample)最好是16。www.goodsgy.com

  这里有wave file format 和 MicroSoft wave soundfile format可以参考。这里是一个实际的例子www.goodsgy.com

  www.goodsgy.com

以下是引用片段:

  1 <?Php
  2

  3 function wav_graph($file, $f=0, $w=0)www.goodsgy.com

  4 {www.goodsgy.com

  5 global $DATA_DIR;www.goodsgy.com

  6www.goodsgy.com

  7 if(!is_file($file)) return 0;www.goodsgy.com

  8 $fp = fopen($DATA_DIR.$file, 'r');www.goodsgy.com

  9 $raw = fread($fp, 36);www.goodsgy.com

  10 $str = '';www.goodsgy.com

  11 $header = unpack('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/vBlockAlign/vSampleBits', $raw);www.goodsgy.com

  12 foreach($header as $k=>$v)www.goodsgy.com

  13 $str .= $k.': '. $v.' ';www.goodsgy.com

  14 fseek($fp, 36 + $header['HeadSize'] - 16);www.goodsgy.com

  15 $raw = fread($fp, 8);www.goodsgy.com

  16 $data = unpack('A4Data/VDataSize', $raw);www.goodsgy.com

  17 foreach($data as $k=>$v)www.goodsgy.com

  18 $str .= $k.': '. $v.' ';www.goodsgy.com

  19www.goodsgy.com

  20 $b = $header['SampleBits'];www.goodsgy.com

  21 $c = $header['Channels'];www.goodsgy.com

  22 $l = $b * $c / 8; // sample frame length in byteswww.goodsgy.com

  23 $s = $data['DataSize'] / $l; // total number of sampleswww.goodsgy.com

  24 $r = $header['SampleRate'];www.goodsgy.com

  25 if($f) $h = pow(2, $b) / $f;www.goodsgy.com

  26 else { $h = 200; $f = pow(2, $b - 1) / $h; }www.goodsgy.com

  27 if($w == 0) $w = round($r / 1000); // default to show 1k sample frames per minutewww.goodsgy.com

  28www.goodsgy.com

  29 header("Content-type: image/png");www.goodsgy.com

  30 $im = imagecreate($s / $w, $h * $c * 2);www.goodsgy.com

  31 imagecolorallocate($im, 0xff, 0xff, 0xff); // white bgwww.goodsgy.com

  32 $color = imagecolorallocate($im, 0, 0, 255); // blackwww.goodsgy.com

  33 //imagestring($im, 5, 5, 5, $str, $color);www.goodsgy.com

  34www.goodsgy.com

  35 $x=0; $y = array(); $yn = array();www.goodsgy.com

  36 for($i = 0; $i < $c; $i++) $y[$i] = $h * $i + $h;www.goodsgy.com

  37 $n = $l * $w;www.goodsgy.com

  38 while(1)www.goodsgy.com

  39 {www.goodsgy.com

  40 if($s == 0) break;www.goodsgy.com

  41 if($s < $n) $n = $s;www.goodsgy.com

  42 $samples = fread($fp, 1000 * $n);www.goodsgy.com

  43 if($samples === FALSE) break;www.goodsgy.com

  44 $packed = unpack("s*", $samples);www.goodsgy.com

  45 foreach($packed as $k=>$v)www.goodsgy.com

  46 {www.goodsgy.com

  47 $cnt = ($k-1) % ($w * $l) ;www.goodsgy.com

  48 if( $cnt > $c - 1) continue;www.goodsgy.com

  49 $yn[$cnt] = $h * $cnt + $h - $v / $f;www.goodsgy.com

  50 imageline($im, $x, $y[$cnt], $x+1, $yn[$cnt], $color);www.goodsgy.com

  51 $y[$cnt] = $yn[$cnt];www.goodsgy.com

  52 $x++;www.goodsgy.com

  53 }www.goodsgy.com

  54 $s -= $n;www.goodsgy.com

  55 }www.goodsgy.com

  56www.goodsgy.com

  57 imagepng($im);www.goodsgy.com

  58 imagedestroy($im);www.goodsgy.com

  59 }www.goodsgy.com

  60www.goodsgy.com

  61 //wav_graph('audio2.wav');www.goodsgy.com

  62 ?>www.goodsgy.com

www.goodsgy.com

在百度中搜索:PHP分析.wav文件并绘制png格式的波形图
在Google中搜索:PHP分析.wav文件并绘制png格式的波形图
在Yahoo中搜索:PHP分析.wav文件并绘制png格式的波形图

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· [组图] Photoshop调出雪景照片的金色效果
· [图文] Photoshop制作螺旋状彩色线条图形
· [组图] PhotoShop制作磨砂涂鸦文字特效
· [组图] 详谈PhotoShop多种快速勾图的方法
· [组图] Photoshop制作梦幻的仿手绘插画
· [组图] Photoshop人物鼠绘之甜美的情侣篇
· [图文] Photoshop简单制作web 2.0绿色箭头..
· CSS Alpha透明代码相关知识学习
· [图文] Photoshop把普通女孩变成清幽美女
· [图文] Photoshop滤镜打造五彩水晶花效果
 
· PHP实例:实现给上传图片加水印图案
· 用PHP程序直接调用文本文件内容实例
· php脚本中include文件报错解决方法
· PHP分析.wav文件并绘制png格式的波形图
· 动态网页制作PHP常用的正则表达式
· 常见php页面漏洞分析及相关问题解决
· PHP原版HTML编码器溢出问题的解决
· win2003 iis整合php后 环境变量为什么无法..
· php的配置文件php.ini中的中文注释
· php对特殊语句查询结果进行数组排序

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)