Perancangan Program
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 kompresi dan dekompresi khusus hanya pada file audio berjenis Wave dan mempunyai audio
format berjenis PCM (Pulse Code
Modulation) dan hanya mendukung jumlah kanal maksimum 2 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 chunk-chunk. 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 jenis file
Wave, audio format, sample rate,
byte rate, jumlah kanal, block align, bits per sample, dan lain-lain.
Bagian
yang dikompresi dan didekompresi pada file
Wave adalah bagian chunk data selain
itu file output hasil kompresi akan
diberi nilai “88” pada sub chunk audio format
untuk membedakan file tersebut dengan
file tidak terkompresi yang biasanya
bernilai “1” pada bagian audio format-nya.
Untuk lebih jelasnya dapat dilihat pada skema berikut bagian dari file Wave
yang diproses.
Gambar 3.17 Skema Struktur Wave Yang Diproses
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. Diagram ketiga mengenai cara memainkan file Wave dalam program.
Gambar 3.18 Diagram Alir Pembacaan File Wave
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 untuk 44 byte pertama. Selanjutnya lakukan
pengambilan nilai 4 byte pertama
lakukan pengecekan apakah merupakan string
“RIFF”, berikutnya adalah pengambilan dari byte
ke-8 hingga byte ke-12 dan lakukan
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.
Gambar 3.19 Diagram Alir Proses Kompresi Dan Dekompresi
File Wave
Sebelum
melakukan proses kompresi atau dekompresi 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
atau dekompresi 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 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.
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.
Diagram
untuk seluruh rangkaian proses memainkan file
Wave dapat dilihat pada gambar
berikut ini.
Gambar 3.20 Diagram Alir Memainkan File Wave