Home >Backend Development >PHP Tutorial >PHP method to convert wav files into image files and display them on the page_PHP tutorial
This article describes the example of how php converts wav files into image files and displays them on the page method. Share it with everyone for your reference. The specific analysis is as follows:
Requirement: Convert wav files to png files and display them.
ใWav_To_Png.php๏ผ
ใ?
|
<๐>function wav_graph($file, $f=0, $w=0)<๐> <๐>{<๐> <๐>global $DATA_DIR;<๐> <๐>if(!is_file($file))<๐> <๐>return 0;<๐> <๐>$fp = fopen($DATA_DIR.$file, 'r');<๐> <๐>$raw = fread($fp, 36);<๐> <๐>$str = '';<๐> <๐>$header = unpack('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/vBlockAlign/vSampleBits', $raw);<๐> <๐>foreach($header as $k=>$v) $str .= $k.': '. $v.' '; fseek($fp, 36 $header['HeadSize'] - 16); $raw = fread($fp, 8); $data = unpack('A4Data/VDataSize', $raw); foreach($data as $k=>$v) $str .= $k.': '. $v.' '; $b = $header['SampleBits']; $c = $header['Channels']; $l = $b * $c / 8; // sample frame length in bytes $s = $data['DataSize'] / $l; // total number of samples $r = $header['SampleRate']; if($f) $h = pow(2, $b) / $f; else { $h = 200; $f = pow(2, $b - 1) / $h; } if($w == 0) $w = round($r / 1000); // default to show 1k sample frames per minute header("Content-type: image/png"); $im = imagecreate($s / $w, $h * $c * 2); imagecolorallocate($im, 0xff, 0xff, 0xff); // white bg $color = imagecolorallocate($im, 0, 0, 255); // black imagestring($im, 5, 5, 5, $str, $color); $x=0; $y = array(); $yn = array(); for($i = 0; $i < $c; $i ) $y[$i] = $h * $i $h;<๐> <๐>$n = $l * $w;<๐> <๐>while(1)<๐> <๐>{<๐> <๐>if($s == 0)<๐> <๐>break;<๐> <๐>if($s < $n)<๐> <๐>$n = $s;<๐> <๐>$samples = fread($fp, 1000 * $n);<๐> <๐>if($samples === FALSE)<๐> <๐>break;<๐> <๐>$packed = unpack("s*", $samples);<๐> <๐>foreach($packed as $k=>$v) { $cnt = ($k-1) % ($w * $l) ; if( $cnt > $c - 1) continue; $yn[$cnt] = $h * $cnt $h - $v / $f; imageline($im, $x, $y[$cnt], $x 1, $yn[$cnt], $color); $y[$cnt] = $yn[$cnt]; $x ; } $s -= $n; } imagepng($im); imagedestroy($im); } wav_graph('GetWave.wav'); ?> |
The rendering is as follows:
I hope this article will be helpful to everyoneโs PHP programming design.