Home >Backend Development >PHP Tutorial >PHP method to convert wav files into image files and display them on the page_PHP tutorial

PHP method to convert wav files into image files and display them on the page_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 09:56:31876browse

How to convert wav files into image files in php and display them on the page

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๏ผš

ใ€€?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

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');

?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
<๐ŸŽœ>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.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/987722.htmlTechArticleHow to convert wav files into image files in php and display them on the page. This article describes how to use php to convert wav files into image files. A method for converting files into image files and displaying them on the page. Share with everyone...
Statement๏ผš
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn