效果图:

参考:

http://php.net/manual/zh/function.pack.php

https://www.jianshu.com/p/947528f3dff8

http://blog.csdn.net/midfar/article/details/7227758

function wav_graph($file)

{

if(!is_file($file)) return false;

$fp=fopen($file, 'r');

$size=36;

$offset=0;

$raw=fread($fp, $size);

$header=unpack('A4Riff/VSize/A4Type/A4Head/VHeadSize/vAudioFormat/vNumChannels/VSampleRate/VByteRate/vBlockAlign/vBitsPerSample', $raw);

$offset+=$size;

fseek($fp, $offset);

while(true){

$size=8;

$raw=fread($fp, 8);

$chunk=unpack('A4ID/VSize', $raw);

if($chunk['ID']==='data') break;

$offset+=($size+$chunk['Size']);

fseek($fp, $offset);

}

$samples=$chunk['Size']/$header['BlockAlign'];//wave length = samples

$px_per_second=100;//px

$second_per_sample=1/$header['SampleRate'];//s

$time=$samples*$second_per_sample;//time of media

$width=$px_per_second*$time;

$samples_per_px=$header['SampleRate']/$px_per_second;//

$amplitude=pow(2,intval($header['BitsPerSample'])-1);//2^16 max amplitude

$height=400;//px height of one channel

$px_per_amp=$height/$amplitude;//px per amplitude

//var_dump($width);var_dump($height);exit;

$im=imagecreate($width, $height*$header['NumChannels']);//two channels

$bg_color=imagecolorallocate($im, 255, 255, 255);

$line_color=imagecolorallocate($im, 255, 0, 0);

$offset+=8;

fseek($fp, $offset);

$x=0;

$y1=[];//start y

$y2=[];//end y

for($i=0;$i

$y1[$i]=$height*$i+($height/2);//start height of per channel

}

while (true) {

$raw=fread($fp, $header['BlockAlign']*$samples_per_px);// read n samples in 1 px

if($raw==false) break;

$len=strlen($raw);//bytes

$sample=unpack('s*', $raw);

$y_sum=[];

for($i=0;$i

$y_sum[$i]=0;

}

foreach ($sample as $key=>$value) {

$channel=($key+1)%intval($header['NumChannels']);//0 or 1

$y_sum[$channel]+=$value;

}

foreach ($y_sum as $channel=>$value) {

$y_ave=$value/($len/$header['BlockAlign']);//average of y

$y2[$channel]=$y_ave*$px_per_amp+$height*$channel+($height/2);

imageline($im,$x,$y1[$channel],$x+1,$y2[$channel],$line_color);

$y1[$channel]=$y2[$channel];

}

$x++;

}

fclose($fp);

header("Content-type:image/png");

imagepng($im);

imagedestroy($im);

}

wav_graph('test.wav');

php声波模拟开门,PHP 根据wav文件绘制声波图相关推荐

  1. php声波模拟开门,关于 php使用扩展控制树莓派io 驱动超声波测距

    经过昨天一下午,终于写好了基于 只需要安装完毕,就可以调用函数了:<?php /** * Created by PhpStorm. * User: tioncico * Date: 19-7-6 ...

  2. C# 模拟PCM数据并创建WAV文件

    最近由于着手一个无线电接受机信号处理的工作,需要处理解调模式下传递的PCM数据,绘制波形并播放声音,特此记录. 模拟PCM数据,保存到本地 private void button1_Click(obj ...

  3. 【音频驱动】Linux之ALSA声卡、WAV文件相关概念

    Linux之ALSA音频相关概念 Linux之ALSA音频相关概念 一.ALSA简介 二.音频相关概念 1.采样频率 2.量化位数(ADC精度) 3.声道数 4.交错模式 三.WAV文件 1.编码格式 ...

  4. NAudio用法详解(7)Wav文件结构分析及NAudio相关对象对应关系分析

    目录 波形文件的基础知识 波形文件的存储过程 与声音有关的三个参数 1.采样频率 2.采样位数 3.声道数 WAV文件的编码 文件整体结构 RIFF区块 fmt区块(FORMAT区块) DATA区块 ...

  5. 语音识别1: 音频信号采集、并存入 wav文件

    1 说明 语音识别的基本操作是:1)能够录音 2)能够将录音文件存储.以下将列出此操作,并逐条语句讲解. 2 音频录制代码 import pyaudio import wave from tqdm i ...

  6. 监听实时生成的双声道wav文件转文字

    #监听文件夹生成的双声道wav文件实时转文字 想要把软短话生成的双声道录音文件实时转文字做内容质检 思路是监听某文件夹的文件创建事件 拆分双声道wav 调用转文字接口 使用的阿里的TTS 实时语音识别 ...

  7. (-):wav文件转化为txt文件

    首先声明一下,由于水平有限,所以这里的代码没有加入错误处理程序,为version1: 第一步:明确wav格式: 一.综述     WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标 ...

  8. android打开wav格式,FileNotFoundException从Android资产中打开wav文件

    在我们的android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开和播放声音,我们使用下面的代码:FileNotFoundExceptio ...

  9. C#文字转语音,实时播放以及mp3,wav文件保存

    源码下载地址:https://download.csdn.net/download/horseroll/10500847 无积分付费下载地址:https://download.csdn.net/dow ...

最新文章

  1. PHP标记风格,编码规范
  2. python测验4_python接口自动化测试四:代码发送HTTPS请求
  3. 软件设计文档国家标准_GB8567--88
  4. vb.net限制软件使用次数_新增投屏及倍数播放,这款软件iOSAndroid全都有,影视神器,抓紧体验...
  5. 结构设计模式 - 复合设计模式
  6. Codeforces Round #568 (Div. 2)网卡垫底记
  7. centos7 修改时区
  8. 期末大作业图书管理系统(c++)源代码
  9. QT ubuntu下 多画面视频监控播放器rtsp播放器
  10. PS学习笔记6-选区工具
  11. 【026】国务院督查组莅临翼辉信息参观调研
  12. 红外线解码 VS1838B接头 12864液晶 51单片机 合众之星万能遥控器
  13. 日化行业DMS全渠道商城系统
  14. JavaScript 实现延迟合并处理任务
  15. 免费 whois 查询 API
  16. CentOS7中文输入法,拼音输入法
  17. 基于PHP的精品课程教学网站
  18. Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践
  19. 【成神之路】开放设计编程相关面试题
  20. Hashtable的用法

热门文章

  1. 基于Spark的数据清洗与转换
  2. qfile超过下载文件容量_如何下载视频网站上的视频,这里有方法
  3. 零基础如何学好软件测试?
  4. android应用加固后闪退,360加固保加固后打开app即闪退
  5. unicode字符范围(包括中文、日语、韩文和各种特殊字符集)
  6. 数据仓库模型报表设计
  7. 【超简单,保姆级】❤️Linux 安装 Windows 软件,微信、QQ、TIM等,再也不用来回切换了!❤️【建议收藏】
  8. python编写操作系统实验_6.828 操作系统 lab2 实验报告
  9. 软件测试基础测试分析法
  10. OpenCV 常用函数汇总(normalize、getStructuringElement、erode、dilate)