Format Wave PCM
Jenis format Wave
ini merupakan jenis file Wave yang
paling umum dan hampir dikenal oleh setiap program. Format Wave PCM (Pulse Code
Modulation) adalah file wave yang
tidak terkompresi, akibatnya ukuran file
sangat besar jika file mempunyai
durasi yang panjang. Berikut ini diagram (Gambar 2.4) yang menggambarkan format
file Wave PCM.

Gambar 2.4
Diagram Format File Wave
Berikut ini penjelasan mengenai
struktur file Wave yang dimulai
dengan header RIFF:
Tabel 2.8
Penjelasan Struktur File Wave
Offset
|
Size
|
Nama
Field
|
Deskripsi
|
0
|
4
|
ChunkID
|
Terdiri atas kata “RIFF” dalam
bentuk ASCII (0x52494646 dalam bentuk big-endian).
|
4
|
4
|
Chunksize
|
36 + SubChunk2Size atau lebih tepatnya:
4 + (8 + SubChunk1Size) + (8 +
SubChunk2Size).
Ini adalah besar seluruh file dalam byte dikurangi 8 byte
untuk 2 field yang tidak termasuk
dalam hitungan: ChunkID dan ChunkSize
|
8
|
4
|
Format
|
Terdiri atas kata “WAVE” (0x57415645 dalam bentuk big-endian).
|
12
|
4
|
SubChunk1ID
|
Terdiri atas kata “fmt “ (0x666d7420 dalam bentuk big-endian).
|
16
|
4
|
SubChunk1Size
|
16 untuk jenis PCM.
|
20
|
2
|
AudioFormat
|
PCM = 1 (Linear quantization).
Nilai lebih dari 1 mengindikasikan file
Wave kompresi.
|
22
|
2
|
NumChannels
|
Mono = 1, Stereo
= 2 dan seterusnya
|
24
|
4
|
SampleRate
|
8000, 44100, dan seterusnya dalam satuan Hz
|
28
|
4
|
ByteRate
|
= SampleRate * NumChannels *
BitsPerSample / 8
|
32
|
2
|
BlockAlign
|
= NumChannels * BitsPerSample /
8
Jumlah byte untuk satu sampel
termasuk semua channel.
|
34
|
2
|
BitsPerSample
|
8 bits = 8, 16 bits = 16, dan seterusnya.
|
36
|
4
|
SubChunk2ID
|
Terdiri atas kata “data” (0x64617461 dalam bentuk big-endian).
|
40
|
4
|
SubChunk2Size
|
= NumSamples * NumChannels * BitsPerSample / 8
|
44
|
*
|
Data
|
Data Sound sebenarnya.
|
Keterangan: Format “WAVE”
terdiri atas 2 buah SubChunk2: “fmt ”
dan “data”.
SubChunk
“fmt “ menggambarkan format data sound.
SubChunk
“data” terdiri atas ukuran besar data dan data
sound sebenarnya.
Sebagai contoh, berikut ini
merupakan 72 byte pertama dari sebuah
file Wave yang ditampilkan dalam heksadesimal:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c
f2 24 f2 11 ce 1a 0d
Berikut ini (Gambar 2.5) interpretasi dari tiap byte pada file Wave di atas:

Gambar 2.5
Interpretasi Tiap Byte pada File Wave
Selain bentuk standar dari file Wave di atas, seperti yang
dikemukakan sebelumnya file Wave dapat ditambahkan chunk-chunk lain. Penambahan ini tidak
berpengaruh sebab suatu program yang membaca file Wave jika tidak memerlukan informasi pada chunk ini akan mengabaikannya dan mencari chunk lain yang diperlukannya. Sebagai contoh berikut ini
ditampilkan suatu tabel sebuah file Wave
dengan penambah chunk “rgad”.
Tabel 2.9
Penambahan Chunk Lain Pada File Wave
Start Byte
|
Chunk
|
Chunk
|
Field Name
|
contents
|
contents (HEX)
|
bytes
|
format
|
0
|
RIFF
|
name
|
"RIFF"
|
52 49 46 46
|
4
|
ASCII
|
|
4
|
size
|
176444
|
3C B1 02 00
|
4
|
uInt32
|
||
8
|
WAVE
|
name
|
"WAVE"
|
57 41 56 45
|
4
|
ASCII
|
|
12
|
Fmt
|
name
|
"fmt "
|
66 6D 74 20
|
4
|
ASCII
|
|
16
|
size
|
16
|
10 00 00 00
|
4
|
uInt32
|
||
20
|
wFormatTag
|
1
|
01 00
|
2
|
uInt16
|
||
22
|
nChannels
|
2
|
02 00
|
2
|
uInt16
|
||
24
|
nSamplesPerSec
|
44100
|
44 AC 00 00
|
4
|
uInt32
|
||
28
|
nAvgBytesPerSec
|
176400
|
10 B1 02 00
|
4
|
uInt32
|
||
32
|
nBlockAlign
|
4
|
04 00
|
2
|
uInt16
|
||
34
|
nBitsPerSample
|
16
|
10 00
|
2
|
uInt16
|
||
36
|
Rgad
|
name
|
"rgad"
|
72 67 61 64
|
4
|
ASCII
|
|
40
|
size
|
8
|
08 00 00 00
|
4
|
uInt32
|
||
44
|
fPeakAmplitude
|
1
|
00 00 80 3F
|
4
|
float32
|
||
48
|
nRadioRgAdjust
|
10822
|
46 2A
|
2
|
uInt16
|
||
50
|
nAudiophileRgAdjust
|
18999
|
37 4A
|
2
|
uInt16
|
||
52
|
Data
|
name
|
"data"
|
64 61 74 61
|
4
|
ASCII
|
|
56
|
size
|
176400
|
10 B1 02 00
|
4
|
uInt32
|
||
60
|
waveform data
|
.....
|
.....
|
176400
|
Int16
|