Anda di halaman 1dari 20

PENERAPAN ALGORITMA HUFFMAN PADA KOMPRESI FILE WAVE

Hari Purwanto

Abstraksi
Penggunaan teknik kompresi data merupakan salah satu aspek penting perkembangan
teknologi informasi. Kompresi digunakan untuk berbagai keperluan antara lain: membackup
data, transfer data dan salah satu bagian keamanan data. Terdapat banyak teknik kompresi
data, tiga diantaranya adalah algoritma run length, half byte dan huffman. Salah satu
penerapan teknik kompresi adalah pada file audio, misalnya WAV. File WAV adalah file
audio standar yang digunakan oleh Windows. Format WAV banyak digunakan untuk
keperluan game dan multimedia. Wave sebenarnya merupakan format kasar dimana signal
suara langsung direkam dan dikuantisasi menjadi data digital. Format dasar dari file ini
secara default tidak mendukung kompresi dan dikenal dengan nama PCM (Pulse Code
Modulation). Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik
kompresi yang tidak mengubah data aslinya. Hal tersebut yang menyebabkan algoritma ini
banyak dipakai dalam proses kompresi. Algoritma Huffman bekerja dengan cara melakukan
pengkodean dalam bentuk bit untuk mewakili data karakter. Algoritma ini kurang maksimal
jika ada banyak variasi simbol. Untuk mengoptimalkan algoritma huffman ini bisa digunakan
algoritma Huffman Shift Coding yang akan membagi simbol awal menjadi beberapa blok.
Penggunaan Algoritma Huffman Shift Coding untuk kompresi file audio wave menghasilkan
ratio kompresi rata-rata sebesar 14,87% untuk nilai k=2 dan 8,72% untuk nilai k=3.

Kata Kunci : kompresi, wave, Huffman, sample rate. lossless

Pendahuluan tempat lebih dari 50 MB untuk menyimpan


1.1 Latar Belakang data audio lagu tersebut. Ini tentunya
Salah satu file format suara yang sangat memboroskan media penyimpanan
banyak dipakai dalam sistem operasi seperti hard disk meskipun saat ini telah
Windows adalah format Wave (*.WAV). tersedia kapasitas hard disk yang besar.
Format ini banyak digunakan untuk Masalah tersebut dapat diatasi bila file
keperluan game dan multimedia. Wave Wave tersebut dikompresi untuk
sebenarnya merupakan format kasar (raw mengurangi ukurannya.
format) dimana signal suara langsung
direkam dan dikuantisasi menjadi data Sesuai dengan latar belakang
digital. Format dasar dari file ini secara pemilihan judul di atas, maka yang menjadi
default tidak mendukung kompresi dan masalah dalam penulisan ilmiah ini adalah
dikenal dengan nama PCM (Pulse Code merancang suatu aplikasi dengan
Modulation). menggunakan algoritma Huffman untuk
melakukan kompresi pada file Wave dan
Jika direkam suatu lagu sekualitas bagaimana cara memainkan kembali file
CD Audio menggunakan sampling rate 44,1 Wave yang telah terkompresi tersebut.
kHz, 16 bit per sample, 2 kanal (stereo), Adapun tujuan dari penulisan ilmiah ini
maka total media yang diperlukan untuk adalah:
menyimpan data audio ini per detik adalah 1. Untuk mengetahui cara kerja dari
176.400 byte sehingga untuk durasi 1 menit algoritma Huffman yang dipakai dalam
diperlukan 10,584 MB. Jika rata-rata durasi kompresi dan dekompresi file Wave.
satu lagu selama 5 menit, maka dibutuhkan

40
2. Untuk menghasilkan sebuah aplikasi memperbaiki kesalahan yang terdapat
yang dapat melakukan kompresi dan dalam aplikasi.
dekompresi pada file Wave dengan
input berupa sebuah file Wave serta LANDASAN TEORI
sebagai player file Wave. 2.1 Struktur File Wave
Aplikasi multimedia seperti diketahui
Manfaat dari penulisan Tugas Akhir ini memerlukan manajemen penyimpanan dari
adalah sejumlah jenis data yang bervariasi,
1. Output dari aplikasi ini meliputi file termasuk bitmap, data audio, data video,
Wave yang terkompresi, sehingga informasi mengenai kontrol device periperal.
menghemat kapasitas media RIFF menyediakan suatu cara untuk
penyimpan karena pada suatu file menyimpan semua jenis data tersebut. Tipe
Wave banyak terdapat redudansi data data pada sebuah file RIFF dapat diketahui
serta untuk mempersingkat waktu dari ekstensi filenya. Sebagai contoh jenis-
transmisi sewaktu file tersebut dikirim jenis file yang disimpan dalam bentuk
atau di-download melalui jaringan format RIFF adalah sebagai berikut:
Internet. 1. Audio/visual interleaved data (.AVI)
2. Waveform data (.WAV)
2. Aplikasi ini dapat berfungsi sebagai 3. Bitmapped data (.RDI)
player alternatif untuk file Wave yang 4. MIDI information (.RMI)
terkompresi karena player audio yang 5. Color palette (.PAL)
umum tidak mendukung file Wave 6. Multimedia Movie (.RMN)
yang terkompresi. 7. Animated cursor (.ANI)

Untuk menyelesaikan masalah yang Pada saat ini, file *.AVI merupakan
ada, terdapat beberapa tahapan yang harus satu-satunya jenis file RIFF yang telah
dilalui yaitu: secara penuh diimplementasikan
1. Melakukan pengumpulan berbagai data menggunakan spesifikasi RIFF. Meskipun
dan informasi yang berkaitan dengan file *.WAV juga menggunakan spesifikasi
struktur file Wave dan algoritma RIFF, karena struktur file *.WAV ini begitu
Huffman untuk mendukung aplikasi sederhana maka banyak perusahaan lain
yang akan dirancang penulis. yang mengembangkan spesifikasi dan
standar mereka masing-masing.
2. Merancang antarmuka pemakai (user
interface). Format file WAVE seperti yang
diketahui, merupakan bagian dari
3. Langkah penyelesaian program dimulai spesifikasi RIFF Microsoft yang digunakan
dari membaca file Wave untuk sebagai penyimpan data digital audio.
mengambil informasi dari file tersebut, Format file ini merupakan salah satu format
mengambil chunk data pada file Wave, file audio pada PC. Seiring dengan
melakukan kompresi pada chunk data popularitas Windows maka banyak aplikasi
tersebut dan terakhir menulis kembali yang mendukung format file ini.
hasil data terkompresi tersebut beserta
informasi file Wave tersebut ke dalam Karena bekerja pada lingkungan
bentuk file Wave tersebut. Windows yang menggunakan prosesor
Intel, maka format data dari file WAVE
4. Menulis kode program dalam bahasa disimpan dalam format urutan little-endian
Visual Basic. (least significant byte) dan sebagian dalam
urutan big-endian.
5. Melakukan berbagai pengujian pada
aplikasi yang dirancang dan

41
File WAVE menggunakan struktur dari chunk berikutnya.
standar RIFF yang mengelompokkan isi file
(sampel format, sampel digital audio, dan
lain sebagainya) menjadi “chunk” yang
terpisah, setiap bagian mempunyai header
dan byte data masing-masing. Header
chunck menetapkan jenis dan ukuran dari
byte data chunk. Dengan metoda
pengaturan seperti ini maka program yang
tidak mengenali jenis chunk yang khusus
dapat dengan mudah melewati bagian
chunk ini dan melanjutkan langkah
memproses chunk yang dikenalnya. Jenis
chunk tertentu mungkin terdiri atas sub-
chunk. Sebagai contoh, pada gambar 2.3
dapat dilihat chunk “fmt ” dan “data” Gambar 2.3 Layout File Wave
sebenarnya merupakan sub-chunk dari
chunk “RIFF”.
2.1.1 Header File Wave
Chunk pada file RIFF merupakan Header file Wave mengikuti struktur
suatu string yang harus diatur untuk tiap format file RIFF standar. Delapan byte
kata. Ini berarti ukuran total dari chunk pertama dalam file adalah header chunk
harus merupakan kelipatan dari 2 byte RIFF standar yang mempunyai chunk ID
(seperti 2, 4, 6, 8 dan seterusnya). Jika “RIFF” dan ukuran chunk didapat dengan
suatu chunk terdiri atas jumlah byte yang mengurangkan ukuran file dengan 8 byte
ganjil maka harus dilakukan penambahan yang digunakan sebagai header. Empat
byte (extra padding byte) dengan byte data yaitu kata “RIFF” menunjukkan
menambahkan sebuah nilai nol pada byte bahwa file tersebut merupakan file RIFF.
data terakhir. Extra padding byte ini tidak File Wave selalu menggunakan kata
ikut dihitung pada ukuran chunk. Oleh “WAVE” untuk membedakannya dengan
karena itu sebuah program harus selalu jenis file RIFF lainnya sekaligus digunakan
melakukan pengaturan kata untuk untuk mendefinisikan bahwa file tersebut
menentukan ukuran nilai dari header merupakan file audio waveform.
sebuah chunk untuk mengkalkulasi offset

Tabel 2.3 Nilai Jenis Chunk RIFF


Offset Ukuran Deskripsi Nilai
0x00 4 Chunk ID "RIFF" (0x52494646)
0x04 4 Ukuran Data Chunk (ukuran file) - 8
0x08 4 Jenis RIFF "WAVE" (0x57415645)
0x10 Chunk WAVE

2.1.2 Chunk File WAVE Wave hanya terdiri atas 2 buah chunk, yaitu
Ada beberapa jenis chunk untuk Chunk Format dan Chunk Data. Dua jenis
menyatakan file Wave. Kebanyakan file chunk ini diperlukan untuk menggambarkan

42
format dari sampel digital audio. Meskipun (sampling rate), jumlah bit tiap sampel dan
tidak diperlukan untuk spesifikasi file Wave atribut lainnya. Chunk format ini ditandai
yang resmi, lebih baik menempatkan Chunk dengan chunnk ID “fmt “.
Format sebelum Chunk Data. Kebanyakan
program membaca chunk tersebut dengan A. Chunk ID dan Ukuran Data
urutan di atas dan jauh lebih mudah Chunk ID selalu ditandai dengan kata
dilakukan streaming digital audio dari “fmt “ (0x666D7420) dan ukurannya
sumber yang membacanya secara lambat sebesar data format Wave (16 byte)
dan linear seperti Internet. Jika Chunk ditambah dengan extra format byte yang
Format lebih dulu ditempatkan sebelum diperlukan untuk format Wave khusus,
Chunk Data maka semua data dan format jika tidak terdiri atas data PCM tidak
harus di-stream terlebih dahulu sebelum terkompresi. Sebagai catatan string
dilakukan playback. chunk ID ini selalu diakhir dengan
karakter spasi (0x20). Chunk ID “fmt “
Tabel 2.4 Format Chunk RIFF digunakan sebagai informasi file Wave,
Offset Ukuran* Deskripsi informasi ini berupa: Compression
Code, Number of Channels, Sample
0x00 4 Chunk ID Rate, Average Bytes per Second, Block
Align, Significant Bits per Sample, Extra
0x04 4 Ukuran Data Chunk Format Bytes.
0x08 Byte Data Chunk
B. Kode Kompresi (Compression Code)
* dalam satuan byte Setelah chunk ID dan ukuran data
chunk maka bagian pertama dari format
2.1.3 Chunk Format data file Wave menyatakan jenis
Chunk format terdiri atas informasi kompresi yang digunakan pada data
tentang bagaimana suatu data waveform Wave. Berikut ini daftar kode kompresi
disimpan dan cara untuk dimainkan yang digunakan sekarang ini.
kembali, termasuk jenis kompresi yang
digunakan, jumlah kanal, laju pencuplikan

Tabel 2.6 Kode Kompresi Wave


Kode Deskripsi
0 (0x0000) Tidak Diketahui
1 (0x0001) PCM / Tidak Terkompresi
2 (0x0002) Microsoft ADPCM
6 (0x0006) ITU G.711 a-law
7 (0x0007) ITU G.711 µ-law
17 (0x0011) IMA ADPCM
20 (0x0016) ITU G.723 ADPCM (Yamaha)
49 (0x0031) GSM 6.10
64 (0x0040) ITU G.721 ADPCM
80 (0x0050) MPEG
65,536 (0xFFFF) Tahap Uji Coba

43
C. Jumlah Kanal (Number of Channels) E. Jumlah Rata-Rata Byte Tiap Detik
Jumlah kanal menyatakan berapa (Average Bytes Per Second)
banyak signal audio terpisah yang di- Nilai ini mengindikasikan berapa besar
encode dalam chunk data Wave. Nilai 1 byte data Wave harus di-stream ke
(satu) berarti merupakan signal mono, konverter D/A (Digital Audio) tiap detik
nilai 2 (dua) berarti signal stereo dan sewaktu suatu file Wave dimainkan.
seterusnya. Informasi ini berguna ketika terjadi
pengecekan apakah data dapat di-
D. Laju Pencuplikan (Sampling Rate) stream cukup cepat dari suatu sumber
Menyatakan jumlah potongan sampel agar sewaktu playback pembacaan data
tiap detik. Nilai ini tidak dipengaruhi oleh tidak terhenti. Nilai ini dapat dihitung
jumlah kanal. dengan menggunakan rumus di bawah
ini :

............................................................... (2.1)
AvgBytesPerSec = SampleRate * BlockAlign

F. Block Align jumlah kanal dan dapat dikalkulasi


Menyatakan jumlah byte tiap potongan dengan rumus di bawah ini:
sampel. Nilai ini tidak dipengaruhi oleh
................... (2.2)
BlockAlign = SignificantBitsPerSample / 8 * NumChannels

G. Bit Signifikan Tiap Sampel Wave yang memiliki kompresi dan ini
(Significant Bits Per Sample) memberikan informasi mengenai jenis
Nilai ini menyatakan jumlah bit yang kompresi apa yang diperlukan untuk
digunakan untuk mendefinisikan tiap men-decode data Wave. Jika nilai ini
sampel. Nilai ini biasanya berupa 8, 16, tidak dilakukan word aligned
24 atau 32 (merupakan kelipatan 8). (merupakan kelipatan 2), penambahan
Jika jumlah bit tidak merupakan byte (padding) pada bagian akhir data
kelipatan 8 maka jumlah byte yang ini harus dilakukan.
digunakan tiap sampel akan dibulatkan
ke ukuran byte paling dekat dan byte 2.1.4 Chunk Data
yang tidak digunakan akan diset 0 (nol) Chunk ini ditandai dengan adanya
dan diabaikan. string “data”. Chunk Data pada file Wave
terdiri atas sampel digital audio yang mana
H. Extra Format Byte dapat didecode kembali menggunakan
Nilai ini menyatakan berapa banyak metoda kompresi atau format biasa yang
format byte tambahan. Nilai ini tidak ada dinyatakan dalam chunk format Wave. Jika
jika kode kompresi adalah 0 (file PCM kode kompresinya adalah 1 (jenis PCM
yang tidak terkompresi). Jika terdapat tidak terkompresi), maka “Data Wave” terdiri
suatu nilai pada bagian ini maka ini atas nilai sampel mentah (raw sample
digunakan untuk menentukan jenis file value).

44
Tabel 2.7 Format Data Chunk
Offset Ukuran Tipe Deskripsi Nilai
0x00 4 char[4] chunk ID "data" (0x64617461)
0x04 4 dword Ukuran chunk Tergantung pada panjang sampel dan jenis kompresi
0x08 Sampel data

Sampel digital audio multi-channel Tipe dari pelayanan audio


disimpan dalam bentuk Data Wave memerlukan format yang berbeda untuk
Interlaced. File Wave multi-channel (seperti informasi audio dan teknologi yang berbeda
stereo dan surround) disimpan dengan untuk menghasilkan suara. Windows
mensiklus tiap kanal sampel audio sebelum menawarkan beberapa tipe dari pelayanan
melakukan pembacaan lagi untuk tiap audio :
waktu cuplik berikutnya. Dengan cara 1. Pelayanan audio Waveform
seperti ini maka file audio tersebut dapat menyediakan playback dan recording
dimainkan atau di-stream tanpa harus untuk perangkat keras digital audio.
membaca seluruh isi file. Lebih praktis Waveform digunakan untuk
dengan cara seperti ini ketika sebuah file menghasilkan non-musikal audio
Wave dengan ukuran yang besar dimainkan seperti efek suara dan suara narasi.
dari disk (mungkin tidak dapat dimuat Audio ini mempunyai keperluan
seluruhnya ke dalam memori) atau ketika penyimpanan yang sedang dan
melakukan streaming sebuah file Wave keperluan untuk tingkat transfer paling
melalui jaringan Internet. kecil yaitu 11 K/detik.
2. Midi Audio, menyediakan pelayanan
Seperti dikemukan di atas, semua file MIDI dan MIDI playback melalui
chunk pada RIFF (termasuk chunk Wave synthesizer internal maupun eksternal
“data”) harus di-word align. Jika data dan perekaman MIDI. MIDI digunakan
sampel menggunakan byte angka ganjil, untuk aplikasi yang berhubungan
maka dilakukan penambahan sebuah byte dengan musik seperti komposisi musik
dengan nilai nol yang ditempatkan pada dan program MIDI sequencer. Karena
bagian akhir sampel data. Ukuran Header memerlukan tempat penyimpanan
chunk “data” tidak termasuk byte ini. lebih kecil dan tingkat transfer yang
lebih kecil daripada Waveform audio,
2.2 Data Audio maka sering digunakan untuk
Salah satu tipe data multimedia keperluan background.
adalah audio yang berupa suara ataupun 3. Compact Disc Audio (CDA)
bunyi, data audio sendiri telah mengalami menyediakan pelayanan untuk
perkembangan yang cukup pesat seiring playback informasi Red Book Audio
dengan semakin umumnya orang dengan dalam CD dengan drive CD-ROM
perangkat multimedia. Tentunya yang pada komputer multimedia. CD
merupakan syarat utama supaya komputer menawarkan kualitas suara tertinggi,
mampu menjalankan tipe data tersebut namun juga memerlukan daya
adalah adanya speaker yang merupakan penyimpanan yang paling besar pula,
output untuk suara yang dihasilkan dan sekitar 176 KB/detik.
untuk menghasilkan maupun mengolah 4. Wave Audio merupakan kreasi
data suara yang lebih kompleks seperti perusahaan raksasa perangkat lunak
*.WAV, *.MIDI tersebut tentunya sudah Microsoft yang berasal dari standar
diperlukan perangkat yang lebih canggih RIFF (Resource Interchange File
lagi yaitu sound card. Format). Wave audio ini telah menjadi

45
standar format file audio komputer rate-distortion function. Pada teori ini
dari suara sistem dan games sampai dikemukakan jika D bersifat toleransi
CD Audio. File Wave diidentifikasikan terhadap jumlah distorsi, maka R(D) adalah
dengan nama yang berekstensi kemungkinan terbaik dari laju kompresi.
*.WAV. Format asli dari tipe file
tersebut sebenarnya berasal dari Ketika kompresi lossless (berarti
bahasa C. tidak terdapat distorsi atau D = 0),
kemungkinan laju kompresi terbaik adalah
2.10 Kompresi Data R(0) = H (untuk sumber alphabet yang
Kompresi data dilakukan untuk terbatas). Dengan kata lain, laju kompresi
mereduksi ukuran data atau file. Dengan terbaik yang mungkin adalah entropy rate.
melakukan kompresi atau pemadatan data Dalam pengertian ini, teori rate-distortion
maka ukuran file atau data akan lebih kecil adalah suatu penyamarataan dari teori
sehingga dapat mengurangi waktu transmisi kompresi data lossless, dimana dimulai dari
sewaktu data dikirim dan tidak banyak tidak ada distorsi (D = 0) hingga terdapat
banyak menghabiskan ruang media beberapa distorsi (D > 0).
penyimpan.
Teori kompresi data lossless dan
teori rate-distortion dikenal secara kolektif
2.10.1 Teori Kompresi Data sebagai teori pengkodean sumber (source
Dalam makalahnya di tahun 1948, coding theory). Teori pengkodean sumber
“A Mathematical Theory of menyatakan batas fundamental pada unjuk
Communication”, Claude E. Shannon kerja dari seluruh algoritma kompresi data.
merumuskan teori kompresi data. Shannon Teori tersebut sendiri tidak dinyatakan
membuktikan adanya batas dasar secara tepat bagaimana merancang dan
(fundamental limit) pada kompresi data jenis mengimplementasikan algoritma tersebut.
lossless. Batas ini, disebut dengan entropy Bagaimana pun juga algoritma tersebut
rate dan dinyatakan dengan simbol H. Nilai menyediakan beberapa petunjuk dan
eksak dari H bergantung pada informasi panduan untuk memperoleh unjuk kerja
data sumber, lebih terperinci lagi, yang optimal. Dalam bagian ini, akan
tergantung pada statistikal alami dari data dijelaskan bagaimana Shannon membuat
sumber. Adalah mungkin untuk model dari sumber informasi dalam istilah
mengkompresi data sumber dalam suatu yang disebut dengan proses acak (random
bentuk lossless, dengan laju kompresi process). Di bagian selanjutnya akan
(compression rate) mendekati H. dijelaskan mengenai teorema pengkodean
Perhitungan secara matematis sumber lossless Shannon, dan teori
memungkinkan ini dilakukan lebih baik dari Shannon mengenai rate-distortion. Latar
nilai H. belakang mengenai teori probabilitas
diperlukan untuk menjelaskan teori tersebut.
Shannon juga mengembangkan
teori mengenai kompresi data lossy. Ini
lebih dikenal sebagai rate-distortion theory. 2.10.14 Jenis-Jenis Algoritma Kompre-
Pada kompresi data lossy, proses si Data
dekompresi data tidak menghasilkan data Algoritma kompresi untuk jenis kompresi
yang sama persis dengan data aslinya. lossless (tanpa kehilangan data) yang
Selain itu, jumlah distorsi atau nilai D dapat banyak digunakan diantaranya : Huffman,
ditoleransi. Shannon menunjukkan bahwa, RLE, LZ77, LZ78 dan LZW. Sedangkan
untuk data sumber (dengan semua properti untuk jenis kompresi lossy (kehilangan
statistikal yang diketahui) dengan beberapa bagian data), algoritma yang
memberikan pengukuran distorsi, terdapat banyak digunakan antara lain: Differential
sebuah fungsi R(D) yang disebut dengan Modulation, Adaptive Coding dan Discrete

46
Cosine Transform (DCT). dan yang lainnya sebagai child sisi
kanan
3. Lakukan langkah di atas hingga
2.10.15 Algoritma Kompresi Huffman membentuk satu pohon biner tunggal
Algoritma kompresi Huffman 4. Untuk setiap child sisi kiri beri simbol ‘0’
dinamakan sesuai dengan nama dan beri simbol ‘1’ untuk merepresentasi
penemunya yaitu David Huffman, seorang child sisi kanan
profesor di MIT (Massachusets Instuate of
Technology). PEMBAHASAN DAN PERANCANGAN
3.1 Pembahasan
Kompresi Huffman merupakan Kompresi data atau dikenal juga
algoritma kompresi lossless dan ideal untuk sebagai pemadatan data mempunyai tujuan
mengkompresi teks atau file program. Ini memperkecil ukuran data sehingga selain
yang menyebabkan mengapa algoritma ini dapat menghemat media penyimpanan dan
banyak dipakai dalam program kompresi. memudahkan transfer dalam jaringan
seperti Internet misalnya.
Kompresi Huffman termasuk dalam
algoritma keluarga dengan variable Dalam masalah transfer data,
codeword length. Ini berarti simbol ukuran file yang kecil akan mempercepat
individual (karakter dalam sebuah file teks waktu transmisi. Dalam beberapa kasus
sebagai contoh) digantikan oleh urutan bit seperti seseorang ingin memberikan
yang mempunyai suatu panjang yang nyata datanya kepada temannya tetapi ukuran file
(distinct length). Jadi simbol yang muncul data misalkan ukurannya sebesar 1,6 MB.
cukup banyak dalam file akan memberikan Jika ia ingin menyimpannya dalam sebuah
urutan yang pendek sementara simbol yang disket baru diberikan kepada temannya,
jarang dipakai akan mempunyai urutan bit maka file tersebut tidak akan muat. Untuk
yang lebih panjang. itu sebelum di-copy-kan file tersebut dapat
dikompresi dulu sehingga ukurannya lebih
Algoritma kompresi Huffman secara kecil dari ukuran semula dan dapat muat ke
umum efisien dalam mengkompresi teks dalam disket tersebut.
atau file program. Untuk file image biasanya
dipakai algoritma yang lain. Kompresi File merupakan data digital yang
Huffman secara umum dipakai dalam berupa representasi atas bit ‘0’ dan ‘1’.
program kompresi seperti PKZip, LHA, GZ, Seringkali dalam sebuah file terjadi
ZOO, dan ARJ. Algoritma ini juga dipakai perulangan data atau redundancy. Semua
dalam kompresi JPEG dan MPEG. metode kompresi melakukan pemadatan
terhadap data berulang tersebut.
Adapun bentuk algoritma dari
Huffman dalam membentuk sebuah pohon Seperti diketahui jenis algoritma
biner adalah sebagai berikut: kompresi terbagi atas lossless compression
1. Dimulai dengan penyusunan frekuensi dan lossy compression. Pada lossy
simbol sebagai frekuensi dari pohon compression ada data yang hilang tetapi
2. Jika terdapat lebih dari satu pohon: tidak banyak setelah data dikompresi.
a. Carilah dua pohon dengan jumlah Contoh standar yang menggunakan jenis
weight yang paling kecil lossy compression adalah JPEG (Joint
b. Gabungkan dua pohon tersebut Picture Experts Group) sebagai standar
menjadi satu dan mempunyai nilai image gambar atau still image, MPEG
setara dengan jumlah keduanya, (Motion Picture Experts Group) untuk audio
atur salah satunya yang bernilai video sepeti Video CD, MP3 (MPEG-1
paling kecil sebagai child sisi kiri Layer 3) untuk audio. Data hasil kompresi
dengan lossy compression jika

47
dikembalikan maka hasilnya tidak akan Secara umum jika ingin
sama persis lagi dengan data orisinil. merepresentasikan n buah karakter maka
Berbeda dengan lossy compression, pada diperlukan 2n bit untuk merepresentasikan
lossless compression tidak ada data yang satu karakter. Kode ASCII (American
hilang setelah proses kompresi dan data Standar Code for Information Interchange)
dapat dikembalikan seperti data semula. menggunakan 7 bit untuk
Contoh standar yang menggunakan jenis ini merepresentasikan sebuah karakter. Oleh
adalah Gzip, Unix Compress, WinZip, GIF karena 27 = 128 bit maka direpresentasikan
(Graphic Interchange Format) untuk still dengan menggunakan kode ASCII.
image, dan Morse Code.
Kode ASCII dan kode yang
disebutkan di bagian atas untuk
3.1.1 Encoding Huffman merepresentasikan karakter-karakter
Algoritma kompresi Huffman atau dikenal sebagai fixed length codes. Ini
disebut dengan encoding Huffman adalah dikarenakan tiap karakter mempunyai
algoritma yang dipakai untuk mengkompresi panjang bit yang sama atau dengan kata
file. Teknik kompresi ini dengan lain jumlah bit yang diperlukan untuk
menggantikan code yang lebih kecil pada merepresentasi tiap karakter sama. Pada
karakter yang sering dipakai dan code yang kode ASCII setiap karakter memerlukan 7
lebih panjang untuk karakter yang tidak bit. Dengan menggunakan variable length
begitu sering dipakai. codes untuk tiap karakter maka dapat
direduksi ukuran dari suatu file. Dengan
Code dalam hal ini adalah urutan bit menggantikan code yang lebih kecil untuk
berupa nilai ‘0’ dan ‘1’ yang secara unik karakter-karakter yang lebih sering dipakai
merepresentasikan sebuah karakter. dan code yang lebih besar untuk karakter
Ide dasar dari encoding Huffman adalah yang tidak sering dipakai, maka sebuah file
mencocokkan code word yang pendek pada dapat dikompresi.
blok input dengan kemungkinan yang
terbesar dan code word yang panjang Sebagai contoh misalkan sebuah file
dengan kemungkinan terkecil. Konsep ini terdiri atas data berikut ini.
mirip dengan Morse Code. AAAAAAAAAABBBBBBBBCCCCCCDDDD
DEE
Suatu file merupakan kumpulan dari Maka frekuensi atau banyaknya sebuah
karakter-karakter. Dalam suatu file tertentu karakter muncul pada sebuah file adalah
suatu karakter dipakai lebih banyak sebagai berikut.
daripada yang lain. Jumlah bit yang Frekuensi dari A adalah 10
diperlukan untuk merepresentasikan tiap Frekuensi dari B adalah 8
karakter bergantung pada jumlah karakter Frekuensi dari C adalah 6
yang harus direpresentasikan. Dengan Frekuensi dari D adalah 5
menggunakan satu bit maka dapat Frekuensi dari E adalah 2
merepresentasikan dua buah karakter.
Sebagai contoh 0 merepresentasikan Jika tiap karakter direpresentasikan
karakter pertama dan 1 merepresentasikan dengan menggunakan tiga buah bit maka
karakter kedua. Dengan menggunakan dua jumlah bit yang diperlukan untuk
bit maka dapat merepresentasikan 22 atau 4 menyimpan file ini adalah:
buah karakter. 3 * 10 + 3 * 8 + 3 * 6 + 3 * 5 + 3 * 2 = 93 bit
00  karakter pertama Sekarang misalkan karakter-karakter
01  karakter kedua di atas direpresentasikan seperti berikut ini.
10  karakter ketiga A dengan code 11
11  karakter keempat B dengan code 10
C dengan code 00

48
D dengan code 011 sebuah karakter adalah n maka karakter
E dengan code 010 tersebut berada pada level ke (n + 1) dari
pohon. Sebagai contoh code length dari
Maka ukuran file tersebut akan karakter D adalah 011, maka code length-
menjadi 2 * 10 + 2 * 8 + 2 * 6 + 3 * 5 = 69 nya adalah 3. Oleh karena itu karakter
bit. Tingkat kompresi dengan nilai tertentu tersebut harus berada pada level keempat
telah dicapai saat ini. Secara umum nilai dari pohon.
rasio kompresi dapat diperoleh dengan
menggunakan cara atau metode seperti ini. Code untuk tiap karakter diperoleh
dengan memulai dari node akar dan
Seperti yang terlihat frekuensi bergerak turun ke daun yang
karakter yang sering muncul digantikan merepresentasikan karakter. Ketika
dengan code yang lebih kecil sementara bergerak ke node kiri anak sebuah bit ‘0’
frekuensi karakter yang jarang muncul ditambahkan pada code dan ketika
digantikan dengan code yang lebih besar. bergerak ke sisi kanan node anak, bit ‘1’
Salah satu kesulitan dengan menggunakan ditambahkan pada code.
variable-length code adalah tidak dapat
diketahui kapan dicapai akhir dari suatu Untuk memperoleh code dari
karakter dalam pembacaan urutan bit ‘0’ karakter “A” dari pohon, pertama sekali
dan ‘1’. Masalah ini dapat dipecahkan jika dimulai dari node akar (node 1). Karena
merancang kode sedemikian rupa bahwa karakter “A” pada keturunan pada sisi
tidak ada code yang sama persis dipakai kanan node anak (ini ditentukan dengan
kembali untuk karakter yang lain. Pada cara cabang yang mana yang akan diikuti
kasus di atas A direpresentasikan dengan dengan mengetes dan melihat apakah
11. Tidak ada code yang lain dimulai cabang tersebut merupakan node daun
dengan 11 lagi. Seperti halnya dengan C untuk karakter ataupun merupakan
digantikan dengan code 00. Maka tidak ada ancestor-nya) bergerak ke kanan dan
code yang lain dengan 00. Code jenis menambahkan bit ‘1’ pada code untuk
seperti ini dikenal sebagai prefix codes. karakter “A”. Sekarang bila telah berada
pada node 3, leaf node untuk karakter “A”
Secara umum, metode untuk berada pada kanan dari node tersebut, jadi
menggantikan suatu karakter code dengan sekali lagi bergerak ke kanan dan
menggunakan variable-length prefix codes menambahkan ‘1’ pada code-nya. Sekarang
yang mengambil keuntungan dari frekuensi telah dicapai node 7 yang mana merupakan
relatif karakter pada teks untuk di-encode leaf node untuk karakter A. Jadi code untuk
dikenal sebagai encoding Huffman. karakter “A” adalah 11. Jadi cara yang
sama untuk code tiap karakter yang lain
Sebagai catatan bila n karakter dapat diperoleh juga.
terdapat dalam sebuah file maka jumlah
node pada pohon Huffman berjumlah (2n  Seperti terlihat code dari karakter
1). Jika terdapat n node dalam sebuah yang mempunyai frekuensi tertinggi lebih
pohon maka terdapat paling banyak (n + pendek dari pada code dengan frekuensi
1)/2 level, dan sekurang-kurangnya log2(n + yang rendah.
1) level. Jumlah level pada sebuah pohon
Huffman mengindikasikan panjang Metode encoding ini meminimalkan
maksimum dari code yang diperlukan untuk encoding variable-length character
merepresentasikan sebuah karakter. berdasarkan pada frekuensi dari tiap
karakter. Pertama, tiap karakter menjadi
Code length dari sebuah karakter sebuah pohon trivial (trivial tree), dengan
mengindikasikan level dimana karakter karakter hanya sebagai node. Frekuensi
tersebut berada. Jika code length dari karakter merupakan frekuensi dari pohon.

49
Jika dua pohon dengan frekuensi paling Seperti disebutkan di bagian atas
sedikit digabungkan dengan sebuah akar encoding Huffman dirancang dengan
baru maka akan memberikan hasil jumlah menggabungkan sekaligus dua karakter
dari frekuensi mereka. Ini akan berulang yang paling sedikit kemungkinannya, dan
hingga semua karakter membentuk satu perulangan proses ini hingga hanya ada
buah pohon. Satu kode bit merepresentasi satu karakter sisa. Kode pohon (code tree)
tiap level. Jadi karakter yang berfrekuensi akan dibuat dan encoding Huffman
tinggi akan dekat dengan akar dan akan di- diperoleh dari label dari kode pohon.
encode dengan beberapa bit, dan karakter
yang jarang muncul akan jauh dari akar Ada beberapa point yang harus
yang di-encode dengan panjang bit yang diperhatikan mengenai pembentukan kode
banyak. pohon ini, antara lain:
1. Tidak ada masalah bagaimana karakter-
Menggabungkan pohon-pohon karakter tersebut diatur dan begitu juga
dengan frekuensi sama halnya dengan dengan code akhir pohon diberi label
menggabungkan urutan-urutan panjang (dengan ‘0’ dan ‘1’). Bagian atas cabang
data untuk mendapatkan hasil diberi nilai ‘0’ dan bagian bawah cabang
penggabungan yang optimal. Dikarenakan diberi nilai ‘1’
sebuah node dengan hanya satu anak 2. Encoding Huffman bersifat unik
tidaklah optimal, maka encoding Huffman 3. Encoding Huffman optimal dalam kasus
merupakan satu pohon biner yang lengkap. tidak ada kehilangan dalam fixed-to-
variable length code yang mempunyai
Sebagai catatan kasus terburuk dari sebuah nilai di bawah nilai rata-rata
encoding Huffman (atau sama halnya 4. Rate dari code di atas adalah 2,94
dengan encoding paling panjang Huffman bit/karakter
untuk satu kumpulan karakter) adalah ketika 5. Entropi urutan paling bawah adalah 2,88
distribusi dari frekuensi diikuti oleh bilangan bit/karakter
Fibonacci.

Encoding Huffman optimal untuk 3.1.2 Generalisasi Pohon Huffman


meng-encoding karakter (satu karakter Langkah pertama pembentukan
dengan satu code word) dan mudah untuk pohon Huffman adalah proses pembacaan
diprogram. Metode lain seperti Shannon- pada file dari awal file hingga akhir file untuk
Fano merupakan kode prefix minimal. menghitung frekuensi dari setiap karakter
Sedangkan arithmetic coding saat ini yang yang muncul. Hasilnya disimpan dalam
paling bagus karena dapat mengalokasi sebuah array. Ukuran dari array sekurang-
sebagian kecil bit, tetapi lebih rumit. kurangnya 2n 1 (karena untuk setiap n
karakter maka terdapat 2n1 node dalam
Kompleksitas waktu dari encoding pohon Huffman) dimana n merupakan
Huffman adalah O(nlogn). Dengan jumlah karakter yang terdapat pada file.
menggunakan sebuah heap untuk Secara default dapat dipakai array dengan
menyimpan nilai besaran dari tiap pohon, 511 elemen. Karena satu byte dapat
tiap iterasi memerlukan waktu O(logn) untuk merepresentasikan 256 karakter yang
memeriksa besaran paling kecil dan berbeda, jadi diperlukan 2 * 256  1 = 511
menyisipkan besaran yang baru, ini dengan elemen. Tiap elemen dari array tersebut
asumsi bahwa terdapat O(n) iterasi untuk merepresentasikan sebuah node dari
tiap item. [Ang, Woi, pohon.
http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS2
10/ ] Elemen pertama dari array ini
merupakan frekuensi dari karakter pertama.
Sedangkan elemen kedua array merupakan

50
frekuensi dari karakter kedua dan karakter dari dari input stream). Tiap
seterusnya. dari n pohon ini merepresentasikan
sebuah input karakter dan mempunyai
Setelah file dibaca, 256 elemen suatu ‘berat’ atau nilai yang
pertama akan berisi frekuensi setiap 256 berkorespondensi pada jumlah
karakter tersebut. Sisa 255 elemen akan frekuensi mereka. Urutkan pohon-pohon
dalam keadaan kosong. Langkah tersebut dimulai dari frekuensi terkecil
selanjutnya adalah mencari dua node yang hingga terbesar.
mempunyai frekuensi paling kecil. Ambil 3. Dari kumpulan atau koleksi ini, ambil
satu dari elemen kosong ini dari array dan dua pohon dengan nilai yang terkecil
buat menjadi parent dari kedua node dan hilangkan keduanya dari kumpulan.
tersebut. Frekuensi dari parent node Gabungkan keduanya hingga
tersebut adalah jumlah dari frekuensi dari membentuk satu pohon baru dimana
kedua node tersebut. Node kiri dan kanan akarnya mempunyai nilai setara dengan
anak dapat dipertukarkan, tidak menjadi jumlah dari nilai kedua pohon tersebut
masalah jika node 8 berada di kiri atau di dan nilai terbesar berada di sisi kanan
kanan node anak dari parent node 5. dan nilai terkecil berada di sisi kiri.
Tambahkan hasil pohon tersebut ke
kumpulan semula lakukan pengurutan.
4. Lanjutkan proses ini, pilih dua buah
pohon dimulai dari pohon 1 hingga (n
1) dengan nilai paling rendah,
gabungkan keduanya dengan
membentuk sebuah akar baru, dan beri
nilai akar tersebut yang merupakan
Gambar 3.4 Penggabungan Dua Node
jumlah nilai dari kedua pohon yang
Menjadi Satu Parent Node
digabung, Kemudian tempatkan kembali
pohon baru ke dalam kumpulannya dan
Sekarang cari dua node berikutnya
diurutkan kembali. Ulang proses ini
yang mempunyai frekuensi terkecil, setelah
hingga membentuk satu pohon biner
menghilangkan dua node anak sebelumnya
tunggal.
dan menambahkan parent node pada daftar
pencarian. Lanjutkan proses tersebut
Jika pada tiap titik terdapat lebih dari
hingga hanya satu node yang bersisi pada
satu cara untuk memilih dua pohon dengan
daftar pencarian. Node tersebut merupakan
nilai terendah, algoritma akan memilih
node akar dari pohon Huffman.
secara sembarang. Hasil pohon tunggal
dengan satu akar tunggal disebut dengan
pohon Huffman. Dengan cara seperti ini,
3.1.3 Algoritma Membentuk Pohon
node dengan nilai terbesar akan dekat
Biner Pada Encoding Huffman
dengan bagian akar pohon, dan akan
Langkah pertama dari encoding
dikodekan dengan bit yang sedikit.
Huffman adalah membentuk sebuah pohon
biner. Adapun algoritmanya adalah sebagai
3.1.4 Algoritma Kompresi File
berikut:
Setelah pohon Huffman
1. Pertama sekali hitung banyaknya
digeneralisasi, file akan dibaca (scan) sekali
perulangan karakter yang muncul untuk
lagi dan tiap karakter pada file akan
tiap karakter. Ini merupakan frekuensi
digantikan dengan code yang
dari tiap karakter.
berkorespondensi dari pohon. Setelah
2. Bentuk satu koleksi sebanyak n buah
selesai karakter dan code untuk tiap
node pohon, satu node untuk tiap
karakter beserta panjang dari tiap code
karakter (dimana n adalah jumlah
harus disimpan dalam file ke dalam bentuk

51
tabel. Tabel ini diperlukan selama proses karakter yang direpresentasikan oleh
dekompresi nantinya. Frekuensi dari code pada file yang dikompresi.
karakter-karakter tidak perlu disimpan
karena tidak diperlukan pada proses Setelah pohon Huffman dibentuk
dekompresi. Ukuran dari tabel ini kembali maka proses aktual dekompresi
bergantung pada file yang dikompresi dan dapat dilakukan dengan algoritma berikut
biasanya berkisar antara 500 hingga 1200 ini:
byte. 1. Node saat ini diset menjadi root node.
2. Suatu urutan nilai ‘0’ dan ‘1’ dibaca dari
3.1.5 Dekompresi File file yang terkompresi. Untuk setiap nilai
Sebelum melakukan dekompresi file, maka ‘0’ yang dibaca maka pindah ke node
harus dibentuk kembali pohon Huffman anak sisi kiri dari node saat ini dan
berdasarkan informasi yang ada pada tabel setiap nilai ‘1’ yang dibaca maka pindah
yang disimpan dengan file yang dikompresi. ke node anak sisi kanan dari node saat
Untuk melakukan ini dapat dilakukan ini dan diset sebagai node saat ini.
dengan algoritma berikut ini: 3. Jika node saat ini merupakan sebuah
1. Menginisialisasi sebuah array dengan daun akan cetak karakter yang
511 elemen dan diset dengan nilai 0. direpresentasikan oleh node ini. Node
2. Mengambil satu elemen dari array saat ini diset ulang ke node akar.
untuk dijadikan sebagai node akar (root 4. Langkah ke-2 dan ke-3 diulang hingga
node). Root node merupakan bagian semua byte dalam file selesai dibaca.
awal dari node.
3. Berikutnya membaca bit ke-i dari code Sekali proses ini selesai maka file
untuk karakter ke-j pada tabel. output terdiri dari data yang dikompresi.
4. Jika bit ke-i dari code bernilai ‘1’,
diambil elemen yang lain dari array dan
membuatnya sebagai node anak sisi 3.1.7 Struktur File Hasil Kompresi
kanan dari node sekarang. Jika bernilai Hasil kompresi pada file Wave akan
‘0’ maka node dibuat di sisi kiri dari mempunyai ekstensi *.cmp dan dibentuk
child node dari node saat ini. Jika node dengan struktur yang sederhana. Terdiri
saat ini telah mempunyai sebuah node atas dua bagian yaitu bagian “Header” dan
akan baik di sisi kiri atau kanan maka bagian “Data”. Bagian “Header” merupakan
langkah ini dilangkahi. bagian awal data yang berisi informasi
5. Jika bit yang baru dibaca saat ini mengenai pohon Huffman pada file Wave
merupakan bit terakhir dari code maka yang dikompresi. Bagian ini mempunyai
node tersebut menyimpan karakter ukuran maksimum 511 byte dan bervariasi
yang direpresentasikan oleh code. sesuai dengan banyaknya karakter yang
6. Node ini kemudian dibuat sebagai node terdapat pada file Wave. “Header”
saat ini. merupakan bagian yang penting untuk
7. Nilai i ditambah proses dekompresi nantinya untuk
8. Langkah ke-3 dan ke-5 diulang hingga membentuk kembali pohon Huffman file
semua bit yang code untuk karakter ke- Wave tersebut. Sedangkan bagian “Data”
j dibaca. merupakan data hasil kompresi atas file
9. Node saat ini diset ulang ke node akar. Wave berdasarkan tabel kode dari pohon
10. j ditambah dan i diset ulang menjadi 0 Huffman yang dihasilkan.
11. Langkah ke-3 dan ke-10 diulang hingga
code untuk semua karakter dibaca. Offset byte ke-1 sampai ke-511
12. Sekali proses ini selesai akan diperoleh merupakan hasil penyimpanan tipe data
pohon Huffman yang lengkap dan array yang dihasilkan dari pohon Huffman
dapat dipakai untuk mengkompresi file. kemudian disimpan pada file hasil kompresi.
Pohon ini dipakai untuk mencari Bagian header tersebut berisi karakter dan

52
dengan nilai weight-nya, berarti untuk tiap bagian header berisi informasi mengenai
karakter beserta nilai frekuensinya jenis file Wave, audio format, sample rate,
memerlukan dua ruang dalam array. byte rate, jumlah kanal, block align, bits per
sample, dan lain-lain.
3.2 Perancangan
Pada bagian perancangan ini akan Bagian yang dikompresi dan
dijelaskan proses perancangan program didekompresi pada file Wave adalah bagian
beserta dengan perancangan form sebagai chunk data selain itu file output hasil
user interface dari program. kompresi akan diberi nilai “88” pada sub
chunk audio format untuk membedakan file
3.2.1 Perancangan Program tersebut dengan file tidak terkompresi yang
Algoritma atau encoding Huffman biasanya bernilai “1” pada bagian audio
sebenarnya merupakan algoritma kompresi format-nya. Untuk lebih jelasnya dapat
yang dapat diterapkan pada semua jenis dilihat pada skema berikut bagian dari file
baik untuk file biner maupun file teks. Wave yang diproses.
Algoritma ini efektif dengan rasio kompresi
yang rendah jika terdapat banyak Berikut ini merupakan diagram alir
redundancy data atau perulangan data yang dari program kompresi dan dekompresi file
sama pada file. Wave. Diagram pertama memperlihatkan
proses pembacaan file untuk mendapatkan
Pada program ini hanya akan dibuat informasi file Wave. Diagram kedua berupa
kompresi dan dekompresi khusus hanya diagram untuk proses kompresi dan
pada file audio berjenis Wave dan dekompresi. Diagram ketiga mengenai cara
mempunyai audio format berjenis PCM memainkan file Wave dalam program.
(Pulse Code Modulation) dan hanya
mendukung jumlah kanal maksimum 2 buah Begin
kanal (mono dan stereo). Untuk jenis Wave
dengan Multi Channel tidak dapat dilakukan
proses kompresi. Load File
Wave

File Wave tersebut biasanya selalu


berukuran besar untuk durasi waktu main Get File Wave
yang lama. Sebagai contoh untuk jenis Header
sample rate 44.100 Hz dengan jumlah kanal
stereo dan bits per sample 16 bit untuk
durasi selama 1 detik saja memerlukan Yes
RIFF And
kapasitas sebesar 44.100  2  16 = WAVE ?
Add To List

1.411.200 bit per detik = 176.400 byte per


detik. Jadi untuk durasi lagu yang rata-rata No
4 menit memerlukan kapasitas 176.400  4
 60 = 42.336.000 byte. End

Seperti halnya dengan struktur file Gambar 3.18 Diagram Alir Pembacaan File
yang lain, file Wave juga mempunyai Wave
struktur tersendiri. Struktur file Wave
mengikuti standar RIFF dengan Langkah pertama sebelum file Wave
pengelompokkan informasi file atas chunk- yang dimasukkan ke dalam list, maka
chunk. Secara umum bagian dari file Wave terlebih dahulu file Wave di-load dan
dibagi atas bagian header dan bagian data. dibuka. Setelah itu lakukan pembacaan
Bagian data menyimpan data Wave yang pada header file Wave untuk 44 byte
dapat di-playback kembali. Sedangkan

53
pertama. Selanjutnya lakukan pengambilan dekompresi tidak dilakukan. Sebaliknya jika
nilai 4 byte pertama lakukan pengecekan terdapat satu atau beberapa file yang
apakah merupakan string “RIFF”, berikutnya ditandai maka proses dilakukan pada file
adalah pengambilan dari byte ke-8 hingga pertama yang ditandai. File dibaca untuk
byte ke-12 dan lakukan pengecekan apakah mengambil nilai Audio Format, seluruh
merupakan string “WAVE”. Jika keduanya header file dan chunk data yang merupakan
benar maka file tersebut merupakan file data audio. Jika bernilai 1 berarti file belum
Wave dan langsung ditambahkan di bagian dikompresi maka dapat dilakukan proses
list, jika tidak lakukan loading file berikutnya. kompresi. Kompresi dilakukan hanya pada
bagian chunk data dengan algoritma
Huffman. Hasil kompresi berupa data yang
dikompresi berikut pohon Huffman disimpan
sekaligus akan ditulis ke file output. Setelah
proses kompresi selesai informasi file yang
diproses ditulis kembali ke file output berikut
dengan pohon Huffman dan data hasil
kompresi. Setelah itu lakukan perhitungan
kembali nilai chunk size yaitu ukuran file
output dikurangi dengan 8 byte dan
perhitungan subchunk2 size yaitu ukuran
data hasil kompresi berikut dengan pohon
Huffman dalam satuan byte.

Untuk proses dekompresi kembali


seperti halnya dengan proses kompresi.
Chunk data file Wave dan informasi header
file diambil dan dicek nilai audio format
apakah bernilai 88, jika ya maka dilakukan
proses dekompresi yang merupakan
kebalikan dari proses kompresi. Prosesnya
dengan membaca dan membentuk pohon
Huffman kembali dimulai dari byte ke-45 file
Wave, setelah itu seluruh data hasil
kompresi dikembalikan ke nilai semula
berdasarkan pohon Huffman tersebut.
Selanjutnya informasi pada file Wave ditulis
pada file output dan hasil dekompresi ditulis
kembali juga dan dilakukan kembali
perhitungan nilai chunk size dan nilai
subchunk2 size.

Gambar 3.19 Diagram Alir Proses Untuk nilai audio format selain 1 dan
Kompresi Dan Dekompresi File Wave 88 tidak akan diproses oleh program dan
akan dilewatkan. Selanjutnya bila file
tersebut selesai diproses maka akan
Sebelum melakukan proses
dilanjutkan ke file berikutnya yang ditandai
kompresi atau dekompresi file Wave maka
hingga file terakhir pada list.
pertama sekali adalah mengecek apakah
file yang diproses tersebut ditandai pada
bagian list. Jika tidak ada satu pun file yang Program dirancang mampu
memainkan file Wave. Fungsi untuk
ditandai maka proses kompresi atau
memainkan file Wave diproses dengan

54
menggunakan fungsi API (Application
Programming Interface) Multimedia
Windows. Untuk memainkan file Wave
terlebih dahulu file tersebut di-load dan
dilakukan pengecekan terhadap nilai audio
format. Bila bernilai 1 maka file akan
langsung dimainkan, bila bernilai 88 maka
program akan melakukan dekompresi ke
memori sistem terlebih dahulu file tersebut
baru kemudian dimainkan.

Program akan terus memonitor


status dari file Wave yang dimainkan, bila
telah mencapai akhir file berarti proses
playing akan selesai dan akan dilanjutkan
memainkan file selanjutnya dari list hingga
file terakhir dalam list.

Bila pada saat file Wave sedang


dimainkan user menekan tombol “Pause”
maka file tersebut akan dihentikan sejenak
dan posisi playing diset ke posisi sekarang.
Bila user menekan kembali tombol “Play”
maka file akan dimainkan pada posisi
terakhir sewaktu file di-pause. Sedangkan
bila pada saat file dimainkan user menekan
tombol “Stop” maka program akan
menghentikan file Wave yang dimainkan.
Gambar 3.20 Diagram Alir Memainkan File
Diagram untuk seluruh rangkaian Wave
proses memainkan file Wave dapat dilihat 3.2.2 Perancangan Form
pada gambar berikut ini. Berikut ini merupakan perancangan
dari form utama program beserta dengan
komponen Visual Basic yang dipakai.

Gambar 3.21 Rancangan Form Utama

55
Bagian utama dari program ini memilih folder output tersebut dapat dengan
dirancang dengan komponen Visual Basic mengklik pada tombol di samping kanan
seperti pada bagian atas tombol yang text box tersebut ataupun dengan cara
mempunyai icon biasanya disebut dengan mengetikkan secara langsung pada text box
toolbar tetapi pada program ini dibuat dari tersebut.
command button.
Berikutnya adalah list atau daftar
Jumlah command button yang untuk menampung file Wave yang akan
berfungsi sebagai toolbar tersebut adalah diproses atau di-play. Bagian ini
12 (dua belas) buah. Fungsinya dimulai menggunakan komponen list view dengan
dari sisi kiri ke kanan adalah sebagai bentuk tampilan dibuat secara bentuk
berikut: Report. File yang ditambahkan pada list
1. Tombol command button 1 sebagai view memuat informasi seperti nama file,
tombol untuk menambah file Wave tanggal pembuatan file, ukuran file, ukuran
tunggal ke dalam list. file setelah diproses, rasio kompresi,
2. Tombol command button 2 sebagai attribut, status file, path, dan informasi file
tombol untuk menambah semua file Wave.
Wave pada folder tertentu.
3. Tombol command button 3 sebagai Bagian bawah dari form utama
tombol untuk memilih dan menandai merupakan baris keterangan. Terdapat dua
semua file Wave yang ada di list. buah label pada sisi kiri. Label pertama
4. Tombol command button 4 sebagai berfungsi untuk menampilkan keterangan
tombol untuk menghilangkan semua baik kesalahan atau error untuk proses
tanda cek file pada list. kompresi dan dekompresi. Label kedua
5. Tombol command button 5 sebagai untuk menampilkan status file Wave yang
tombol untuk menghapus semua file sedang dimainkan apakah berstatus
yang ditandai dari list. “Playing” atau “Paused”. Bagian berikutnya
6. Tombol command button 6 sebagai adalah dua buah progress bar, yang
tombol untuk menghapus semua file pertama adalah progress bar untuk status
baik yang ditandai atau tidak dari list. kemajuan file Wave yang sedang dimainkan
7. Tombol command button 7 sebagai sedangkan progress bar kedua untuk
tombol untuk melakukan proses menampilkan status kemajuan proses
kompresi file Wave. kompresi dan dekompresi file. Yang
8. Tombol command button 8 sebagai terakhir adalah bagian image yang berguna
tombol untuk melakukan proses untuk menampilkan image berupa gambar
dekompresi file Wave. lampu lalu lintas berwarna hijau dan merah
9. Tombol command button 9 sebagai tanda program sedang memproses atau
tombol untuk memainkan file Wave tidak.
yang dipilih dari list.
10. Tombol command button 10 sebagai Program dirancang selain dapat
tombol untuk menghentikan sejenak melakukan proses kompresi dan
file Wave yang sedang dimainkan. dekompresi file Wave juga dapat sebagai
11. Tombol command button 11 sebagai player file Wave. Program dapat
tombol untuk menghentikan file Wave memproses dan memainkan semua file
yang sedang dimainkan. yang ada di list sekaligus.
12. Tombol command button 12 sebagai
tombol untuk keluar dari program. Pada form utama terdapat menu
yang mempunyai fungsi-fungsi yang sama
Bagian lainnya adalah sebuah text dengan toolbar. Adapun struktur menu dari
box “Destination Folder” tempat program ini adalah sebagai berikut :
menampung string path folder output. Untuk

56
Wave yang diproses.

Gambar 3.22 Struktur Menu Program


Gambar 3.23 Rancangan Form Frekuensi
Fungsi semua menu di atas ekivalen Form berikutnya yang dirancang adalah
dengan fungsi yang ada pada command form Author yang berisi penjelasan program
button di bagian toolbar. secara singkat serta nama penulis.

Form lainnya yang dirancang adalah


form Frekuensi yang akan dipakai untuk
menampung jumlah karakter dan frekuensi
kode ASCII yang terdapat pada suatu file

Gambar 3.24 Rancangan Form Author

Komponen utama yang dipakai 3.2.3 Ekstensi File Hasil Kompresi


hanya berupa label sebagai teks, command Untuk membedakan file hasil
button, dan image. Form ini dapat diakses kompresi dengan file Wave asli maka
melalui menu Help  About. program akan menambahkan ekstensi

57
tambahan yaitu “.HUF”. Bila file tersebut 6. File Wave yang telah dikompresi
didekompresi kembali maka ekstensi tersebut hanya dapat dimainkan dari
tambahan ini akan otomatis dibuang. program ini.

4.2 Saran
KESIMPULAN DAN SARAN Untuk pengembangan lebih lanjut
4.1.1 Kesimpulan program kompresi pada file Wave ini, maka
Berdasarkan pembahasan dari bab- dapat diberikan beberapa saran sebagai
bab sebelumnya yang telah dilakukan maka berikut:
dapat diambil beberapa kesimpulan sebagai 1. Untuk meningkatkan rasio kompresi
berikut: maka algoritma kompresi Huffman
1. Reduksi ukuran file yang diperoleh dapat digabungkan dengan rasio
dengan algoritma Huffman ini kompresi yang lain seperti LZW.
berkisar dari range 20% hingga 2. Untuk proses play back file Wave
40%. Jadi dapat dikatakan dengan ditambahkan fasilitas yang lain
rasio kompresi ini algoritma Huffman seperti untuk looping, tombol next,
sudah dikatakan baik dalam hal dan tombol previous
mengkompresi file khususnya file 3. Untuk memainkan file Wave yang
Wave. telah dikompresi agar proses
2. Tingkat kompresi dipengaruhi oleh dekompresi lebih cepat maka dapat
banyaknya nada yang sama dalam dilakukan dengan teknik streaming
file Wave. dimana file tidak perlu dikompresi
3. Kecepatan proses tidak bergantung sampai utuh di memory tetapi bagian
pada data yang diproses tetapi file yang hanya sebagian
berbanding lurus dengan ukuran file didekompresi tersebut langsung
Wave, artinya semakin besar ukuran dimainkan.
file Wave yang diproses maka
semakin lama waktu prosesnya. DAFTAR PUSTAKA
4. Proses dekompresi lebih cepat [BAF01] Basalamah, Affah,
dilakukan dibandingkan dengan Teknologi Multimedia MP3, PT. Elex
proses kompresi karena pada Media Komputindo, Jakarta, 2001.
proses dekompresi tidak dilakukan [HRD01] Hadi R, Pemrograman
lagi proses pembentukan pohon Windows API dengan Microsoft Visual
Huffman dari data melainkan hanya Basic, PT. Elex Media Komputindo,
langsung membaca dari tabel code Jakarta, 2001.
pohon Huffman yang disimpan pada [HVL00] Halvorson M, Microsoft
file sewaktu proses kompresi. Visual Basic 6.0 Professional, Step by
5. File Wave yang telah dikompresi bila Step, PT. Elex Media Komputindo,
dilakukan proses kompresi sekali Jakarta, 2000.
lagi maka ukuran file akan [MSD98] Microsoft Developer
bertambah besar sedikit karena Network (MSDN) Library Visual Studio
algoritma Huffman merupakan 6.0, Microsoft Corporation, 1998.
optimal compression jadi file yang [SHC48] Shannon, C. E., A
dilakukan kompresi sebanyak dua Mathematical Theory of
kali maka proses terakhir tidak akan Communication, The Bell System
mereduksi ukuran file lagi. Terjadi Technical Journal, Vol. 27, pp. 379 −
pertambahan byte pada proses 423, 623 − 656, July, October, 1948.
kompresi kedua kalinya karena [STP02]
program menyimpan struktur pohon http://www.stanford.edu/CCRMA/Courses/4
Huffman dari hasil kompresi 22/projects/WaveFormat/,
pertama. 2002

58
[HRD02] compression1.htm, 2002
http://www.replaygain.hydrogenaudi [DCP01] http://www.data-
o.org/file_format_wav.html, 2002 compression.com/index.html, 2001
[HUF01]
http://www.stanford.edu/~udara/SO
CO/lossless/
huffman/algorithm.htm, 2001
[PPC02]
http://www.prepressure.com/techno/

59

Anda mungkin juga menyukai