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

PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

Feb 05, 2018

Download

Documents

vanminh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

40

PENERAPAN ALGORITMA HUFFMAN PADA KOMPRESI FILE WAVE

Hari Purwanto

AbstraksiPenggunaan teknik kompresi data merupakan salah satu aspek penting perkembanganteknologi informasi. Kompresi digunakan untuk berbagai keperluan antara lain: membackupdata, transfer data dan salah satu bagian keamanan data. Terdapat banyak teknik kompresidata, tiga diantaranya adalah algoritma run length, half byte dan huffman. Salah satupenerapan teknik kompresi adalah pada file audio, misalnya WAV. File WAV adalah fileaudio standar yang digunakan oleh Windows. Format WAV banyak digunakan untukkeperluan game dan multimedia. Wave sebenarnya merupakan format kasar dimana signalsuara langsung direkam dan dikuantisasi menjadi data digital. Format dasar dari file inisecara default tidak mendukung kompresi dan dikenal dengan nama PCM (Pulse CodeModulation). Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknikkompresi yang tidak mengubah data aslinya. Hal tersebut yang menyebabkan algoritma inibanyak dipakai dalam proses kompresi. Algoritma Huffman bekerja dengan cara melakukanpengkodean dalam bentuk bit untuk mewakili data karakter. Algoritma ini kurang maksimaljika ada banyak variasi simbol. Untuk mengoptimalkan algoritma huffman ini bisa digunakanalgoritma Huffman Shift Coding yang akan membagi simbol awal menjadi beberapa blok.Penggunaan Algoritma Huffman Shift Coding untuk kompresi file audio wave menghasilkanratio 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

Pendahuluan1.1 Latar Belakang

Salah satu file format suara yangbanyak dipakai dalam sistem operasiWindows adalah format Wave (*.WAV).Format ini banyak digunakan untukkeperluan game dan multimedia. Wavesebenarnya merupakan format kasar (rawformat) dimana signal suara langsungdirekam dan dikuantisasi menjadi datadigital. Format dasar dari file ini secaradefault tidak mendukung kompresi dandikenal dengan nama PCM (Pulse CodeModulation).

Jika direkam suatu lagu sekualitasCD Audio menggunakan sampling rate 44,1kHz, 16 bit per sample, 2 kanal (stereo),maka total media yang diperlukan untukmenyimpan data audio ini per detik adalah176.400 byte sehingga untuk durasi 1 menitdiperlukan 10,584 MB. Jika rata-rata durasisatu lagu selama 5 menit, maka dibutuhkan

tempat lebih dari 50 MB untuk menyimpandata audio lagu tersebut. Ini tentunyasangat memboroskan media penyimpananseperti hard disk meskipun saat ini telahtersedia kapasitas hard disk yang besar.Masalah tersebut dapat diatasi bila fileWave tersebut dikompresi untukmengurangi ukurannya.

Sesuai dengan latar belakangpemilihan judul di atas, maka yang menjadimasalah dalam penulisan ilmiah ini adalahmerancang suatu aplikasi denganmenggunakan algoritma Huffman untukmelakukan kompresi pada file Wave danbagaimana cara memainkan kembali fileWave yang telah terkompresi tersebut.Adapun tujuan dari penulisan ilmiah iniadalah:1. Untuk mengetahui cara kerja dari

algoritma Huffman yang dipakai dalamkompresi dan dekompresi file Wave.

Page 2: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

41

2. Untuk menghasilkan sebuah aplikasiyang dapat melakukan kompresi dandekompresi pada file Wave denganinput berupa sebuah file Wave sertasebagai player file Wave.

Manfaat dari penulisan Tugas Akhir iniadalah1. Output dari aplikasi ini meliputi file

Wave yang terkompresi, sehinggamenghemat kapasitas mediapenyimpan karena pada suatu fileWave banyak terdapat redudansi dataserta untuk mempersingkat waktutransmisi sewaktu file tersebut dikirimatau di-download melalui jaringanInternet.

2. Aplikasi ini dapat berfungsi sebagaiplayer alternatif untuk file Wave yangterkompresi karena player audio yangumum tidak mendukung file Waveyang terkompresi.

Untuk menyelesaikan masalah yangada, terdapat beberapa tahapan yang harusdilalui yaitu:1. Melakukan pengumpulan berbagai data

dan informasi yang berkaitan denganstruktur file Wave dan algoritmaHuffman untuk mendukung aplikasiyang akan dirancang penulis.

2. Merancang antarmuka pemakai (userinterface).

3. Langkah penyelesaian program dimulaidari membaca file Wave untukmengambil informasi dari file tersebut,mengambil chunk data pada file Wave,melakukan kompresi pada chunk datatersebut dan terakhir menulis kembalihasil data terkompresi tersebut besertainformasi file Wave tersebut ke dalambentuk file Wave tersebut.

4. Menulis kode program dalam bahasaVisual Basic.

5. Melakukan berbagai pengujian padaaplikasi yang dirancang dan

memperbaiki kesalahan yang terdapatdalam aplikasi.

LANDASAN TEORI2.1 Struktur File Wave

Aplikasi multimedia seperti diketahuimemerlukan manajemen penyimpanan darisejumlah jenis data yang bervariasi,termasuk bitmap, data audio, data video,informasi mengenai kontrol device periperal.RIFF menyediakan suatu cara untukmenyimpan semua jenis data tersebut. Tipedata pada sebuah file RIFF dapat diketahuidari ekstensi filenya. Sebagai contoh jenis-jenis file yang disimpan dalam bentukformat RIFF adalah sebagai berikut:1. Audio/visual interleaved data (.AVI)2. Waveform data (.WAV)3. Bitmapped data (.RDI)4. MIDI information (.RMI)5. Color palette (.PAL)6. Multimedia Movie (.RMN)7. Animated cursor (.ANI)

Pada saat ini, file *.AVI merupakansatu-satunya jenis file RIFF yang telahsecara penuh diimplementasikanmenggunakan spesifikasi RIFF. Meskipunfile *.WAV juga menggunakan spesifikasiRIFF, karena struktur file *.WAV ini begitusederhana maka banyak perusahaan lainyang mengembangkan spesifikasi danstandar mereka masing-masing.

Format file WAVE seperti yangdiketahui, merupakan bagian darispesifikasi RIFF Microsoft yang digunakansebagai penyimpan data digital audio.Format file ini merupakan salah satu formatfile audio pada PC. Seiring denganpopularitas Windows maka banyak aplikasiyang mendukung format file ini.

Karena bekerja pada lingkunganWindows yang menggunakan prosesorIntel, maka format data dari file WAVEdisimpan dalam format urutan little-endian(least significant byte) dan sebagian dalamurutan big-endian.

Page 3: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

42

File WAVE menggunakan strukturstandar RIFF yang mengelompokkan isi file(sampel format, sampel digital audio, danlain sebagainya) menjadi “chunk” yangterpisah, setiap bagian mempunyai headerdan byte data masing-masing. Headerchunck menetapkan jenis dan ukuran daribyte data chunk. Dengan metodapengaturan seperti ini maka program yangtidak mengenali jenis chunk yang khususdapat dengan mudah melewati bagianchunk ini dan melanjutkan langkahmemproses chunk yang dikenalnya. Jenischunk tertentu mungkin terdiri atas sub-chunk. Sebagai contoh, pada gambar 2.3dapat dilihat chunk “fmt ” dan “data”sebenarnya merupakan sub-chunk darichunk “RIFF”.

Chunk pada file RIFF merupakansuatu string yang harus diatur untuk tiapkata. Ini berarti ukuran total dari chunkharus merupakan kelipatan dari 2 byte(seperti 2, 4, 6, 8 dan seterusnya). Jikasuatu chunk terdiri atas jumlah byte yangganjil maka harus dilakukan penambahanbyte (extra padding byte) denganmenambahkan sebuah nilai nol pada bytedata terakhir. Extra padding byte ini tidakikut dihitung pada ukuran chunk. Olehkarena itu sebuah program harus selalumelakukan pengaturan kata untukmenentukan ukuran nilai dari headersebuah chunk untuk mengkalkulasi offset

dari chunk berikutnya.

Gambar 2.3 Layout File Wave

2.1.1 Header File WaveHeader file Wave mengikuti struktur

format file RIFF standar. Delapan bytepertama dalam file adalah header chunkRIFF standar yang mempunyai chunk ID“RIFF” dan ukuran chunk didapat denganmengurangkan ukuran file dengan 8 byteyang digunakan sebagai header. Empatbyte data yaitu kata “RIFF” menunjukkanbahwa file tersebut merupakan file RIFF.File Wave selalu menggunakan kata“WAVE” untuk membedakannya denganjenis file RIFF lainnya sekaligus digunakanuntuk mendefinisikan bahwa file tersebutmerupakan file audio waveform.

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 WAVEAda beberapa jenis chunk untuk

menyatakan file Wave. Kebanyakan file

Wave hanya terdiri atas 2 buah chunk, yaituChunk Format dan Chunk Data. Dua jenischunk ini diperlukan untuk menggambarkan

Page 4: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

43

format dari sampel digital audio. Meskipuntidak diperlukan untuk spesifikasi file Waveyang resmi, lebih baik menempatkan ChunkFormat sebelum Chunk Data. Kebanyakanprogram membaca chunk tersebut denganurutan di atas dan jauh lebih mudahdilakukan streaming digital audio darisumber yang membacanya secara lambatdan linear seperti Internet. Jika ChunkFormat lebih dulu ditempatkan sebelumChunk Data maka semua data dan formatharus di-stream terlebih dahulu sebelumdilakukan playback.

Tabel 2.4 Format Chunk RIFFOffset Ukuran* Deskripsi

0x00 4 Chunk ID

0x04 4 Ukuran Data Chunk

0x08 Byte Data Chunk

* dalam satuan byte

2.1.3 Chunk FormatChunk format terdiri atas informasi

tentang bagaimana suatu data waveformdisimpan dan cara untuk dimainkankembali, termasuk jenis kompresi yangdigunakan, jumlah kanal, laju pencuplikan

(sampling rate), jumlah bit tiap sampel danatribut lainnya. Chunk format ini ditandaidengan chunnk ID “fmt “.

A. Chunk ID dan Ukuran DataChunk ID selalu ditandai dengan kata“fmt “ (0x666D7420) dan ukurannyasebesar data format Wave (16 byte)ditambah dengan extra format byte yangdiperlukan untuk format Wave khusus,jika tidak terdiri atas data PCM tidakterkompresi. Sebagai catatan stringchunk ID ini selalu diakhir dengankarakter spasi (0x20). Chunk ID “fmt “digunakan sebagai informasi file Wave,informasi ini berupa: CompressionCode, Number of Channels, SampleRate, Average Bytes per Second, BlockAlign, Significant Bits per Sample, ExtraFormat Bytes.

B. Kode Kompresi (Compression Code)Setelah chunk ID dan ukuran datachunk maka bagian pertama dari formatdata file Wave menyatakan jeniskompresi yang digunakan pada dataWave. Berikut ini daftar kode kompresiyang digunakan sekarang ini.

Tabel 2.6 Kode Kompresi WaveKode 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

Page 5: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

44

C. Jumlah Kanal (Number of Channels)Jumlah kanal menyatakan berapabanyak signal audio terpisah yang di-encode dalam chunk data Wave. Nilai 1(satu) berarti merupakan signal mono,nilai 2 (dua) berarti signal stereo danseterusnya.

D. Laju Pencuplikan (Sampling Rate)Menyatakan jumlah potongan sampeltiap detik. Nilai ini tidak dipengaruhi olehjumlah kanal.

E. Jumlah Rata-Rata Byte Tiap Detik(Average Bytes Per Second)

Nilai ini mengindikasikan berapa besarbyte data Wave harus di-stream kekonverter D/A (Digital Audio) tiap detiksewaktu suatu file Wave dimainkan.Informasi ini berguna ketika terjadipengecekan apakah data dapat di-stream cukup cepat dari suatu sumberagar sewaktu playback pembacaan datatidak terhenti. Nilai ini dapat dihitungdengan menggunakan rumus di bawahini :

............................................................... (2.1)

F. Block AlignMenyatakan jumlah byte tiap potongansampel. Nilai ini tidak dipengaruhi oleh

jumlah kanal dan dapat dikalkulasidengan rumus di bawah ini:

................... (2.2)

G. Bit Signifikan Tiap Sampel(Significant Bits Per Sample)

Nilai ini menyatakan jumlah bit yangdigunakan untuk mendefinisikan tiapsampel. Nilai ini biasanya berupa 8, 16,24 atau 32 (merupakan kelipatan 8).Jika jumlah bit tidak merupakankelipatan 8 maka jumlah byte yangdigunakan tiap sampel akan dibulatkanke ukuran byte paling dekat dan byteyang tidak digunakan akan diset 0 (nol)dan diabaikan.

H. Extra Format ByteNilai ini menyatakan berapa banyakformat byte tambahan. Nilai ini tidak adajika kode kompresi adalah 0 (file PCMyang tidak terkompresi). Jika terdapatsuatu nilai pada bagian ini maka inidigunakan untuk menentukan jenis file

Wave yang memiliki kompresi dan inimemberikan informasi mengenai jeniskompresi apa yang diperlukan untukmen-decode data Wave. Jika nilai initidak dilakukan word aligned(merupakan kelipatan 2), penambahanbyte (padding) pada bagian akhir dataini harus dilakukan.

2.1.4 Chunk DataChunk ini ditandai dengan adanya

string “data”. Chunk Data pada file Waveterdiri atas sampel digital audio yang manadapat didecode kembali menggunakanmetoda kompresi atau format biasa yangdinyatakan dalam chunk format Wave. Jikakode kompresinya adalah 1 (jenis PCMtidak terkompresi), maka “Data Wave” terdiriatas nilai sampel mentah (raw samplevalue).

AvgBytesPerSec = SampleRate * BlockAlign

BlockAlign = SignificantBitsPerSample / 8 * NumChannels

Page 6: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

45

Tabel 2.7 Format Data ChunkOffset 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-channeldisimpan dalam bentuk Data WaveInterlaced. File Wave multi-channel (sepertistereo dan surround) disimpan denganmensiklus tiap kanal sampel audio sebelummelakukan pembacaan lagi untuk tiapwaktu cuplik berikutnya. Dengan caraseperti ini maka file audio tersebut dapatdimainkan atau di-stream tanpa harusmembaca seluruh isi file. Lebih praktisdengan cara seperti ini ketika sebuah fileWave dengan ukuran yang besar dimainkandari disk (mungkin tidak dapat dimuatseluruhnya ke dalam memori) atau ketikamelakukan streaming sebuah file Wavemelalui jaringan Internet.

Seperti dikemukan di atas, semuachunk pada RIFF (termasuk chunk Wave“data”) harus di-word align. Jika datasampel menggunakan byte angka ganjil,maka dilakukan penambahan sebuah bytedengan nilai nol yang ditempatkan padabagian akhir sampel data. Ukuran Headerchunk “data” tidak termasuk byte ini.

2.2 Data AudioSalah satu tipe data multimedia

adalah audio yang berupa suara ataupunbunyi, data audio sendiri telah mengalamiperkembangan yang cukup pesat seiringdengan semakin umumnya orang denganperangkat multimedia. Tentunya yangmerupakan syarat utama supaya komputermampu menjalankan tipe data tersebutadalah adanya speaker yang merupakanoutput untuk suara yang dihasilkan danuntuk menghasilkan maupun mengolahdata suara yang lebih kompleks seperti*.WAV, *.MIDI tersebut tentunya sudahdiperlukan perangkat yang lebih canggihlagi yaitu sound card.

Tipe dari pelayanan audiomemerlukan format yang berbeda untukinformasi audio dan teknologi yang berbedauntuk menghasilkan suara. Windowsmenawarkan beberapa tipe dari pelayananaudio :1. Pelayanan audio Waveform

menyediakan playback dan recordinguntuk perangkat keras digital audio.Waveform digunakan untukmenghasilkan non-musikal audioseperti efek suara dan suara narasi.Audio ini mempunyai keperluanpenyimpanan yang sedang dankeperluan untuk tingkat transfer palingkecil yaitu 11 K/detik.

2. Midi Audio, menyediakan pelayananfile MIDI dan MIDI playback melaluisynthesizer internal maupun eksternaldan perekaman MIDI. MIDI digunakanuntuk aplikasi yang berhubungandengan musik seperti komposisi musikdan program MIDI sequencer. Karenamemerlukan tempat penyimpananlebih kecil dan tingkat transfer yanglebih kecil daripada Waveform audio,maka sering digunakan untukkeperluan background.

3. Compact Disc Audio (CDA)menyediakan pelayanan untukplayback informasi Red Book Audiodalam CD dengan drive CD-ROMpada komputer multimedia. CDmenawarkan kualitas suara tertinggi,namun juga memerlukan dayapenyimpanan yang paling besar pula,sekitar 176 KB/detik.

4. Wave Audio merupakan kreasiperusahaan raksasa perangkat lunakMicrosoft yang berasal dari standarRIFF (Resource Interchange FileFormat). Wave audio ini telah menjadi

Page 7: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

46

standar format file audio komputerdari suara sistem dan games sampaiCD Audio. File Wave diidentifikasikandengan nama yang berekstensi*.WAV. Format asli dari tipe filetersebut sebenarnya berasal daribahasa C.

2.10 Kompresi DataKompresi data dilakukan untuk

mereduksi ukuran data atau file. Denganmelakukan kompresi atau pemadatan datamaka ukuran file atau data akan lebih kecilsehingga dapat mengurangi waktu transmisisewaktu data dikirim dan tidak banyakbanyak menghabiskan ruang mediapenyimpan.

2.10.1 Teori Kompresi DataDalam makalahnya di tahun 1948,

“A Mathematical Theory ofCommunication”, Claude E. Shannonmerumuskan teori kompresi data. Shannonmembuktikan adanya batas dasar(fundamental limit) pada kompresi data jenislossless. Batas ini, disebut dengan entropyrate dan dinyatakan dengan simbol H. Nilaieksak dari H bergantung pada informasidata sumber, lebih terperinci lagi,tergantung pada statistikal alami dari datasumber. Adalah mungkin untukmengkompresi data sumber dalam suatubentuk lossless, dengan laju kompresi(compression rate) mendekati H.Perhitungan secara matematismemungkinkan ini dilakukan lebih baik darinilai H.

Shannon juga mengembangkanteori mengenai kompresi data lossy. Inilebih dikenal sebagai rate-distortion theory.Pada kompresi data lossy, prosesdekompresi data tidak menghasilkan datayang sama persis dengan data aslinya.Selain itu, jumlah distorsi atau nilai D dapatditoleransi. Shannon menunjukkan bahwa,untuk data sumber (dengan semua propertistatistikal yang diketahui) denganmemberikan pengukuran distorsi, terdapatsebuah fungsi R(D) yang disebut dengan

rate-distortion function. Pada teori inidikemukakan jika D bersifat toleransiterhadap jumlah distorsi, maka R(D) adalahkemungkinan terbaik dari laju kompresi.

Ketika kompresi lossless (berartitidak terdapat distorsi atau D = 0),kemungkinan laju kompresi terbaik adalahR(0) = H (untuk sumber alphabet yangterbatas). Dengan kata lain, laju kompresiterbaik yang mungkin adalah entropy rate.Dalam pengertian ini, teori rate-distortionadalah suatu penyamarataan dari teorikompresi data lossless, dimana dimulai daritidak ada distorsi (D = 0) hingga terdapatbeberapa distorsi (D > 0).

Teori kompresi data lossless danteori rate-distortion dikenal secara kolektifsebagai teori pengkodean sumber (sourcecoding theory). Teori pengkodean sumbermenyatakan batas fundamental pada unjukkerja dari seluruh algoritma kompresi data.Teori tersebut sendiri tidak dinyatakansecara tepat bagaimana merancang danmengimplementasikan algoritma tersebut.Bagaimana pun juga algoritma tersebutmenyediakan beberapa petunjuk danpanduan untuk memperoleh unjuk kerjayang optimal. Dalam bagian ini, akandijelaskan bagaimana Shannon membuatmodel dari sumber informasi dalam istilahyang disebut dengan proses acak (randomprocess). Di bagian selanjutnya akandijelaskan mengenai teorema pengkodeansumber lossless Shannon, dan teoriShannon mengenai rate-distortion. Latarbelakang mengenai teori probabilitasdiperlukan untuk menjelaskan teori tersebut.

2.10.14 Jenis-Jenis Algoritma Kompre-si DataAlgoritma kompresi untuk jenis kompresilossless (tanpa kehilangan data) yangbanyak digunakan diantaranya : Huffman,RLE, LZ77, LZ78 dan LZW. Sedangkanuntuk jenis kompresi lossy (kehilanganbeberapa bagian data), algoritma yangbanyak digunakan antara lain: DifferentialModulation, Adaptive Coding dan Discrete

Page 8: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

47

Cosine Transform (DCT).

2.10.15 Algoritma Kompresi HuffmanAlgoritma kompresi Huffman

dinamakan sesuai dengan namapenemunya yaitu David Huffman, seorangprofesor di MIT (Massachusets Instuate ofTechnology).

Kompresi Huffman merupakanalgoritma kompresi lossless dan ideal untukmengkompresi teks atau file program. Iniyang menyebabkan mengapa algoritma inibanyak dipakai dalam program kompresi.

Kompresi Huffman termasuk dalamalgoritma keluarga dengan variablecodeword length. Ini berarti simbolindividual (karakter dalam sebuah file tekssebagai contoh) digantikan oleh urutan bityang mempunyai suatu panjang yang nyata(distinct length). Jadi simbol yang munculcukup banyak dalam file akan memberikanurutan yang pendek sementara simbol yangjarang dipakai akan mempunyai urutan bityang lebih panjang.

Algoritma kompresi Huffman secaraumum efisien dalam mengkompresi teksatau file program. Untuk file image biasanyadipakai algoritma yang lain. KompresiHuffman secara umum dipakai dalamprogram kompresi seperti PKZip, LHA, GZ,ZOO, dan ARJ. Algoritma ini juga dipakaidalam kompresi JPEG dan MPEG.

Adapun bentuk algoritma dariHuffman dalam membentuk sebuah pohonbiner adalah sebagai berikut:1. Dimulai dengan penyusunan frekuensisimbol sebagai frekuensi dari pohon2. Jika terdapat lebih dari satu pohon:

a. Carilah dua pohon dengan jumlahweight yang paling kecil

b. Gabungkan dua pohon tersebutmenjadi satu dan mempunyai nilaisetara dengan jumlah keduanya,atur salah satunya yang bernilaipaling kecil sebagai child sisi kiri

dan yang lainnya sebagai child sisikanan

3. Lakukan langkah di atas hinggamembentuk satu pohon biner tunggal4. Untuk setiap child sisi kiri beri simbol ‘0’

dan beri simbol ‘1’ untuk merepresentasichild sisi kanan

PEMBAHASAN DAN PERANCANGAN3.1 Pembahasan

Kompresi data atau dikenal jugasebagai pemadatan data mempunyai tujuanmemperkecil ukuran data sehingga selaindapat menghemat media penyimpanan danmemudahkan transfer dalam jaringanseperti Internet misalnya.

Dalam masalah transfer data,ukuran file yang kecil akan mempercepatwaktu transmisi. Dalam beberapa kasusseperti seseorang ingin memberikandatanya kepada temannya tetapi ukuran filedata misalkan ukurannya sebesar 1,6 MB.Jika ia ingin menyimpannya dalam sebuahdisket baru diberikan kepada temannya,maka file tersebut tidak akan muat. Untukitu sebelum di-copy-kan file tersebut dapatdikompresi dulu sehingga ukurannya lebihkecil dari ukuran semula dan dapat muat kedalam disket tersebut.

File merupakan data digital yangberupa representasi atas bit ‘0’ dan ‘1’.Seringkali dalam sebuah file terjadiperulangan data atau redundancy. Semuametode kompresi melakukan pemadatanterhadap data berulang tersebut.

Seperti diketahui jenis algoritmakompresi terbagi atas lossless compressiondan lossy compression. Pada lossycompression ada data yang hilang tetapitidak banyak setelah data dikompresi.Contoh standar yang menggunakan jenislossy compression adalah JPEG (JointPicture Experts Group) sebagai standarimage gambar atau still image, MPEG(Motion Picture Experts Group) untuk audiovideo sepeti Video CD, MP3 (MPEG-1Layer 3) untuk audio. Data hasil kompresidengan lossy compression jika

Page 9: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

48

dikembalikan maka hasilnya tidak akansama persis lagi dengan data orisinil.Berbeda dengan lossy compression, padalossless compression tidak ada data yanghilang setelah proses kompresi dan datadapat dikembalikan seperti data semula.Contoh standar yang menggunakan jenis iniadalah Gzip, Unix Compress, WinZip, GIF(Graphic Interchange Format) untuk stillimage, dan Morse Code.

3.1.1 Encoding HuffmanAlgoritma kompresi Huffman atau

disebut dengan encoding Huffman adalahalgoritma yang dipakai untuk mengkompresifile. Teknik kompresi ini denganmenggantikan code yang lebih kecil padakarakter yang sering dipakai dan code yanglebih panjang untuk karakter yang tidakbegitu sering dipakai.

Code dalam hal ini adalah urutan bitberupa nilai ‘0’ dan ‘1’ yang secara unikmerepresentasikan sebuah karakter.Ide dasar dari encoding Huffman adalahmencocokkan code word yang pendek padablok input dengan kemungkinan yangterbesar dan code word yang panjangdengan kemungkinan terkecil. Konsep inimirip dengan Morse Code.

Suatu file merupakan kumpulan darikarakter-karakter. Dalam suatu file tertentusuatu karakter dipakai lebih banyakdaripada yang lain. Jumlah bit yangdiperlukan untuk merepresentasikan tiapkarakter bergantung pada jumlah karakteryang harus direpresentasikan. Denganmenggunakan satu bit maka dapatmerepresentasikan dua buah karakter.Sebagai contoh 0 merepresentasikankarakter pertama dan 1 merepresentasikankarakter kedua. Dengan menggunakan duabit maka dapat merepresentasikan 22 atau 4buah karakter.00 karakter pertama01 karakter kedua10 karakter ketiga11 karakter keempat

Secara umum jika inginmerepresentasikan n buah karakter makadiperlukan 2n bit untuk merepresentasikansatu karakter. Kode ASCII (AmericanStandar Code for Information Interchange)menggunakan 7 bit untukmerepresentasikan sebuah karakter. Olehkarena 27 = 128 bit maka direpresentasikandengan menggunakan kode ASCII.

Kode ASCII dan kode yangdisebutkan di bagian atas untukmerepresentasikan karakter-karakterdikenal sebagai fixed length codes. Inidikarenakan tiap karakter mempunyaipanjang bit yang sama atau dengan katalain jumlah bit yang diperlukan untukmerepresentasi tiap karakter sama. Padakode ASCII setiap karakter memerlukan 7bit. Dengan menggunakan variable lengthcodes untuk tiap karakter maka dapatdireduksi ukuran dari suatu file. Denganmenggantikan code yang lebih kecil untukkarakter-karakter yang lebih sering dipakaidan code yang lebih besar untuk karakteryang tidak sering dipakai, maka sebuah filedapat dikompresi.

Sebagai contoh misalkan sebuah fileterdiri atas data berikut ini.AAAAAAAAAABBBBBBBBCCCCCCDDDDDEEMaka frekuensi atau banyaknya sebuahkarakter muncul pada sebuah file adalahsebagai berikut.Frekuensi dari A adalah 10Frekuensi dari B adalah 8Frekuensi dari C adalah 6Frekuensi dari D adalah 5Frekuensi dari E adalah 2

Jika tiap karakter direpresentasikandengan menggunakan tiga buah bit makajumlah bit yang diperlukan untukmenyimpan file ini adalah:3 * 10 + 3 * 8 + 3 * 6 + 3 * 5 + 3 * 2 = 93 bit

Sekarang misalkan karakter-karakterdi atas direpresentasikan seperti berikut ini.A dengan code 11B dengan code 10C dengan code 00

Page 10: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

49

D dengan code 011E dengan code 010

Maka ukuran file tersebut akanmenjadi 2 * 10 + 2 * 8 + 2 * 6 + 3 * 5 = 69bit. Tingkat kompresi dengan nilai tertentutelah dicapai saat ini. Secara umum nilairasio kompresi dapat diperoleh denganmenggunakan cara atau metode seperti ini.

Seperti yang terlihat frekuensikarakter yang sering muncul digantikandengan code yang lebih kecil sementarafrekuensi karakter yang jarang munculdigantikan dengan code yang lebih besar.Salah satu kesulitan dengan menggunakanvariable-length code adalah tidak dapatdiketahui kapan dicapai akhir dari suatukarakter dalam pembacaan urutan bit ‘0’dan ‘1’. Masalah ini dapat dipecahkan jikamerancang kode sedemikian rupa bahwatidak ada code yang sama persis dipakaikembali untuk karakter yang lain. Padakasus di atas A direpresentasikan dengan11. Tidak ada code yang lain dimulaidengan 11 lagi. Seperti halnya dengan Cdigantikan dengan code 00. Maka tidak adacode yang lain dengan 00. Code jenisseperti ini dikenal sebagai prefix codes.

Secara umum, metode untukmenggantikan suatu karakter code denganmenggunakan variable-length prefix codesyang mengambil keuntungan dari frekuensirelatif karakter pada teks untuk di-encodedikenal sebagai encoding Huffman.

Sebagai catatan bila n karakterterdapat dalam sebuah file maka jumlahnode pada pohon Huffman berjumlah (2n 1). Jika terdapat n node dalam sebuahpohon maka terdapat paling banyak (n +1)/2 level, dan sekurang-kurangnya log2(n +1) level. Jumlah level pada sebuah pohonHuffman mengindikasikan panjangmaksimum dari code yang diperlukan untukmerepresentasikan sebuah karakter.

Code length dari sebuah karaktermengindikasikan level dimana karaktertersebut berada. Jika code length dari

sebuah karakter adalah n maka karaktertersebut berada pada level ke (n + 1) daripohon. Sebagai contoh code length darikarakter D adalah 011, maka code length-nya adalah 3. Oleh karena itu karaktertersebut harus berada pada level keempatdari pohon.

Code untuk tiap karakter diperolehdengan memulai dari node akar danbergerak turun ke daun yangmerepresentasikan karakter. Ketikabergerak ke node kiri anak sebuah bit ‘0’ditambahkan pada code dan ketikabergerak ke sisi kanan node anak, bit ‘1’ditambahkan pada code.

Untuk memperoleh code darikarakter “A” dari pohon, pertama sekalidimulai dari node akar (node 1). Karenakarakter “A” pada keturunan pada sisikanan node anak (ini ditentukan dengancara cabang yang mana yang akan diikutidengan mengetes dan melihat apakahcabang tersebut merupakan node daununtuk karakter ataupun merupakanancestor-nya) bergerak ke kanan danmenambahkan bit ‘1’ pada code untukkarakter “A”. Sekarang bila telah beradapada node 3, leaf node untuk karakter “A”berada pada kanan dari node tersebut, jadisekali lagi bergerak ke kanan danmenambahkan ‘1’ pada code-nya. Sekarangtelah dicapai node 7 yang mana merupakanleaf node untuk karakter A. Jadi code untukkarakter “A” adalah 11. Jadi cara yangsama untuk code tiap karakter yang laindapat diperoleh juga.

Seperti terlihat code dari karakteryang mempunyai frekuensi tertinggi lebihpendek dari pada code dengan frekuensiyang rendah.

Metode encoding ini meminimalkanencoding variable-length characterberdasarkan pada frekuensi dari tiapkarakter. Pertama, tiap karakter menjadisebuah pohon trivial (trivial tree), dengankarakter hanya sebagai node. Frekuensikarakter merupakan frekuensi dari pohon.

Page 11: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

50

Jika dua pohon dengan frekuensi palingsedikit digabungkan dengan sebuah akarbaru maka akan memberikan hasil jumlahdari frekuensi mereka. Ini akan berulanghingga semua karakter membentuk satubuah pohon. Satu kode bit merepresentasitiap level. Jadi karakter yang berfrekuensitinggi akan dekat dengan akar dan akan di-encode dengan beberapa bit, dan karakteryang jarang muncul akan jauh dari akaryang di-encode dengan panjang bit yangbanyak.

Menggabungkan pohon-pohondengan frekuensi sama halnya denganmenggabungkan urutan-urutan panjangdata untuk mendapatkan hasilpenggabungan yang optimal. Dikarenakansebuah node dengan hanya satu anaktidaklah optimal, maka encoding Huffmanmerupakan satu pohon biner yang lengkap.

Sebagai catatan kasus terburuk dariencoding Huffman (atau sama halnyadengan encoding paling panjang Huffmanuntuk satu kumpulan karakter) adalah ketikadistribusi dari frekuensi diikuti oleh bilanganFibonacci.

Encoding Huffman optimal untukmeng-encoding karakter (satu karakterdengan satu code word) dan mudah untukdiprogram. Metode lain seperti Shannon-Fano merupakan kode prefix minimal.Sedangkan arithmetic coding saat ini yangpaling bagus karena dapat mengalokasisebagian kecil bit, tetapi lebih rumit.

Kompleksitas waktu dari encodingHuffman adalah O(nlogn). Denganmenggunakan sebuah heap untukmenyimpan nilai besaran dari tiap pohon,tiap iterasi memerlukan waktu O(logn) untukmemeriksa besaran paling kecil danmenyisipkan besaran yang baru, ini denganasumsi bahwa terdapat O(n) iterasi untuktiap item. [Ang, Woi,http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/ ]

Seperti disebutkan di bagian atasencoding Huffman dirancang denganmenggabungkan sekaligus dua karakteryang paling sedikit kemungkinannya, danperulangan proses ini hingga hanya adasatu karakter sisa. Kode pohon (code tree)akan dibuat dan encoding Huffmandiperoleh dari label dari kode pohon.

Ada beberapa point yang harusdiperhatikan mengenai pembentukan kodepohon ini, antara lain:1. Tidak ada masalah bagaimana karakter-

karakter tersebut diatur dan begitu jugadengan code akhir pohon diberi label(dengan ‘0’ dan ‘1’). Bagian atas cabangdiberi nilai ‘0’ dan bagian bawah cabangdiberi nilai ‘1’

2. Encoding Huffman bersifat unik3. Encoding Huffman optimal dalam kasus

tidak ada kehilangan dalam fixed-to-variable length code yang mempunyaisebuah nilai di bawah nilai rata-rata

4. Rate dari code di atas adalah 2,94bit/karakter

5. Entropi urutan paling bawah adalah 2,88bit/karakter

3.1.2 Generalisasi Pohon HuffmanLangkah pertama pembentukan

pohon Huffman adalah proses pembacaanpada file dari awal file hingga akhir file untukmenghitung frekuensi dari setiap karakteryang muncul. Hasilnya disimpan dalamsebuah array. Ukuran dari array sekurang-kurangnya 2n 1 (karena untuk setiap nkarakter maka terdapat 2n1 node dalampohon Huffman) dimana n merupakanjumlah karakter yang terdapat pada file.Secara default dapat dipakai array dengan511 elemen. Karena satu byte dapatmerepresentasikan 256 karakter yangberbeda, jadi diperlukan 2 * 256 1 = 511elemen. Tiap elemen dari array tersebutmerepresentasikan sebuah node daripohon.

Elemen pertama dari array inimerupakan frekuensi dari karakter pertama.Sedangkan elemen kedua array merupakan

Page 12: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

51

frekuensi dari karakter kedua danseterusnya.

Setelah file dibaca, 256 elemenpertama akan berisi frekuensi setiap 256karakter tersebut. Sisa 255 elemen akandalam keadaan kosong. Langkahselanjutnya adalah mencari dua node yangmempunyai frekuensi paling kecil. Ambilsatu dari elemen kosong ini dari array danbuat menjadi parent dari kedua nodetersebut. Frekuensi dari parent nodetersebut adalah jumlah dari frekuensi darikedua node tersebut. Node kiri dan kanananak dapat dipertukarkan, tidak menjadimasalah jika node 8 berada di kiri atau dikanan node anak dari parent node 5.

Gambar 3.4 Penggabungan Dua NodeMenjadi Satu Parent Node

Sekarang cari dua node berikutnyayang mempunyai frekuensi terkecil, setelahmenghilangkan dua node anak sebelumnyadan menambahkan parent node pada daftarpencarian. Lanjutkan proses tersebuthingga hanya satu node yang bersisi padadaftar pencarian. Node tersebut merupakannode akar dari pohon Huffman.

3.1.3 Algoritma Membentuk PohonBiner Pada Encoding Huffman

Langkah pertama dari encodingHuffman adalah membentuk sebuah pohonbiner. Adapun algoritmanya adalah sebagaiberikut:1. Pertama sekali hitung banyaknya

perulangan karakter yang muncul untuktiap karakter. Ini merupakan frekuensidari tiap karakter.

2. Bentuk satu koleksi sebanyak n buahnode pohon, satu node untuk tiapkarakter (dimana n adalah jumlah

karakter dari dari input stream). Tiapdari n pohon ini merepresentasikansebuah input karakter dan mempunyaisuatu ‘berat’ atau nilai yangberkorespondensi pada jumlahfrekuensi mereka. Urutkan pohon-pohontersebut dimulai dari frekuensi terkecilhingga terbesar.

3. Dari kumpulan atau koleksi ini, ambildua pohon dengan nilai yang terkecildan hilangkan keduanya dari kumpulan.Gabungkan keduanya hinggamembentuk satu pohon baru dimanaakarnya mempunyai nilai setara denganjumlah dari nilai kedua pohon tersebutdan nilai terbesar berada di sisi kanandan nilai terkecil berada di sisi kiri.Tambahkan hasil pohon tersebut kekumpulan semula lakukan pengurutan.

4. Lanjutkan proses ini, pilih dua buahpohon dimulai dari pohon 1 hingga (n1) dengan nilai paling rendah,gabungkan keduanya denganmembentuk sebuah akar baru, dan berinilai akar tersebut yang merupakanjumlah nilai dari kedua pohon yangdigabung, Kemudian tempatkan kembalipohon baru ke dalam kumpulannya dandiurutkan kembali. Ulang proses inihingga membentuk satu pohon binertunggal.

Jika pada tiap titik terdapat lebih darisatu cara untuk memilih dua pohon dengannilai terendah, algoritma akan memilihsecara sembarang. Hasil pohon tunggaldengan satu akar tunggal disebut denganpohon Huffman. Dengan cara seperti ini,node dengan nilai terbesar akan dekatdengan bagian akar pohon, dan akandikodekan dengan bit yang sedikit.

3.1.4 Algoritma Kompresi FileSetelah pohon Huffman

digeneralisasi, file akan dibaca (scan) sekalilagi dan tiap karakter pada file akandigantikan dengan code yangberkorespondensi dari pohon. Setelahselesai karakter dan code untuk tiapkarakter beserta panjang dari tiap codeharus disimpan dalam file ke dalam bentuk

Page 13: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

52

tabel. Tabel ini diperlukan selama prosesdekompresi nantinya. Frekuensi darikarakter-karakter tidak perlu disimpankarena tidak diperlukan pada prosesdekompresi. Ukuran dari tabel inibergantung pada file yang dikompresi danbiasanya berkisar antara 500 hingga 1200byte.

3.1.5 Dekompresi FileSebelum melakukan dekompresi file, makaharus dibentuk kembali pohon Huffmanberdasarkan informasi yang ada pada tabelyang disimpan dengan file yang dikompresi.Untuk melakukan ini dapat dilakukandengan algoritma berikut ini:1. Menginisialisasi sebuah array dengan

511 elemen dan diset dengan nilai 0.2. Mengambil satu elemen dari array

untuk dijadikan sebagai node akar (rootnode). Root node merupakan bagianawal dari node.

3. Berikutnya membaca bit ke-i dari codeuntuk karakter ke-j pada tabel.

4. Jika bit ke-i dari code bernilai ‘1’,diambil elemen yang lain dari array danmembuatnya sebagai node anak sisikanan dari node sekarang. Jika bernilai‘0’ maka node dibuat di sisi kiri darichild node dari node saat ini. Jika nodesaat ini telah mempunyai sebuah nodeakan baik di sisi kiri atau kanan makalangkah ini dilangkahi.

5. Jika bit yang baru dibaca saat inimerupakan bit terakhir dari code makanode tersebut menyimpan karakteryang direpresentasikan oleh code.

6. Node ini kemudian dibuat sebagai nodesaat ini.

7. Nilai i ditambah8. Langkah ke-3 dan ke-5 diulang hingga

semua bit yang code untuk karakter ke-j dibaca.

9. Node saat ini diset ulang ke node akar.10. j ditambah dan i diset ulang menjadi 011. Langkah ke-3 dan ke-10 diulang hingga

code untuk semua karakter dibaca.12. Sekali proses ini selesai akan diperoleh

pohon Huffman yang lengkap dandapat dipakai untuk mengkompresi file.Pohon ini dipakai untuk mencari

karakter yang direpresentasikan olehcode pada file yang dikompresi.

Setelah pohon Huffman dibentukkembali maka proses aktual dekompresidapat dilakukan dengan algoritma berikutini:1. Node saat ini diset menjadi root node.2. Suatu urutan nilai ‘0’ dan ‘1’ dibaca dari

file yang terkompresi. Untuk setiap nilai‘0’ yang dibaca maka pindah ke nodeanak sisi kiri dari node saat ini dansetiap nilai ‘1’ yang dibaca maka pindahke node anak sisi kanan dari node saatini dan diset sebagai node saat ini.

3. Jika node saat ini merupakan sebuahdaun akan cetak karakter yangdirepresentasikan oleh node ini. Nodesaat ini diset ulang ke node akar.

4. Langkah ke-2 dan ke-3 diulang hinggasemua byte dalam file selesai dibaca.

Sekali proses ini selesai maka fileoutput terdiri dari data yang dikompresi.

3.1.7 Struktur File Hasil KompresiHasil kompresi pada file Wave akan

mempunyai ekstensi *.cmp dan dibentukdengan struktur yang sederhana. Terdiriatas dua bagian yaitu bagian “Header” danbagian “Data”. Bagian “Header” merupakanbagian awal data yang berisi informasimengenai pohon Huffman pada file Waveyang dikompresi. Bagian ini mempunyaiukuran maksimum 511 byte dan bervariasisesuai dengan banyaknya karakter yangterdapat pada file Wave. “Header”merupakan bagian yang penting untukproses dekompresi nantinya untukmembentuk kembali pohon Huffman fileWave tersebut. Sedangkan bagian “Data”merupakan data hasil kompresi atas fileWave berdasarkan tabel kode dari pohonHuffman yang dihasilkan.

Offset byte ke-1 sampai ke-511merupakan hasil penyimpanan tipe dataarray yang dihasilkan dari pohon Huffmankemudian disimpan pada file hasil kompresi.Bagian header tersebut berisi karakter dan

Page 14: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

53

dengan nilai weight-nya, berarti untuk tiapkarakter beserta nilai frekuensinyamemerlukan dua ruang dalam array.

3.2 PerancanganPada bagian perancangan ini akan

dijelaskan proses perancangan programbeserta dengan perancangan form sebagaiuser interface dari program.

3.2.1 Perancangan ProgramAlgoritma atau encoding Huffman

sebenarnya merupakan algoritma kompresiyang dapat diterapkan pada semua jenisbaik untuk file biner maupun file teks.Algoritma ini efektif dengan rasio kompresiyang rendah jika terdapat banyakredundancy data atau perulangan data yangsama pada file.

Pada program ini hanya akan dibuatkompresi dan dekompresi khusus hanyapada file audio berjenis Wave danmempunyai audio format berjenis PCM(Pulse Code Modulation) dan hanyamendukung jumlah kanal maksimum 2 buahkanal (mono dan stereo). Untuk jenis Wavedengan Multi Channel tidak dapat dilakukanproses kompresi.

File Wave tersebut biasanya selaluberukuran besar untuk durasi waktu mainyang lama. Sebagai contoh untuk jenissample rate 44.100 Hz dengan jumlah kanalstereo dan bits per sample 16 bit untukdurasi selama 1 detik saja memerlukankapasitas sebesar 44.100 2 16 =1.411.200 bit per detik = 176.400 byte perdetik. Jadi untuk durasi lagu yang rata-rata4 menit memerlukan kapasitas 176.400 4 60 = 42.336.000 byte.

Seperti halnya dengan struktur fileyang lain, file Wave juga mempunyaistruktur tersendiri. Struktur file Wavemengikuti standar RIFF denganpengelompokkan informasi file atas chunk-chunk. Secara umum bagian dari file Wavedibagi atas bagian header dan bagian data.Bagian data menyimpan data Wave yangdapat di-playback kembali. Sedangkan

bagian header berisi informasi mengenaijenis file Wave, audio format, sample rate,byte rate, jumlah kanal, block align, bits persample, dan lain-lain.

Bagian yang dikompresi dandidekompresi pada file Wave adalah bagianchunk data selain itu file output hasilkompresi akan diberi nilai “88” pada subchunk audio format untuk membedakan filetersebut dengan file tidak terkompresi yangbiasanya bernilai “1” pada bagian audioformat-nya. Untuk lebih jelasnya dapatdilihat pada skema berikut bagian dari fileWave yang diproses.

Berikut ini merupakan diagram alirdari program kompresi dan dekompresi fileWave. Diagram pertama memperlihatkanproses pembacaan file untuk mendapatkaninformasi file Wave. Diagram kedua berupadiagram untuk proses kompresi dandekompresi. Diagram ketiga mengenai caramemainkan file Wave dalam program.

End

Begin

Load FileWave

Get File WaveHeader

RIFF AndWAVE ? Add To List

Yes

No

Gambar 3.18 Diagram Alir Pembacaan FileWave

Langkah pertama sebelum file Waveyang dimasukkan ke dalam list, makaterlebih dahulu file Wave di-load dandibuka. Setelah itu lakukan pembacaanpada header file Wave untuk 44 byte

Page 15: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

54

pertama. Selanjutnya lakukan pengambilannilai 4 byte pertama lakukan pengecekanapakah merupakan string “RIFF”, berikutnyaadalah pengambilan dari byte ke-8 hinggabyte ke-12 dan lakukan pengecekan apakahmerupakan string “WAVE”. Jika keduanyabenar maka file tersebut merupakan fileWave dan langsung ditambahkan di bagianlist, jika tidak lakukan loading file berikutnya.

Gambar 3.19 Diagram Alir ProsesKompresi Dan Dekompresi File Wave

Sebelum melakukan proseskompresi atau dekompresi file Wave makapertama sekali adalah mengecek apakahfile yang diproses tersebut ditandai padabagian list. Jika tidak ada satu pun file yangditandai maka proses kompresi atau

dekompresi tidak dilakukan. Sebaliknya jikaterdapat satu atau beberapa file yangditandai maka proses dilakukan pada filepertama yang ditandai. File dibaca untukmengambil nilai Audio Format, seluruhheader file dan chunk data yang merupakandata audio. Jika bernilai 1 berarti file belumdikompresi maka dapat dilakukan proseskompresi. Kompresi dilakukan hanya padabagian chunk data dengan algoritmaHuffman. Hasil kompresi berupa data yangdikompresi berikut pohon Huffman disimpansekaligus akan ditulis ke file output. Setelahproses kompresi selesai informasi file yangdiproses ditulis kembali ke file output berikutdengan pohon Huffman dan data hasilkompresi. Setelah itu lakukan perhitungankembali nilai chunk size yaitu ukuran fileoutput dikurangi dengan 8 byte danperhitungan subchunk2 size yaitu ukurandata hasil kompresi berikut dengan pohonHuffman dalam satuan byte.

Untuk proses dekompresi kembaliseperti halnya dengan proses kompresi.Chunk data file Wave dan informasi headerfile diambil dan dicek nilai audio formatapakah bernilai 88, jika ya maka dilakukanproses dekompresi yang merupakankebalikan dari proses kompresi. Prosesnyadengan membaca dan membentuk pohonHuffman kembali dimulai dari byte ke-45 fileWave, setelah itu seluruh data hasilkompresi dikembalikan ke nilai semulaberdasarkan pohon Huffman tersebut.Selanjutnya informasi pada file Wave ditulispada file output dan hasil dekompresi dituliskembali juga dan dilakukan kembaliperhitungan nilai chunk size dan nilaisubchunk2 size.

Untuk nilai audio format selain 1 dan88 tidak akan diproses oleh program danakan dilewatkan. Selanjutnya bila filetersebut selesai diproses maka akandilanjutkan ke file berikutnya yang ditandaihingga file terakhir pada list.

Program dirancang mampumemainkan file Wave. Fungsi untukmemainkan file Wave diproses dengan

Page 16: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

55

menggunakan fungsi API (ApplicationProgramming Interface) MultimediaWindows. Untuk memainkan file Waveterlebih dahulu file tersebut di-load dandilakukan pengecekan terhadap nilai audioformat. Bila bernilai 1 maka file akanlangsung dimainkan, bila bernilai 88 makaprogram akan melakukan dekompresi kememori sistem terlebih dahulu file tersebutbaru kemudian dimainkan.

Program akan terus memonitorstatus dari file Wave yang dimainkan, bilatelah mencapai akhir file berarti prosesplaying akan selesai dan akan dilanjutkanmemainkan file selanjutnya dari list hinggafile terakhir dalam list.

Bila pada saat file Wave sedangdimainkan user menekan tombol “Pause”maka file tersebut akan dihentikan sejenakdan posisi playing diset ke posisi sekarang.Bila user menekan kembali tombol “Play”maka file akan dimainkan pada posisiterakhir sewaktu file di-pause. Sedangkanbila pada saat file dimainkan user menekantombol “Stop” maka program akanmenghentikan file Wave yang dimainkan.

Diagram untuk seluruh rangkaianproses memainkan file Wave dapat dilihatpada gambar berikut ini.

Gambar 3.20 Diagram Alir Memainkan FileWave

3.2.2 Perancangan FormBerikut ini merupakan perancangan

dari form utama program beserta dengankomponen Visual Basic yang dipakai.

Gambar 3.21 Rancangan Form Utama

Page 17: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

56

Bagian utama dari program inidirancang dengan komponen Visual Basicseperti pada bagian atas tombol yangmempunyai icon biasanya disebut dengantoolbar tetapi pada program ini dibuat daricommand button.

Jumlah command button yangberfungsi sebagai toolbar tersebut adalah12 (dua belas) buah. Fungsinya dimulaidari sisi kiri ke kanan adalah sebagaiberikut:1. Tombol command button 1 sebagai

tombol untuk menambah file Wavetunggal ke dalam list.

2. Tombol command button 2 sebagaitombol untuk menambah semua fileWave pada folder tertentu.

3. Tombol command button 3 sebagaitombol untuk memilih dan menandaisemua file Wave yang ada di list.

4. Tombol command button 4 sebagaitombol untuk menghilangkan semuatanda cek file pada list.

5. Tombol command button 5 sebagaitombol untuk menghapus semua fileyang ditandai dari list.

6. Tombol command button 6 sebagaitombol untuk menghapus semua filebaik yang ditandai atau tidak dari list.

7. Tombol command button 7 sebagaitombol untuk melakukan proseskompresi file Wave.

8. Tombol command button 8 sebagaitombol untuk melakukan prosesdekompresi file Wave.

9. Tombol command button 9 sebagaitombol untuk memainkan file Waveyang dipilih dari list.

10. Tombol command button 10 sebagaitombol untuk menghentikan sejenakfile Wave yang sedang dimainkan.

11. Tombol command button 11 sebagaitombol untuk menghentikan file Waveyang sedang dimainkan.

12. Tombol command button 12 sebagaitombol untuk keluar dari program.

Bagian lainnya adalah sebuah textbox “Destination Folder” tempatmenampung string path folder output. Untuk

memilih folder output tersebut dapat denganmengklik pada tombol di samping kanantext box tersebut ataupun dengan caramengetikkan secara langsung pada text boxtersebut.

Berikutnya adalah list atau daftaruntuk menampung file Wave yang akandiproses atau di-play. Bagian inimenggunakan komponen list view denganbentuk tampilan dibuat secara bentukReport. File yang ditambahkan pada listview memuat informasi seperti nama file,tanggal pembuatan file, ukuran file, ukuranfile setelah diproses, rasio kompresi,attribut, status file, path, dan informasi fileWave.

Bagian bawah dari form utamamerupakan baris keterangan. Terdapat duabuah label pada sisi kiri. Label pertamaberfungsi untuk menampilkan keteranganbaik kesalahan atau error untuk proseskompresi dan dekompresi. Label keduauntuk menampilkan status file Wave yangsedang dimainkan apakah berstatus“Playing” atau “Paused”. Bagian berikutnyaadalah dua buah progress bar, yangpertama adalah progress bar untuk statuskemajuan file Wave yang sedang dimainkansedangkan progress bar kedua untukmenampilkan status kemajuan proseskompresi dan dekompresi file. Yangterakhir adalah bagian image yang bergunauntuk menampilkan image berupa gambarlampu lalu lintas berwarna hijau dan merahtanda program sedang memproses atautidak.

Program dirancang selain dapatmelakukan proses kompresi dandekompresi file Wave juga dapat sebagaiplayer file Wave. Program dapatmemproses dan memainkan semua fileyang ada di list sekaligus.

Pada form utama terdapat menuyang mempunyai fungsi-fungsi yang samadengan toolbar. Adapun struktur menu dariprogram ini adalah sebagai berikut :

Page 18: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

57

Gambar 3.22 Struktur Menu Program

Fungsi semua menu di atas ekivalendengan fungsi yang ada pada commandbutton di bagian toolbar.

Form lainnya yang dirancang adalahform Frekuensi yang akan dipakai untukmenampung jumlah karakter dan frekuensikode ASCII yang terdapat pada suatu file

Wave yang diproses.

Gambar 3.23 Rancangan Form FrekuensiForm berikutnya yang dirancang adalahform Author yang berisi penjelasan programsecara singkat serta nama penulis.

Gambar 3.24 Rancangan Form Author

Komponen utama yang dipakaihanya berupa label sebagai teks, commandbutton, dan image. Form ini dapat diaksesmelalui menu Help About.

3.2.3 Ekstensi File Hasil KompresiUntuk membedakan file hasil

kompresi dengan file Wave asli makaprogram akan menambahkan ekstensi

Page 19: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

58

tambahan yaitu “.HUF”. Bila file tersebutdidekompresi kembali maka ekstensitambahan ini akan otomatis dibuang.

KESIMPULAN DAN SARAN4.1.1 Kesimpulan

Berdasarkan pembahasan dari bab-bab sebelumnya yang telah dilakukan makadapat diambil beberapa kesimpulan sebagaiberikut:1. Reduksi ukuran file yang diperoleh

dengan algoritma Huffman iniberkisar dari range 20% hingga40%. Jadi dapat dikatakan denganrasio kompresi ini algoritma Huffmansudah dikatakan baik dalam halmengkompresi file khususnya fileWave.

2. Tingkat kompresi dipengaruhi olehbanyaknya nada yang sama dalamfile Wave.

3. Kecepatan proses tidak bergantungpada data yang diproses tetapiberbanding lurus dengan ukuran fileWave, artinya semakin besar ukuranfile Wave yang diproses makasemakin lama waktu prosesnya.

4. Proses dekompresi lebih cepatdilakukan dibandingkan denganproses kompresi karena padaproses dekompresi tidak dilakukanlagi proses pembentukan pohonHuffman dari data melainkan hanyalangsung membaca dari tabel codepohon Huffman yang disimpan padafile sewaktu proses kompresi.

5. File Wave yang telah dikompresi biladilakukan proses kompresi sekalilagi maka ukuran file akanbertambah besar sedikit karenaalgoritma Huffman merupakanoptimal compression jadi file yangdilakukan kompresi sebanyak duakali maka proses terakhir tidak akanmereduksi ukuran file lagi. Terjadipertambahan byte pada proseskompresi kedua kalinya karenaprogram menyimpan struktur pohonHuffman dari hasil kompresipertama.

6. File Wave yang telah dikompresitersebut hanya dapat dimainkan dariprogram ini.

4.2 SaranUntuk pengembangan lebih lanjut

program kompresi pada file Wave ini, makadapat diberikan beberapa saran sebagaiberikut:1. Untuk meningkatkan rasio kompresi

maka algoritma kompresi Huffmandapat digabungkan dengan rasiokompresi yang lain seperti LZW.

2. Untuk proses play back file Waveditambahkan fasilitas yang lainseperti untuk looping, tombol next,dan tombol previous

3. Untuk memainkan file Wave yangtelah dikompresi agar prosesdekompresi lebih cepat maka dapatdilakukan dengan teknik streamingdimana file tidak perlu dikompresisampai utuh di memory tetapi bagianfile yang hanya sebagiandidekompresi tersebut langsungdimainkan.

DAFTAR PUSTAKA[BAF01] Basalamah, Affah,

Teknologi Multimedia MP3, PT. ElexMedia Komputindo, Jakarta, 2001.

[HRD01] Hadi R, PemrogramanWindows API dengan Microsoft VisualBasic, PT. Elex Media Komputindo,Jakarta, 2001.

[HVL00] Halvorson M, MicrosoftVisual Basic 6.0 Professional, Step byStep, PT. Elex Media Komputindo,Jakarta, 2000.

[MSD98] Microsoft DeveloperNetwork (MSDN) Library Visual Studio6.0, Microsoft Corporation, 1998.

[SHC48] Shannon, C. E., AMathematical Theory ofCommunication, The Bell SystemTechnical Journal, Vol. 27, pp. 379 −423, 623 − 656, July, October, 1948.

[STP02]http://www.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/,

2002

Page 20: PENERAPAN ALGORITMA HUFFMAN PADA …si.universitassuryadarma.ac.id/wp-content/uploads/2015/11/JURNAL... · Algoritma Huffman merupakan algoritma kompresi lossless, yaitu teknik ...

59

[HRD02]http://www.replaygain.hydrogenaudi

o.org/file_format_wav.html, 2002[HUF01]

http://www.stanford.edu/~udara/SOCO/lossless/huffman/algorithm.htm, 2001[PPC02]

http://www.prepressure.com/techno/

compression1.htm, 2002[DCP01] http://www.data-compression.com/index.html, 2001