本文实例讲述了php实现将wav文件转换成图像文件并在页面中显示的方法。分享给大家供大家参考。具体分析如下:
需求:将wav文件转换成png文件并且显示出来。
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
|
<?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' ); ?> |
效果图如下:
希望本文所述对大家的php程序设计有所帮助。