仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1208|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:PHP剖析.wav文件并绘制png格局的波形图...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:02:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。     用Php剖析并绘制音频文件的波形图,网上仍是很少见到。其实只需依据wav文件的标准,用Php的fseek,fopen,fopen,pack/unpack等函数,和壮大的gd图形库,这些都是很轻易的。良多人能够对pack/unpack函数不熟习;这实际上是Php借用perl的,他们供应了利用剧本言语会见庞杂二进制数据布局的办法。我的这段简化的法式只能处置PCM格局的RIFF音频文件(这也是最多见的wav格局) ,不限声道,然而比特率(BitsPerSample)最好是16。
  这里有wave file format 和 MicroSoft wave soundfile format可以参考。这里是一个实践的例子(下载缩小看)
  1 <?Php
  2
  3 function wav_graph($file, $f=0, $w=0)
  4 {
  5 global $DATA_DIR;
  6
  7 if(!is_file($file)) return 0;
  8 $fp = fopen($DATA_DIR.$file, 'r');
  9 $raw = fread($fp, 36);
  10 $str = '';
  11 $header = unpack('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/vBlockAlign/vSampleBits', $raw);
  12 foreach($header as $k=>$v)
  13 $str .= $k.': '. $v.' ';
  14 fseek($fp, 36 + $header['HeadSize'] - 16);
  15 $raw = fread($fp, 8);
  16 $data = unpack('A4Data/VDataSize', $raw);
  17 foreach($data as $k=>$v)
  18 $str .= $k.': '. $v.' ';
  19
  20 $b = $header['SampleBits'];
  21 $c = $header['Channels'];
  22 $l = $b * $c / 8; // sample frame length in bytes
  23 $s = $data['DataSize'] / $l; // total number of samples
  24 $r = $header['SampleRate'];
  25 if($f) $h = pow(2, $b) / $f;
  26 else { $h = 200; $f = pow(2, $b - 1) / $h; }
  27 if($w == 0) $w = round($r / 1000); // default to show 1k sample frames per minute
  28
  29 header("Content-type: image/png");
  30 $im = imagecreate($s / $w, $h * $c * 2);
  31 imagecolorallocate($im, 0xff, 0xff, 0xff); // white bg
  32 $color = imagecolorallocate($im, 0, 0, 255); // black
  33 //imagestring($im, 5, 5, 5, $str, $color);
  34
  35 $x=0; $y = array(); $yn = array();
  36 for($i = 0; $i < $c; $i++) $y[$i] = $h * $i + $h;
  37 $n = $l * $w;
  38 while(1)
  39 {
  40 if($s == 0) break;
  41 if($s < $n) $n = $s;
  42 $samples = fread($fp, 1000 * $n);
  43 if($samples === FALSE) break;
  44 $packed = unpack("s*", $samples);
  45 foreach($packed as $k=>$v)
  46 {
  47 $cnt = ($k-1) % ($w * $l) ;
  48 if( $cnt > $c - 1) continue;
  49 $yn[$cnt] = $h * $cnt + $h - $v / $f;
  50 imageline($im, $x, $y[$cnt], $x+1, $yn[$cnt], $color);
  51 $y[$cnt] = $yn[$cnt];
  52 $x++;
  53 }
  54 $s -= $n;
  55 }
  56
  57 imagepng($im);
  58 imagedestroy($im);
  59 }
  60
  61 //wav_graph('audio2.wav');
  62 ?>
学习如何将PHP与HTML结合起来完成简单动态页面
乐观 该用户已被删除
沙发
发表于 2015-2-4 08:07:32 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
小妖女 该用户已被删除
板凳
发表于 2015-2-8 23:38:47 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
山那边是海 该用户已被删除
地板
发表于 2015-2-24 02:42:19 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
愤怒的大鸟 该用户已被删除
5#
发表于 2015-3-1 09:10:51 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
admin 该用户已被删除
6#
发表于 2015-3-2 21:08:49 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
只想知道 该用户已被删除
7#
发表于 2015-3-11 06:17:08 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
不帅 该用户已被删除
8#
发表于 2015-3-17 22:09:31 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
老尸 该用户已被删除
9#
发表于 2015-3-22 17:08:26 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
透明 该用户已被删除
10#
发表于 2015-3-25 10:29:22 | 只看该作者
爱上php,他也会爱上你。
若相依 该用户已被删除
11#
发表于 2015-3-29 06:42:59 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
柔情似水 该用户已被删除
12#
发表于 2015-4-9 13:11:27 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
因胸联盟 该用户已被删除
13#
发表于 2015-4-10 21:47:10 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-4-14 14:30:01 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
爱飞 该用户已被删除
15#
发表于 2015-4-18 17:00:59 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
兰色精灵 该用户已被删除
16#
发表于 2015-4-21 08:37:47 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
若天明 该用户已被删除
17#
发表于 2015-4-26 00:09:21 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
飘飘悠悠 该用户已被删除
18#
发表于 2015-4-30 04:14:08 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
变相怪杰 该用户已被删除
19#
发表于 2015-5-1 07:47:28 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
第二个灵魂 该用户已被删除
20#
 楼主| 发表于 2015-5-1 18:13:00 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 19:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表