Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
IMPLEMENTASI ALGORITMA HUFFMAN PADA KOMPRESI FILE WAVEDENGAN MENGGUNAKAN BORLAND DELPHI H. Akik Hidayat Prodi Teknik Informatika, Departement Ilmu Komputer Fakultas MIPA UNPAD Jl. Raya Bandung Sumedang KM 21 Jatinangor Sumedang 45363 E-mail:
[email protected]
ABSTRACT One sound file format that is widely used in the Windows operating system is the Wave format (*. WAV). Wave is a coarse file format (raw format) where the direct sound signal recorded and quantized into digital data. So a recorded track CD -quality audio it will require the storage media is large enough, and therefore we need a software that can reduce the file in order to save storage media. The aim in this paper is to determine how the Huffman algorithm used in the compression wave files, and can generate a software that can compress a wave file, which saves storage capacity. The steps taken in this are problem solvers library research or library research, to gather a variety of information related to the structure of the wave file and Huffman algorithms, and so designing a program interface. File wave which has a large capacity can be compressed with the Huffman algorithm can generate a range ratio ranged from 20 % to 40 %. So it can be said with a compression ratio of Huffman's algorithm has been said to be good in terms of compressing files, especially files Wave. Keyword : Sound, Wave, Huffman's Algorithm. I.
PENDAHULUAN File wave merupakan file audio yang banyak ditemukan dalam kegiatan kita sehari-hari terutama dalam perangkatperangkat multimedia, sebagai contoh untuk keperluan game, back sound dalam sistem operasi atau dalam aplikasi-aplikasi lainya yang menggunakan format file tersebut. Format file Wave merupakan format kasar, karena format tersebut merupakan signal suara yang langsung dan dijadikan langsung data digital, yang mana format tersebut mempunyai format dasar yang dikenal dengan istilah PCM (Pulse Code Modulation). Sebagai contoh jika suatu lagu di rekam sekualitas CD Audio dengan
menggunakan sampling rate 44,1 kHz, 16 bit per sample, 2 kanal (stereo), maka ukurannya akan berkisar kurang lebih 176.400 byte sehingga untuk durasi 1 menit diperlukan 10,584 MB dan itu berarti membutuhkan media penyimpanan daya yang cukup besar karena untuk 5 menit saja akan membutuhkan sekitar 50 MB. Maka dari itu harus ada suatu program yang dapat mengecilkan file tersebut. Supaya bisa menghemat media penyimpanan data. Maka dari masalah tersebut maka dibutuhkan sebuah perangkat lunak yang dapat melakukan kompresi pada file Wave sekaligus mampu memainkan kembali file Wave terkompresi tersebut. Maka dalam 13
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
Tugas Akhir ini penulis mengambil judul “Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi 7”
elektronik, serta sebaliknya. Contoh transducer adalah mikrofon dan speaker. Mikrofon dapat mengubah tekanan udara menjadi tegangan elektrik, sementara speaker melakukan pekerjaan sebaliknya. Tegangan elektrik diproses menjadi sinyal digital oleh sound card. Ketika Anda merekam suara atau musik ke dalam komputer, sound card akan mengubah gelombang suara (bisa dari mikrofon atau stereo set) menjadi data digital, dan ketika suara itu dimainkan kembali, sound card akan mengubah data digital menjadi suara yang kita dengar (melalui speaker), dalam hal ini gelombang analog. Proses pengubahan gelombang suara menjadi data digital ini dinamakan Analog-to-Digital Conversion (ADC), dan kebalikannya, pengubahan data digital menjadi gelombang suara dinamakan Digital-toAnalog Conversion (DAC). Proses pengubahan dari tegangan analog ke data digital ini terdiri atas beberapa tahap yang ditunjukkan pada Gambar 2.1, yaitu: 1. Membatasi frekuensi sinyal yang akan diproses dengan Low Pass Filter. 2. Mencuplik sinyal analog ini (melakukan sampling) menjadi beberapa potongan waktu. 3. Cuplikan-cuplikan ini diberi nilai eksak, dan nilai ini diberikan dalam bentuk data digital.
II.
LANDASAN TEORI Suara yang kita dengar sehari-hari adalah merupakan gelombang analog. Gelombang ini berasal dari tekanan udara yang ada di sekeliling kita, yang dapat kita dengar dengan bantuan gendang telinga. Gendang telinga ini bergetar, dan getaran ini dikirim dan diterjemahkan menjadi informasi suara yang dikirimkan ke otak, sehingga kita dapat mendengarkan suara. Suara yang kita hasilkan sewaktu berbicara berbentuk tekanan suara yang dihasilkan oleh pita suara. Pita suara ini akan bergetar, dan getaran ini menyebabkan perubahan tekanan udara, sehingga kita dapat mengeluarkan suara. Komputer hanya mampu mengenal sinyal dalam bentuk digital. Bentuk digital yang dimaksud adalah tegangan yang diterjemahkan dalam angka “0” dan “1”, yang juga disebut dengan istilah “bit”. Tegangan ini berkisar 5 volt bagi angka “1” dan mendekati 0 volt bagi angka “0”. Dengan kecepatan perhitungan yang dimiliki komputer, komputer mampu melihat angka “0” dan “1” ini menjadi kumpulan bit-bit dan menerjemahkan kumpulan bit-bit tersebut menjadi sebuah informasi yang bernilai. Bagaimana caranya memasukkan suara analog ini sehingga dapat dimanipulasi oleh peralatan elektronik yang ada? Alat yang diperlukan untuk melakukan ini adalah transducer. Dalam hal ini, transducer adalah istilah untuk menyebut sebuah peralatan yang dapat mengubah tekanan udara (yang kita dengar sebagai suara) ke dalam tegangan elektrik yang dapat dimengerti oleh perangkat 14
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
Gambar 2.1 Proses sebaliknya, yaitu pengubahan dari data digital menjadi tegangan analog juga terdiri atas beberapa tahap, yang ditunjukkan pada gambar 2.2, yaitu: 1. Menghitung data digital menjadi amplitudo-amplitudo analog.
2. Menyambung amplitudo analog ini menjadi sinyal analog. 3. Memfilter keluaran dengan Low Pass Filter sehingga bentuk gelombang keluaran menjadi lebih mulus.
Gambar 2.2 Proses pengubahan sinyal analog menjadi digital harus memenuhi sebuah kriteria, yaitu kriteria Nyquist. Kriteria ini mengatakan bahwa untuk mencuplik sebuah sinyal yang memiliki frekuensi X Hertz, maka harus mencupliknya minimal dua kali lebih rapat, atau 2X Hertz. Jika tidak, sinyal tidak akan dapat dikembalikan ke dalam bentuk semula.
buah kanal (mono dan stereo). Untuk jenis Wave dengan Multi Channel tidak dapat dilakukan proses kompresi. File Wave tersebut biasanya selalu berukuran besar untuk durasi waktu main yang lama. Sebagai contoh untuk jenis sample rate 44.100 Hz dengan jumlah kanal stereo dan bits per sample 16 bit untuk durasi selama 1 detik saja memerlukan kapasitas sebesar 44.100 2 16 = 1.411.200 bit per detik = 176.400 byte per detik. Jadi untuk durasi lagu yang rata-rata 4 menit memerlukan kapasitas 176.400 4 60 = 42.336.000 byte. Seperti halnya dengan struktur file yang lain, file Wave juga mempunyai struktur tersendiri. Struktur file Wave mengikuti standar RIFF dengan pengelompokkan informasi file atas chunkchunk. Secara umum bagian dari file Wave dibagi atas bagian header dan bagian data. Bagian data menyimpan data Wave yang dapat di-playback kembali. Sedangkan bagian header berisi informasi mengenai
III. PERANCANGAN SISTEM Algoritma atau encoding Huffman sebenarnya merupakan algoritma kompresi yang dapat diterapkan pada semua jenis baik untuk file biner maupun file teks. Algoritma ini efektif dengan rasio kompresi yang rendah jika terdapat banyak redundancy data atau perulangan data yang sama pada file. Pada program ini hanya akan dibuat khusus untuk file audio berjenis Wave dan mempunyai audio format berjenis PCM (Pulse Code Modulation) dan hanya mendukung jumlah kanal maksimum 2 15
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
jenis file Wave, audio format, sample rate, byte rate, jumlah kanal, block align, bits per sample, dan lain-lain. Berikut ini merupakan diagram alir dari program kompresi dan dekompresi file
Wave. Diagram pertama memperlihatkan proses pembacaan file untuk mendapatkan informasi file Wave. Diagram kedua berupa diagram untuk proses kompresi dan dekompresi.
Begin
Load File Wave
Get File Wave Header
RIFF And WAVE ?
Yes Add To List
No End Langkah pertama sebelum file Wave yang dimasukkan ke dalam list, maka terlebih dahulu file Wave di-load dan dibuka. Setelah itu lakukan pembacaan pada header file Wave. Selanjutnya pengecekan apakah merupakan string
“RIFF”, berikutnya adalah pengecekan apakah merupakan string “WAVE”. Jika keduanya benar maka file tersebut merupakan file Wave dan langsung ditambahkan di bagian list, jika tidak lakukan loading file berikutnya.
16
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat) Begin
No
Checked ?
Yes Get File Wave Chunk Data
Get File Wave Audio Format
No
Audio Format = 1 (PCM) ?
Audio Format = 88 ?
Yes
No
Yes
Compress Chunk Data Wave
Decompress Chunk Data Wave
Set Audio Format = 88 Calculate ChunkSize and SubChunk2Size
Set Audio Format = 1 Calculate ChunkSize and SubChunk2Size
Write To Output File Save File Wave Information
Process Next File No
Last File in List ?
Yes End
Sebelum melakukan proses kompresi file Wave maka pertama sekali adalah mengecek apakah file yang diproses tersebut ditandai pada bagian list. Jika tidak ada satu pun file yang ditandai maka proses kompresi tidak dilakukan. Sebaliknya jika terdapat satu atau beberapa file yang ditandai maka proses
dilakukan pada file pertama yang ditandai. File dibaca untuk mengambil nilai Audio Format, seluruh header file dan chunk data yang merupakan data audio. Jika bernilai 1 berarti file belum dikompresi maka dapat dilakukan proses kompresi. Kompresi dilakukan hanya pada bagian chunk data dengan algoritma Huffman. Hasil kompresi 17
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
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 nilai audio format selain 1 dan 88 tidak akan diproses oleh program dan akan dilewatkan. Selanjutnya bila file tersebut selesai diproses maka akan dilanjutkan ke file berikutnya yang ditandai hingga file terakhir pada list. Program dirancang mampu memainkan file Wave. Fungsi untuk memainkan file Wave diproses dengan 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. IV. PEMBAHASAN Program ini tidak memerlukan cara instalasi yang khusus, dengan alasan bahwa semua file yang dibutuhkan oleh aplikasi ini dapat dikompilasi menjadi satu file executeable. Jadi untuk instalasi program ini cukup dengan mengcopyfileexecuteable-nya (Wave Compressor.EXE) ke dalam lokasi folder yang dipilih pada harddisk. Jika program tidak dapat dijalankan lakukanlah instalasi dengan menjalankan file SETUP.EXE. Untuk menjalankan program ini dapat dilakukan dengan mengklik pada fileWave Compressor.EXE. Setelah program di-load maka akan terlihat bentuk tampilan seperti gambar di bawah ini.
18
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
Langkah pertama yang dilakukan untuk mengkompresi atau mengdekompresi sebuah atau beberapa fileWave adalah me-load fileWave tersebut terlebih dahulu ke dalam list. Ini dapat dilakukan dengan mengklik pada tombol “Add File” untuk memilih sebuah file
tunggal dengan memunculkan sebuah kotak dialog untuk memilih satu buah fileWave. Sedangkan untuk memilih semua fileWave yang terdapat pada folder tertentu dapat dengan mengklik pada “Add Folder”.
Sebelum ditempatkan ke dalam list semua fileWave tersebut akan dicek dahulu apakah memang file tersebut merupakan jenis Wave. Pengecekan tidak dilakukan dengan mengecek ekstensi file saja tetapi dengan mengecek header dari fileWave tersebut. Jika header dari file tersebut bertanda “RIFF” dan “WAVE” maka file tersebut adalah fileWave. Jika ada file yang tidak mempunyai header seperti di atas maka file tersebut tidak akan ditambahkan ke list dan dimunculkan sebuah pesan kesalahan. Selanjutnya adalah mengecek informasi dari tiap fileWave seperti tanggal pembuatan file, ukuran file asli, attribut file, audio format, jumlah kanal (number of channels), block align, sampling rate, byte
rate, bits per sample, dan durasi fileWave. Informasi tersebut secara otomatis akan ditampilkan ke dalam list untuk tiap-tiap file. Informasi-informasi tersebut berguna nantinya dalam proses kompresi dan dekompresi fileWave. Setelah semua proses ini maka file akan didaftar seperti terlihat pada gambar di bawah ini. File dalam list ini akan diurutkan secara urutan menaik (ascending) sesuai dengan nama file. Jika user menginginkan pengurutan dengan urutan menurun (descending) maka dapat dilakukan dengan mengklik pada bagian column header “File Name”. Hal yang sama juga dapat dilakukan pada column header yang lain.
19
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
Sebelum memproses fileWave untuk dikompresi atau didekompresi maka file yang akan diproses harus dipilih dahulu dengan memberikan tanda cek pada file tersebut. Untuk memilih semua file sekaligus dapat dengan menekan tombol “Select All” sedangkan untuk meniadakan semua pilihan pada file dapat dengan menekan tombol “Deselect All”. Untuk menghilangkan file dari list maka file yang telah diberi tanda cek dapat dihapus dari list dengan menekan tombol “Remove”. Penekanan pada tombol “Remove All” akan menghapus semua file dari list.
Selanjutnya adalah memilih path output sebagai path keluar file yang diproses. Bila user menggunakan path yang sama dengan path fileWave sumber maka file hasil akan menimpa file sumber tanpa memberikan konfirmasi kepada user terlebih dahulu. Untuk lebih amannya sebaliknya path output dibuat berlainan dengan path file sumber. Untuk memilih path output dapat dengan menekan tombol bergambar maka akan dimunculkan gambar seperti berikut ini.
20
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
Setelah itu user dapat menekan tombol “Compress” untuk melakukan proses kompresi pada fileWave. Semua file yang ditandai pada list akan diproses satu persatu. Setelah file selesai diproses maka status file berubah menjadi “Proceed” menandaikan file telah berhasil diproses. Jika file yang diproses ternyata telah pernah dikompresi maka program akan melewatkan (bypass) file tersebut. Semua ketentuan dalam mendekompresi fileWave .
juga berlaku sepertinya pada proses kompresi. File yang tidak terkompresi akan dilaporkan melalui sebuah pesan kesalahan dan file tersebut akan dilewatkan. Untuk melalukan prose dekompresi fileWave dapat dengan menekan tombol “Uncompress”. Setelah proses selesai maka akan dimunculkan sebuah pesan bahwa proses telah selesai dilakukan, seperti terlihat pada gambar berikut ini
Setelah ditekan tombol OK maka akan dimunculkan sebuah form yang memuat frekuensi karakter yang terdapat
pada data file Wave seperti terlihat pada gambar berikut ini.
File Wave yang ada di list baik yang terkompresi atau tidak dapat dimainkan secara langsung. Untuk melalukan ini user dapat mengaksesnya melalui tombol audio seperti “Play” untuk memainkan fileWave.
Tombol “Pause” untuk menghentikan fileWave yang sedang dimainkan sejenak, dan terakhir tombol “Stop” untuk menghentikan fileWave yang sedang dimainkan. 21
Implementasi Algoritma Huffman Pada Kompresi File Wave Dengan Menggunakan Borland Delphi (H. Akik Hidayat)
V. KESIMPULAN 1. Algoritma huffman bisa diartikan sebagai sebuah teknik kompresi dokumen yang menggunakan jumlah kemunculan relatif simbol-simbol karakter untuk menghasilkan presentasi jumlah biner dengan jumlah tertentu untuk tiap karakter; 2. Reduksi ukuran file yang diperoleh dengan algoritma Huffman ini berkisar dari range 20% hingga 40%. Jadi dapat dikatakan dengan rasio kompresi ini algoritma Huffman sudah dikatakan baik dalam hal mengkompresi file khususnya fileWave; 3. Tingkat kompresi dipengaruhi oleh banyaknya nada yang sama dalam file Wave; 4. Kecepatan proses tidak bergantung pada data yang diproses tetapi berbanding lurus dengan ukuran fileWave, artinya semakin besar ukuran fileWave yang diproses maka semakin lama waktu prosesnya; 5. File Wave yang telah dikompresi tersebut hanya dapat dimainkan dari program ini.
Microsoft Developer Network (MSDN) Library Visual Studio 6.0, Microsoft Corporation, 1998; Shannon, C. E., A Mathematical Theory of Communication, The Bell System Technical Journal, Vol. 27; Majalah audiopro, edisi 2005, Jakarta.
VI. DAFTAR PUSTAKA Rosa, M. Salahudin, Struktur Data, Modula, Bandung, 2010; Rosa, M. Salahudin, Algoritma Dan Pemrograman, Modula, Bandung, 2010; Visual Basic 2010 Source Code, Wahana Komputer 1010; Basalamah, Affah, Teknologi Multimedia MP3, PT. Elex Media Komputindo, Jakarta, 2001; Hadi R, Pemrograman Windows API dengan Microsoft Visual Basic, PT. Elex Media Komputindo, Jakarta, 2001; Halvorson M, Microsoft Visual Basic 6.0 Professional, Step by Step, PT. Elex Media Komputindo, Jakarta, 2000; 22