首页 > 语言 > 关键词  > php最新资讯  > 正文

PHP分析.wav文件并绘制png格式的波形图

2008-10-29 11:02 · 稿源:12it.net

用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 ?>

举报

  • 相关推荐
  • iPhone 17处理器成谜:连分析师都懵了

    根据爆料的消息,iPhone 17系列共有4款机型,分别是iPhone 17、iPhone 17 Air、iPhone 17 Pro和iPhone 17 Pro Max,这次苹果砍掉了Plus机型,取而代之的是Air机型。 其中iPhone 17 Pro系列搭载A19 Pro芯片,iPhone 17 Air预计搭载A19芯片,但是iPhone 17标准版的处理器依然是个谜。 分析师Jeff Pu在最新发布的投资者报告中称,iPhone 17标准版搭载A19芯片,在此之前,Jeff Pu预测iPhone 17标准版搭载A18芯片,这�

  • OpenAI发布ChatGPT Agent智能体:支持写代码、做PPT、分析金融

    OpenAI推出ChatGPT智能体,整合网页交互、数据搜索与多模态协作功能,可完成代码生成、PPT制作、金融分析等复杂任务。该智能体融合Operator的网页自动化操作、Deep Research的数据分析能力及优化后的GPT-4对话引擎三大核心模块。目前面向付费用户开放,Pro版近乎无限使用,其他版本每月限50次任务。OpenAI承认其仍存在金融建模需人工验证、非英语文本解析准确率低等技术局限,并

  • 苹果iPhone 17 Pro系列四配色渲染图出炉:史上首款橙色登场

    据majinbuofficial爆料,结合配件厂商和知情人士的消息,确认今年iPhone 17 Pro系列降提供四款配色可选,与前代保持一致。 具体配色是黑色、深蓝色、银色、橙色,其中橙色是iPhone Pro系列有史以来第一次使用。 爆料对四款配色的描述如下: 黑色:经典且优雅,类似此前型号中的黑色钛金属,但采用磨砂处理,增加优雅感并减少指纹可见度。 深蓝色:一种深到几乎夜幕般的色�

  • 网友住酒店光脚洗澡感染HPV 医生回应:需注意防护

    ​近日,“酒店光脚洗澡可能感染HPV”这一话题在网络上迅速发酵,引发了公众对公共场所卫生安全问题的广泛关注和热烈讨论。据媒体报道以及医学专家分析,在酒店等公共浴室光脚洗澡,确实存在感染跖疣病毒的风险,而该病毒正是一种低危型HPV病毒。 跖疣,这一由人乳头瘤病毒(HPV)引发的足部良性增生物,其感染多发生在温暖潮湿的环境中。医学专家指出,当足部皮

  • 苹果用户最好购车选择!小米YU7深度兼容:iPhone、Apple Watch都能控车

    小米YU7已开启交付,首批车主都已经提车回家了。 今天小米汽车官方介绍,YU7延续了SU7的设计理念,充分针对苹果用户优化用车体验,打造让苹果用户也能轻松上手的车型。 首先是iPhone控车更加便捷高效: 支持UWB近场控车与iOS小组件远程控车,比如携带激活了UWB钥匙的苹果手机站在车前3秒,就能打开前备箱; 也可以通过iPhone上的Action Button自定义车控功能,比如一键控车�

  • 梦回iPhone 7时代!iPhone 17 Air电池曝光:2800mAh

    快科技7月19日消息,iPhone 17 Air电池容量仅2800mAh,比2016年iPhone 7 Plus的2900mAh还小,主要因机身厚度仅5.5mm成为苹果最薄机型。为弥补续航,苹果配备自研C1基带芯片降低功耗,并计划推出MagSafe外接电池配件。配置方面采用120Hz直屏、A19处理器、12GB内存、4800万单摄,预装iOS 26。值得注意的是,超薄设计使其仅支持eSIM技术,取消了物理SIM卡槽。

  • iPhone 17 Pro/Pro Max大曝光:比16 Pro多了一款配色

    随着iPhone 17系列发布时间的临近,有关这款新品的细节陆续被曝光。 最新爆料显示,iPhone 17 Pro、iPhone 17 Pro Max共有5款配色,比iPhone 16 Pro系列多了一款。 具体来说,iPhone 17 Pro系列提供黑色、灰色、银色、深蓝色和橙色五种配色,而iPhone 16 Pro系列提供沙漠色、原色、白色和黑色,从爆料来看,iPhone 17 Pro系列配色中最具辨识度的是深蓝色。

  • 苹果搞定量产问题!iPhone 17 Pro将首发屏幕抗刮抗反射涂层

    据MacRumors最新报道,苹果公司已解决屏幕抗刮抗反射涂层的生产问题,有望率先应用在iPhone 17 Pro和iPhonePro Max上。 据悉,苹果去年就曾有这个计划,但是后来量产工艺遇到问题,一度被传取消该计划。 当时消息称,为iPhone显示屏添加防反射涂层的过程太慢了,达不到苹果巨大的量产需求。 如今,苹果已经联合供应商改进了工艺,解决了量产问题,iPhone 17 Pro系列可以实现规�

  • 小米YU7支持五种导航地址流转方式 iPhone发张截图就可以

    导航作为车主高频刚需功能,小米汽车深入挖掘不同场景下,打造了五种便捷的地址流转方案。 无论是小米手机还是苹果手机用户,都能轻松将地址信息发送至车机系统,实现无缝导航体验。 针对小米手机用户,在小红书、大众点评、微博等含有地址信息的页面,只需长按电源键唤醒小爱同学,说出把这个地址发到车上”,即可将地址发送至车机。

  • iPhone 17系列重回铝合金中框:仅iPhone 17 Air保留钛合金

    据知名分析师Jeff Pu介绍,苹果将在iPhone 17系列重回铝合金中框,只有iPhone 17 Air保留钛合金中框。 苹果在2017年的iPhone X上首次开始使用不锈钢,并且在Pro机型上延续到iPhone 14 Pro,而后又在iPhone 15 Pro开始使用钛合金。 如今看来,钛合金成为苹果最快抛弃的材质。 iPhone 17 Air选择钛合金中框也是迫不得已,因为该机厚度在6mm以内,而钛合金的强度、硬度、韧性、抗拉强度、抗伸