第二个灵魂 发表于 2015-2-4 00:02:57

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

工具程序用来显示 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也分很多的区域,

愤怒的大鸟 发表于 2015-3-1 09:10:51

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

admin 发表于 2015-3-2 21:08:49

最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。

只想知道 发表于 2015-3-11 06:17:08

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

不帅 发表于 2015-3-17 22:09:31

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

老尸 发表于 2015-3-22 17:08:26

学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。

透明 发表于 2015-3-25 10:29:22

爱上php,他也会爱上你。

若相依 发表于 2015-3-29 06:42:59

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

柔情似水 发表于 2015-4-9 13:11:27

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

因胸联盟 发表于 2015-4-10 21:47:10

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

灵魂腐蚀 发表于 2015-4-14 14:30:01

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

爱飞 发表于 2015-4-18 17:00:59

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

兰色精灵 发表于 2015-4-21 08:37:47

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

若天明 发表于 2015-4-26 00:09:21

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

飘飘悠悠 发表于 2015-4-30 04:14:08

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

变相怪杰 发表于 2015-5-1 07:47:28

本文当是我的笔记啦,遇到的问题随时填充

第二个灵魂 发表于 2015-5-1 18:13:00

要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
页: [1] 2
查看完整版本: PHP编程:PHP剖析.wav文件并绘制png格局的波形图...