Menggunakan Php untuk menganalisa dan menggambar diagram gelombang file audio masih jarang terlihat online. Faktanya, sangat mudah untuk menggunakan fungsi fseek, fopen, fopen, pack/unpack dan fungsi lainnya di Php sesuai dengan spesifikasi file wav, serta perpustakaan grafis gd yang kuat. Banyak orang mungkin tidak akrab dengan fungsi pack/unpack, ini sebenarnya merupakan pinjaman dari Perl oleh Php, dan mereka menyediakan cara untuk mengakses struktur data biner yang kompleks menggunakan bahasa skrip. Program saya yang disederhanakan hanya dapat memproses file audio RIFF dalam format PCM (yang juga merupakan format wav paling umum). Tidak ada batasan saluran, tetapi kecepatan bit (BitsPerSample) sebaiknya 16.
Berikut adalah format file wave dan format file suara Microsoft wave untuk referensi. Berikut contoh praktisnya (unduh untuk memperbesar)
Berikut kutipannya:
1 <?Php
2
0
, $w=0)
4 {
5 global $DATA_DIR;
6
7 if(!is_file($file)) mengembalikan 0;
, 'r');
9 $mentah = ketakutan($fp, 36);
10 $str = '';
11 $header = membongkar('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/ vBlockAlign/vSampleBits', $raw);
12 foreach($header sebagai $k=>$v)
13 $str .= $k.': '.$v.'
; ['Ukuran Kepala'] - 16);
15 $raw = fread($fp, 8);
16 $data = membongkar('A4Data/VDataSize', $raw
($data sebagai $k=>$v)
18 $str .= $k.': '.$v.'';
19
20
$b = $header[
'SampleBits'];
$c / 8; // panjang bingkai sampel dalam byte
23 $s=
$data['DataSize'] / $l; // jumlah total sampel
24 $r = $header['SampleRate'];
) $h = pow(2, $b) / $f;
26 lain { $h = 200; $f = pow(2, $b - 1) / $h
; w = round($r / 1000); // default untuk menampilkan 1k sampel frame per menit
28
29 header("Jenis konten: gambar/png");
30 $im = imagecreate($s / $w, $h * $c * 2);
31 alokasi warna gambar($im, 0xff, 0xff, 0xff); // putih bg
32 $warna = alokasiwarna
gambar($im, 0, 0, 255);
5, 5, 5, $str, $warna);
34
35 $x=0; $y = susunan(); $yn = susunan();
36 untuk($i = 0; $i < $c; $i++ ) $y[$i] = $h * $i + $h;
37 $n = $l * $w;
38 sementara(1)
39 {
40 if($
s == 0) istirahat;
< $n) $n = $s;
42 $samples = fread($fp, 1000 * $n);
43 if($
samples === FALSE) rusak;
);
45 foreach($dikemas sebagai $k=>$v)
46 {
47 $cnt = ($k-1) % ($w * $l) ;
48 if( $cnt > $c - 1) lanjutkan
; $yn[$cnt] = $h * $cnt + $h - $v / $f;
50 garis gambar($im, $x, $y[$cnt], $x+1, $yn[$cnt], $warna);
51 $y[$cnt] = $yn[$cnt];
52
$
x++;
53 }
54
$s -= $n
;
59 }
60
61 //wav_graph('audio2.wav');
62 ?>