Implementasi Digital Watermarking Pada File Audio Dengan Menggunakan Metode Phase Coding

(1)

IMPLEMENTASI DIGITAL WATERMARKING PADA FILE AUDIO

DENGAN MENGGUNAKAN

METODE PHASE CODING

SKRIPSI

FITRIYANI

041401066

PROGRAM STUDI S1 ILMU KOMPUTER

DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SUMATERA UTARA

MEDAN

2010


(2)

IMPLEMENTASI DIGITAL WATERMARKING PADA FILE AUDIO DENGAN MENGGUNAKAN

METODE PHASE CODING

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Komputer

FITRIYANI 041401066

PROGRAM STUDI S1 ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

MEDAN 2010


(3)

PERSETUJUAN

Judul : IMPLEMENTASI DIGITAL WATERMARKING

PADA FILE AUDIO DENGAN MENGGUNAKAN METODE PHASE CODING

Kategori : SKRIPSI

Nama : FITRIYANI

Nomor Induk Mahasiswa : 041401066

Program Studi : SARJANA (S1) ILMU KOMPUTER Departemen : ILMU KOMPUTER

Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA

Diluluskan di

Medan, 12 Januari 2010 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Maya Silvi Lydia, B.Sc, MSc Prof. Dr. Muhammad Zarlis NIP. 1974012720021222001 NIP. 195707011986011003

Diketahui/Disetujui oleh

Program Studi S1 Ilmu Komputer Ketua,

Prof. Dr. Muhammad Zarlis NIP. 195707011986011003


(4)

PERNYATAAN

IMPLEMENTASI DIGITAL WATERMARKING PADA FILE AUDIO DENGAN MENGGUNAKAN

METODE PHASE CODING

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, Januari 2010

Fitriyani 041401066


(5)

PENGHARGAAN

Puji dan syukur penulis panjatkan kepada Allah SWT, dengan limpahan karunia-Nya skripsi ini berhasil diselesaikan dalam waktu yang telah ditetapkan.

Ucapan terima kasih penulis sampaikan kepada Bapak Prof.Dr. Muhammad Zarlis, Maya Silvi Lydia, BSc,MSc selaku pembimbing yang membimbing penulis pada penyelesaian skripsi ini dan telah memberikan panduan dengan penuh kepercayaan kepada penulis untuk menyempurnakan skripsi ini. Panduan ringkas, padat dan profesional telah diberikan kepada penulis agar penulis dapat menyelesaikan tugas ini. Ucapan terima kasih juga ditujukan kepada Drs. M. Situmorang, M.Kom dan M. Andri B, ST, McompSc, MEM selaku dosen penguji. Ucapan terima kasih juga ditujukan kepada Ketua dan Sekretaris Program Studi Ilmu Komputer S1, Prof. Dr. Muhammad Zarlis dan Syahriol Sitorus, S.Si, MIT, Dekan dan Pembantu Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua dosen pada Program Studi Ilmu Komputer FMIPA USU, pegawai di FMIPA USU. Akhirnya, tidak terlupakan ucapan terima kasih yang tak terhingga atas curahan kasih sayang dan dukungannya baik materil dan spirituil kepada keluarga tercinta, Bapak, Ibu, Kakak dan Adik-adik yang telah banyak memberikan bantuan, doa, dorongan kepada penulis. Dan tidak lupa kepada Dini, Anggi, Lyla ,Emi, Hanifah dan rekan-rekan kuliah. Semoga Allah SWT akan membalasnya.


(6)

ABSTRAK

Watermarking merupakan salah satu bagian dari teknik pengamanan data yang saat ini mulai dikembangkan. Teknik ini adalah teknik penyembunyian data kedalam data lain sebagai host file dengan memanfaatkan kelemahan pada indera manusia, seperti mata pada pengolahan citra dan telinga pada pengolahan audio. Penelitian ini bertujuan untuk menghasilkan file audio MP3 dengan watermark (berkas teks) yang dapat digunakan untuk perlindungan hak cipta yang handal dan tahan terhadap pengolahan sinyal digital. Teknik Watermarking yang digunakan dalam penelitian ini adalah teknik perekayasaan fase sinyal pada audio yang dikenal dengan Phase Coding. Pada penelitian ini aplikasi dibuat dengan Visual Borland Delphi 7. Perlindungan hak cipta audio dengan Watermarking-Phase Coding menghasilkan audio yang tahan terhadap pengolahan sinyal digital tanpa merusak audio dan berkas teks yang telah disisipkan serta memiliki beda fase yang kecil antara sinyal asli dan sinyal yang dimodifikasi, sehingga perbedaan suara yang dihasilkan tidak terdeteksi oleh pendengaran manusia. Semakin tidak terdeteksi adanya watermarking maka semakin baik tingkat pengamanannya.


(7)

IMPLEMENTATION OF DIGITAL WATERMARKING IN AUDIO DIGITAL USING PHASE CODING METHOD

ABSTRACT

Digital watermarking is one part of the data security techniques that is beginning to be developed now. This is a technique of hiding data a host file into other data files by using the weaknesses of human senses, such as the eyes at the image processing and ears at audio processing. This research aims to produce MP3 audio files with watermark (text file) that can be used for copyright protection, reliable and resilient digital signal processing. Digital watermarking techniques that used in this study is the phase of engineering techniques in audio signals, known as Phase Coding. In this study, the applications mades by Visual Borland Delphi 7. Copyright protection in audio by Watermarking-Phase Coding produces resistant audio digital to signal processing without destroying the audio and text files that have been inserted and has a small difference phase between the original signal and the signal that modified, so the difference in the sound produced is not detectable by human hearing . When the watermark is less detected, then security level will getting better.


(8)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak v

Abstract vi

Daftar Isi vii

Daftar Tabel ix

Daftar Gambar x

BAB 1 PENDAHULUAN 1

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2 1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 3

1.5 Manfaat Penelitian 3 1.6 Metode Penelitian 4

1.7 Sistematika Penulisan 5

BAB 2 LANDASAN TEORI 6

2.1 Audio 6

2.1.1 Audio Digital 7

2.2 Digital Watermarking 10

2.2.1 Tujuan Watermarking 14 2.2.2 Audio Watermarking 14

2.3 Phase Coding 16

BAB 3 PERANCANGAN SISTEM DAN IMPLEMENTASI 18

3.1 Perancangan Sistem 18

3.2 Implementasi 26

3.2.1 Implementasi Antar Muka 26

3.2.2 Tampilan Utama Aplikasi 27

3.2.3 Proses Enkode 29

3.2.3 Proses Dekode 32

3.3 Proses Instalasi 33

BAB 4 ANALISIS MASALAH 34

4.1 Analisis Masalah 34

4.2 Pengujian Aplikasi 36


(9)

BAB 5 PENUTUP 42

5.1 Kesimpulan 42

5.2 Saran 42

DAFTAR PUSTAKA 44


(10)

DAFTAR TABEL

Halaman

Tabel 2.1 Tabel Nilai Bit Rate pada MPEG 9

Tabel 2.2 Tabel Nilai Sampling MPEG 10

Tabel 4.1 Berkas Audio yang di uji 37

Tabel 4.2 Berkas Teks yang di uji 37

Tabel 4.3 Hasil Pengujian Aplikasi 37

Tabel 4.4 Berkas Watermark tanpa Pengolahan Sinyal 38 Tabel 4.5 Hasil Pengujian Watermark terhadap Indera Manusia 38 Tabel 4.6 Analisis Audio dengan Perubahan Format *.wav Menggunakan

Aplikasi RightMark Audio Analyzer 6.2.3 39 Tabel 4.7 Hasil Pengujian terhadap Resampling 41


(11)

DAFTAR GAMBAR

Halaman

Gambar 2.1 Sampling sinyal kontinu 7

Gambar 2.2 Perancangan sistem Watermarking 12 Gambar 2.3 Sinyal Asli dan Sinyal yang dibagi beberapa Segmen 16

Gambar 3.1 Alur Proses Aplikasi 18

Gambar 3.2 Flowchart Proses Sistem Penggunaan Aplikasi

Untuk enkode 19

Gambar 3.3 Flowchart Proses Perhitungan Frame Audio 20 Gambar 3.4 Flowchart Proses Enkode Phase Coding 22 Gambar 3.5 Flowchart Proses Sistem Penggunaan Aplikasi untuk Dekode 23 Gambar 3.6 Flowchart Proses Dekode Phase Coding 25

Gambar 3.7 Tampilan Utama Aplikas 26

Gambar 3.8 Tampilan Form About 27

Gambar 3.9 Tampilan Proses Tombol ’Pilih Mp3’ 29 Gambar 3.10 Tampilan Proses Tombol ’ Mp3 info’ 30 Gambar 3.11 Tampilan Proses Tombol ’Ukuran Max Sisip’ 30 Gambar 3.12 Tampilan Proses Tombol ’Pilih Sisip File’ 31 Gambar 3.13 Tampilan Proses Tombol ’Encode’ 32 Gambar 3.14 Tampilan Proses Tombol ’Decode’ 33 Gambar 4.1 Sinyal Asli,dan Sinyal yang dibagi kedalam beberapa Segmen 35 Gambar 4.2 Perbedaan Sampel pada File Asli dengan File

Watermark dengan Wavesound Editor 40


(12)

ABSTRAK

Watermarking merupakan salah satu bagian dari teknik pengamanan data yang saat ini mulai dikembangkan. Teknik ini adalah teknik penyembunyian data kedalam data lain sebagai host file dengan memanfaatkan kelemahan pada indera manusia, seperti mata pada pengolahan citra dan telinga pada pengolahan audio. Penelitian ini bertujuan untuk menghasilkan file audio MP3 dengan watermark (berkas teks) yang dapat digunakan untuk perlindungan hak cipta yang handal dan tahan terhadap pengolahan sinyal digital. Teknik Watermarking yang digunakan dalam penelitian ini adalah teknik perekayasaan fase sinyal pada audio yang dikenal dengan Phase Coding. Pada penelitian ini aplikasi dibuat dengan Visual Borland Delphi 7. Perlindungan hak cipta audio dengan Watermarking-Phase Coding menghasilkan audio yang tahan terhadap pengolahan sinyal digital tanpa merusak audio dan berkas teks yang telah disisipkan serta memiliki beda fase yang kecil antara sinyal asli dan sinyal yang dimodifikasi, sehingga perbedaan suara yang dihasilkan tidak terdeteksi oleh pendengaran manusia. Semakin tidak terdeteksi adanya watermarking maka semakin baik tingkat pengamanannya.


(13)

IMPLEMENTATION OF DIGITAL WATERMARKING IN AUDIO DIGITAL USING PHASE CODING METHOD

ABSTRACT

Digital watermarking is one part of the data security techniques that is beginning to be developed now. This is a technique of hiding data a host file into other data files by using the weaknesses of human senses, such as the eyes at the image processing and ears at audio processing. This research aims to produce MP3 audio files with watermark (text file) that can be used for copyright protection, reliable and resilient digital signal processing. Digital watermarking techniques that used in this study is the phase of engineering techniques in audio signals, known as Phase Coding. In this study, the applications mades by Visual Borland Delphi 7. Copyright protection in audio by Watermarking-Phase Coding produces resistant audio digital to signal processing without destroying the audio and text files that have been inserted and has a small difference phase between the original signal and the signal that modified, so the difference in the sound produced is not detectable by human hearing . When the watermark is less detected, then security level will getting better.


(14)

Bab 1

PENDAHULUAN

1.1.Latar Belakang

Perkembangan teknologi komputer saat ini telah membuat komputer memegang peranan yang penting dalam pergerakan hampir seluruh aspek kehidupan, baik itu untuk kebutuhan pribadi, pendidikan, perdagangan, fasilitas umum, hiburan, kesehatan dan lain sebagainya. Hal ini di karenakan penggunaan komputer lebih cepat, murah, dan praktis dalam pengolahan data dari pada pengolahan secara manual. Oleh karena itu pada saat ini, penggunaan data digital seperti teks, citra, audio dan video merupakan hal yang sangat lazim bahkan mungkin menjadi hal yang mutlak pada aspek – aspek tertentu. Kelebihan – kelebihannya yang mudah untuk diolah, diubah, mudah digandakan, dan didistribusikan menjadikan pengolahan data digital dianggap lebih efektif daripada pengolahan data secara manual walaupun dilapangan pengolahan data secara manual masih tetap digunakan sebagai dokumentasi.

Seiring dengan semakin banyaknya pemakaian data digital terutama audio seperti ring backtone, ringtone dan lain-lain, yang perkembangannya semakin meningkat maka proses pengolahan data digital tersebut juga semakin berkembang. Dengan perkembangan ini tentunya memberikan keuntungan tersendiri bagi para penggunanya. Namun apabila tidak diatur dengan baik pada pendistribusiannya maka dapat juga memberikan kerugian seperti data digital lebih mudah untuk dicuri, dirusak, dihilangkan, digandakan dan diubah dengan tanpa izin. Hal ini akan sangat merugikan bagi pihak-pihak yang berperan dalam pembuatan data digital tersebut, contohnya perusahaan label rekaman. Oleh sebab itu data digital hendaknya dilindungi dengan penerapan metode tertentu untuk menjamin keabsahan data digital tersebut. Salah satu metode yang mendukung perlindungan terhadap data digital adalah Watermarking.


(15)

Watermarking dapat diartikan sebagai suatu teknik penyembunyian data atau informasi yang diperlukan pemilik data ke dalam suatu data digital (dalam hal ini digunakan data audio) untuk ditumpangi.

Watermarking dapat digunakan dalam berbagai tujuan seperti otentikasi (mengidentifikasikan data digital yang telah mengalami perubahan dari aslinya), Identifikasi Lokasi (mengidentifikasikan isi dari data digital pada lokasi – lokasi tertentu), Anotasi (hanya digunakan untuk keterangan tentang data digital itu sendiri), dan Perlindungan hak cipta (menyembunyikan label hak cipta pada data digital sebagai bukti otentik kepemilikan karya digital tersebut).

1.2 Rumusan Masalah

1. Bagaimana menghasilkan audio yang terlindungi dari aktifitas penggandaan yang ilegal dan dapat dipantau pendistribusiannya dengan menggunakan Watermarking-Phase Coding.

2. Apakah Watermarking-Phase Coding cukup handal setelah dilakukan pengolahan sinyal terhadap berkas ter-watermak tanpa memiliki beda fase yang besar.

1.3 Batasan Masalah

Batasan masalah dalam dalam penulisan ini adalah:

1. Berkas terlebih dahulu akan di watermarking dengan menggunakan metode Phase Coding, berkas yang digunakan adalah berkas audio MPEG-1 Layer 3 dengan format *.mp3 yang akan disisipi oleh berkas teks (*.txt).

2. Berkas asli dan berkas ter-watermark akan dilakukan pengolahan sinyal seperti Resampling, penambahan derau, dan perubahan format dan akan dilihat jumlah bit yang terjadi pada berkas tersebut dan membedakannya.


(16)

3. Bahasa pemrograman yang dipakai adalah Visual Borland Delphi 7.0.

1.4 Tujuan Penelitian

Menghasilkan berkas audio ter-watermark yang dapat digunakan untuk perlindungan hak cipta yang handal dan memiliki ketahanan yang baik terhadap berbagai proses pengolahan sinyal audio atau tidak mengalami perubahan bentuk setelah mengalami berbagai pengolahan sinyal tersebut dan memiliki beda fase yang kecil antara sinyal asli dan sinyal yang dimodifikasi.

1.5 Manfaat Penelitian

Manfaat penelitian yaitu dengan watermarking-Phase Coding, berkas audio yang mulai banyak beredar di masyarakat dapat dikendalikan pendistribusiannya dan diketahui kepemilikan berkas tersebut dan memiliki ketahanan yang baik terhadap berbagai proses pengolahan digital.

1.6 Metodologi Penelitian

Langkah – langkah metodologi yang digunakan adalah sebagai berikut:

1. Pengumpulan Data

Pengumpulan data yang dilakukan adalah dengan Studi Literatur, yaitu menggunakan berbagai macam literatur dan referensi internet yang berhubungan dengan watermarking, audio, mp3, steganografi, phase coding dan yang mendukung penelitian ini.


(17)

Pada tahap ini dilakukan analisis terhadap berkas audio, kelemahan, dan keunggulannya serta permasalahan yang mungkin akan timbul jika audio di-watermarking dan solusi yang akan diambil sebagai pemecahan masalah

3. Perancangan Sistem

Pada tahap ini dirancang suatu sistem watermarking dengan menggunakan metode Phase Coding pada berkas audio .

4. Implementasi Sistem

Implementasi sistem ini dirancang kedalam sebuah bahasa pemrograman Visual Borland Delphi 7.0.

5. Pengujian Program

Untuk mengetahui sejauh mana tingkat keberhasilan program dan sejauh mana berkas ter-watermark yang dihasilkan handal terhadap pengolahan sinyal dengan memiliki beda fase yang kecil atau bahkan mendekati nol.

6. Penyusunan laporan dan penarikan kesimpulan

Menyusun laporan hasil analisis dan perancangan kedalam format tulisan akhir disertai penarikan kesimpulan

1.7 SISTEMATIKA PENULISAN

BAB 1 : PENDAHULUAN

Bab ini akan menjelaskan mengenai latar belakang pemilihan judul, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metode penelitian, dan sistematika penulisan.

BAB 2 : LANDASAN TEORI

Bab ini membahas mengenai teori-teori yang mendukung pembahasan mengenai audio, watermarking, phase coding dan Fast Fourier Transform.


(18)

Bab ini berisikan gambaran rancangan struktur program dan desain antarmuka, serta memberikan gambaran dari rancang bangun yang lengkap dan implementasinya dalam suatu program.

BAB 4 : ANALISIS MASALAH

Bab ini berisikan analisis permasalahan perlindungan audio dengan watermarking-phase coding dan ketahanan audio ter-watermark terhadap pengolahan sinyal yang dilakukan seperti resampling, penambahan derau, dan lain-lain.

BAB 5 : PENUTUP

Bab ini memuat kesimpulan isi dari keseluruhan uraian bab-bab sebelumnya dan saran-saran dari hasil yang diharapkan dapat bermanfaat dalam pengembangan selanjutnya.


(19)

Bab 2

LANDASAN TEORI

2.1 Audio

Suara atau bunyi adalah suatu gelombang longitudinal yang merambat melalui suatu medium, seperti zat cair, padat dan gas. Bunyi dapat terdengar oleh manusia apabila gelombang tersebut mencapai telinga manusia dengan frekuensi 20Hz – 20kHz , suara ini disebut dengan audiosonic atau dikenal dengan audio, gelombang suara pada batas frekuensi tersebut disebut dengan sinyal akustik. Akustik merupakan cabang fisika yang mempelajari bunyi. Level tekanan suara (volume suara) dihitung dalam desibel (dB), yaitu perhitungan rasio antara titik referensi yang dipilih dalam skala logaritmik dan level yang benar-benar dialami. Keras lemahnya bunyi atau tinggi rendahnya gelombang disebut dengan amplitudo. Bunyi mulai dapat merusak telinga jika tingkat volumenya lebih besar dari 85 dB dan pada ukuran 130 dB akan mampu membuat hancur gendang telinga.

Frekuensi adalah banyaknya gelombang yang mempunyai pola yang sama yang berulang pada interval tertentu selama 1 detik. Berdasarkan frekuensi, suara atau bunyi dibagi atas :

1. Infrasound yaitu suara pada rentang frekuensi 0Hz-20Hz. 2. Audiosound yaitu suara pada rentang frekuensi 20Hz-20kHz. 3. Ultrasound yaitu suara pada rentang frekuensi 20kHz-1GHz. 4. Hypersound yaitu suara pada rentang frekuensi 1GHz-10THz.

Menurut Yulid dan Fazmah (2006) , sinyal audio dibagi atas 3 bagian berdasarkan rentang frekuensinya :


(20)

2. Suara Wideband yaitu 50Hz-7000Hz. 3. Wideband audio yaitu 20Hz- 20000Hz.

2.1.1 Audio Digital

Gelombang suara analog tidak dapat langsung direpresentasikan pada komputer. Komputer mengukur amplitudo pada satuan waktu tertentu untuk menghasilkan sejumlah angka. Suara dikonversi menjadi arus listrik dengan menggunakan mikrofon. Kemudian mengkonversikan osilasi tekanan udara menjadi tegangan osilasi terus-menerus dalam sebuah rangkaian listrik. Perubahan tegangan cepat ini kemudian diubah menjadi serangkaian angka oleh digitizer. Sebuah digitizer bertindak seperti voltmeter digital yang sangat cepat Hal ini menjadikan ribuan pengukuran per detik. Setiap hasil pengukuran dalam jumlah yang dapat disimpan secara digital (hanya jumlah terbatas angka signifikan dari jumlah yang dicatat) disebut dengan sampel dan seluruh konversi suara ke serangkaian angka ini disebut sampling.

Gambar 2.1 Sampling sinyal kontinu.

Keterangan Gambar :Garis biru berubah sesuai dengan tegangan (misalnya, dari mikrofon), segmen merah sesuai dengan sampel.

Sampel suara diambil dan disimpan sebagai informasi digital dalam bit dan byte. Angka sampling adalah seberapa sering sampel diambil, disebut juga dengan frekuensi dan ukuran sampel adalah jumlah angka yang digunakan untuk merepresentasikan nilai dari tiap sampel. Contoh : jika kualitas CD Audio dikatakan memiliki frekuensi sebesar 44100 Hz, berarti jumlah sampel sebesar 44100 per detik, dan ukuran sampel 8-bit ,


(21)

berarti menyediakan 256 unit untuk menggambarkan rentang amplitudo dari potongan suara yang di tangkap.

Berdasarkan hal-hal yang tersebut diatas, banyak audio yang beredar dengan berbagai format yang memiliki karakteristik masing-masing, dan salah satunya adalah MPEG-1 Layer 3 atau dikenal MP3 yaitu berkas audio yang akan dibahas pada skripsi ini.

MP3 dikembangkan oleh seorang insinyur memakai pengkodean pengkodean berkas suara yang memiliki kompresi yang baik (meskipun bersifat lossy) sehingga ukuran berkas bisa memungkinkan menjadi lebih kecil, MP3 mengurangi jumlah bit yang diperlukan dengan menggunakan model psychoacoustic untuk menghilangkan komponen-komponen suara yang tidak terdengar oleh manusia.

MP3 yaitu berkas audio dengan karakteristik sebagai berikut : 1. Merupakan berkas dengan lossy compression.

2. Sering digunakan di internet karena ukurannya yang cukup kecil dibandingkan ukuran audio berkas yang tidak terkompresi.

3. Terdaftar pada badan standarisasi internasional pada tahun 1991, yaitu ISO / IEC 11172-3 dan ISO / IEC 13818-3.

4. Kompresi dilakukan dengan menghilangkan bagian-bagian bunyi yang kurang berguna bagi pendengaran manusia.

5. Kompresi mp3 dengan kualitas 128 bits 44000 Hz biasanya akan menghasilkan berkas berukuran 3-4 MB, tetapi unsur panjang pendeknya lagu juga akan berpengaruh.

6. Memiliki Bit Rate yang bervariasi. Bit Rate adalah suatu ukuran kecepatan transfer data dalam satuan waktu.( Lihat tabel 2.1)


(22)

Tabel 2.1 Nilai Bit Rate pada MPEG Bit V1,L1 V1,L2 V1,L3 V2,L1

0000 Bebas Bebas Bebas Bebas

0001 32 32 32 32

0010 64 48 40 48

0011 96 56 48 56

0100 128 64 56 64

0101 160 80 64 80

0110 192 96 80 96

0111 224 112 96 112 1000 256 128 112 128 1001 288 160 128 144 1010 320 192 160 160 1011 352 224 192 176 1100 384 256 224 192 1101 416 320 256 224 1110 448 384 320 256 1111 Buruk Buruk Buruk Buruk Keterangan Tabel :

V1 : MPEG-1

V2 : MPEG-2 dan MPEG-2.5 L1 : Layer 1

L2 : Layer 2 L3 : Layer 3

Bit Rate juga terbagi atas beberapa kategori yaitu: Variable bit rate (VBR) digunakan untuk mendapatkan tingkat kualitas yang tetap, Constant bit rate (CBR) digunakan untuk streaming server yang tidak ingin terganggu oleh Progressive Download (http), Unspecified bit Rate (UBR), dan Available bit Rate (ABR).


(23)

7. Nilai Sampling MPEG-1 Layer 3 (MP3) adalah 32Kbps, 44.1 Kbps dan 48Kbps.

Table 2.2 Nilai Sampling MPEG

Bits MPEG1 MPEG2 MPEG2.5 00 44100 22050 11025 01 48000 24000 12000 10 32000 16000 8000 11 reserv. reserv. reserv.

2.2 Digital Watermarking

Watermarking adalah suatu teknik dalam membantu pengamanan berkas-berkas digital dengan memberikan suatu tanda tertentu pada berkas tersebut untuk menunjukkan akan kepemilikkan dari berkas tersebut. Watermarking merupakan suatu bentuk steganografi yaitu ilmu yang mempelajari bagaimana menyembunyikan suatu data pada data yang lain.

Menurut Thanuja dan Nagaraj (2008), Digital watermarking adalah teknik penambahan sinyal kedalam sinyal digital pada dokumen digital, seperti teks, citra, audio maupun video. Apabila penambahannya pada sinyal audio maka disebut dengan Audio Watermarking.

Watermarking sudah ada sejak 700 tahun yang lalu. Pada akhir abad 13, pabrik kertas di Fabriano, Italia, membuat kertas yang diberi watermark atau tanda-air dengan cara menekan bentuk cetakan gambar atau tulisan pada kertas yang baru setengah jadi. Ketika kertas dikeringkan terbentuklah suatu kertas yang ber-watermark. Kertas ini biasanya digunakan oleh seniman atau sastrawan untuk menulis karya mereka. Kertas yang sudah dibubuhi tanda-air tersebut sekaligus dijadikan identifikasi bahwa karya seni diatasnya adalah milik mereka.

Ide watermarking ini akhirnya dikembangkan pada tahun 1990 di Jepang dan Swiss pada tahun 1993, Watermarking ini mulai digunakan sebagai salah satu tindak


(24)

pengamanan pada data yang semakin meluas penyebaran datanya dengan adanya tingkat penggunaan internet yang semakin tinggi.

Secara garis besar, berdasarkan penangkapan oleh indera manusia terhadap keberadaan watermark pada suatu berkas, watermarking terbagi atas :

1. Robust watermarking : Jenis watermark ini tahan terhadap serangan (attack), namun biasanya watermark yang dibubuhi ke dokumen masih dapat ditangkap oleh indera penglihatan atau pendengaran manusia.

2. Fragile watermarking : Jenis watermark ini akan mudah rusak jika terjadi serangan, namun kehadirannya tidak terdeteksi oleh indera manusia.

Suatu sistem watermarking yang ideal harus memenuhi karakteristik berikut ini yaitu :

1. Unobtrusiveness

Watermarking tidak dapat di deteksi secara langsung oleh indera manusia, karekteristik ini digunakan hanya pada watermark yang bersifat rahasia.

2. Handal / Kuat (Robustness )

Watermarking yang disisipkan tidak berubah walau data mengalami perubahan yang secara sengaja atau tidak sengaja, contoh kompresi, resampling, penambahan derau, dan lain-lain.

3. Universal.

Algoritma watermarking harus dapat digunakan untuk multimedia baik citra, audio, maupun video.

4. Tidak Ambigu.

Tidak menyebabkan pengidentifikasian media yang dilindungi menjadi membingungkan.

Secara umum metode digital watermarking pada audio terbagi dalam dua kelompok yaitu Domain Data (penyisipan dengan mengubah data audio yang disisipkan watermark) dan Domain Frekuensi (mengubah bagian dari spektrum sinyal).


(25)

Pembangunan suatu sistem watermarking membutuhkan suatu kunci watermark untuk dapat membuka kembali watermark yang telah ditambahkan, dan kunci watermark ini hanya diketahui oleh pihak yang berkepentingan seperti produser label dan sebagainya.

Gambar 2.2 Perancangan Sistem Watermarking

Penerapan Digital Watermarking langsung dapat diterapkan pada data digital tersebut atau menggunakan tranformasi ke dalam domain yang lain seperti domain waktu atau domain frekuensi. Berbagai transformasi yang dikenal dalam pengolahan sinyal digital seperti :

1. Transformasi Fourier

2. DCT (Discrete Cosine Transform) 3. Transformasi Wavelet, dan sebagainya.

Dalam matematika, Transformasi Fourier adalah operasi yang merubah suatu nilai kompleks fungsi variabel real kedalam bentuk yang lain. Pada pengolahan sinyal, transformasi ini bekerja pada domain waktu kemudian berkembang menjadi transformasi

Penambahan Watermark Pendeteksi

Watermark

Pengkodean Watermark

Dekode Watermark

Kunci Sinyal induk Kunci

Watermark Watermark

Derau

+ +

File Identitas File


(26)

yang merubah fungsi kedalam domain frekuensi. Ada beberapa konvensi umum untuk menentukan Transformasi Fourier dari suatu integral fungsi f: R C (Lihat Persamaan

2.1)

untuk setiap bilangan real ξ. (2.1) Variabel bebas x merepresentasikan waktu (dengan SI satuan detik), transformasi variabel ξ mewakili frekuensi (dalam hertz). Untuk kondisi yang sesuai, ƒ dapat direkonstruksi dari oleh Perubahan Invers (Persamaan 2.2)

.

untuk setiap bilangan real x. (2.2) Dalam studi deret Fourier, fungsi periodik ditulis sebagai jumlah matematis gelombang sederhana yang diwakilkan oleh sinus dan cosinus. Hal ini dikarenakan sifat sinus dan kosinus adalah untuk memulihkan jumlah masing-masing gelombang dalam penjumlahan dengan integral Dalam banyak kasus, diharapkan untuk menggunakan rumus Euler, yang menyatakan bahwa e2πiθ = cos 2 πθ + i sin 2 πθ ,untuk menulis deret Fourier dalam bentuk gelombang dasar e2πiθ. Ini memiliki keuntungan untuk menyederhanakan banyak rumus yang terlibat dan memberikan rumusan untuk deret Fourier

Tranformasi Fourier terbagi atas beberapa bagian, salah satunya adalah Discrete Fourier Transform yaitu merubah satu fungsi ke fungsi yang lain, dan merupakan representasi domain frekuensi dari fungsi asli. Tetapi DFT memerlukan masukan fungsi diskrit dan nilai selain nol yang memliki keterbatasan durasi. Input digunakan pada sampling fungsi kontinu, seperti fungsi gelombang suara manusia


(27)

2.2.1 Tujuan Watermarking

Watermarking digunakan untuk beberapa tujuan seperti : 1. Otentikasi.

Watermarking digunakan sebagai alat untuk mengidentifikasi atau menunjukkan bahwa data digital telah mengalami perubahan dari aslinya.

2. Pengidentifikasi Lokasi.

Watermarking digunakan untuk mengidentifikasi isi dari data digital pada lokasi-lokasi tertentu.

3. Anotasi.

Watermarking digunakan hanya sebagai keterangan tentang data digital itu sendiri. 4. Perlindungan Hak Cipta, yaitu menyembunyikan label hak cipta pada data.

2.2.2 Audio Watermarking

Audio Watermarking adalah teknik watermarking dengan audio sebagai berkas yang menjadi tumpangan. Berdasarkan domain penyisipannya, teknik watermarking audio dapat dibagi menjadi dua kelompok, yaitu temporal watermarking dan spectral watermarking. Temporal watermarking adalah melakukan penyisipan data pada audio host dalam domain waktu, sedangkan spectral watermarking terlebih dulu melakukan proses transformasi dari domain waktu ke dalam domain frekuensi, sehingga penyisipannya dilakukan pada elemen-elemen frekuensi.

Metode audio watermarking dibagi berdasarkan domain yaitu : 1. Domain waktu

Metode ini bekerja dengan cara mengubah data audio dalam domain waktu yang akan disisipkan watermark. Contohnya dengan mengubah LSB (Least Significant Bit) dari data tersebut. Secara umum metode ini rentan terhadap proses kompresi, transmisi dan encoding.


(28)

Beberapa teknik algoritma yang termasuk dalam metode ini adalah:

a) Compressed-domain watermarking : Pada teknik ini hanya representasi data yang terkompresi yang diberi watermark. Saat data di uncompressed maka watermark tidak lagi tersedia.

b) Bit dithering : Watermark disisipkan pada tiap LSB, baik pada representasi data terkompresi atau tidak. Teknik ini membuat derau pada sinyal.

c) Modulasi Amplitudo : Cara ini membuat setiap puncak sinyal dimodifikasi agar jatuh ke dalam pita-pita amplitudo yang telah ditentukan

d) Penyembunyian Echo: Dalam metode ini salinan-salinan terputus-putus dari sinyal dicampur dengan sinyal asli dengan rentang waktu yang cukup kecil. Rentang waktu ini cukup kecil sehingga amplitudo salinannya cukup kecil sehingga tidak terdengar.

2. Domain frekuensi

Metode ini bekerja dengan cara mengubah konten spektral dalam domain frekuensi dari sinyal seperti membuang komponen frekuensi tertentu atau menambahkan data sebagai derau dengan amplitudo rendah sehingga tidak terdengar. Beberapa teknik yang bekerja dengan metode ini:

a) Phase coding : Bekerja berdasarkan karakteristik sistem pendengaran manusia (Human Auditory System) yang mengabaikan suara yang lebih lemah jika dua suara itu datang bersamaan. Secara garis besar data watermark dibuat menjadi derau dengan amplitudo yang lebih lemah dibandingkan amplitudo data audio lalu digabungkan

b) Modifikasi Pita Frekuensi : Informasi watermark ditambahkan dengan cara membuang atau menyisipkan ke dalam pita-pita (band) spektral tertentu.

c) Penyebaran spektrum : metode ini diadopsi dari teknik penyebaran spektrum dalam telekomunikasi.

d) Frequency masking : metode ini memanfaatkan kelemahan pendengaran manusia yang tidak dapat mendengar pada frekuensi tertentu.


(29)

2.3 Phase Coding

Metode Phase coding adalah metode menyembunyikan data pada berkas induk yaitu audio, yang memanfaatkan kelemahan pada pendengaran manusia dengan menggantikan fase dari segmen awal audio dengan fase referensi yang merepresentasikan label watermark dan ditambahkan fase diferensial audio asli. Dengan cara ini, diferensial pengkodean dengan fase biner watermark diseimbangkan. Hal ini untuk membangkitkan aliran biner secara random yang membentuk gelombang digital (berbentuk bujur sangkar). Gelombang tersebut memiliki fase π/2 atau –π/2.

Langkah pertama dalam Phase coding adalah membagi urutan suara kedalam segmen pendek yang ditunjukkan pada gambar 2.1

Gambar 2.3 Sinyal Asli dan Sinyal yang dibagi beberapa segmen

Suatu Transformasi Fourier Diskrit (Discrete Fourier Transform) dihitung pada masing-masing panjang segmen N. Untuk masing-masing-masing-masing elemen hasil fase data dari DFT, hingga nilai N-1, menghitung susunan diferensial antara elemen fase yang berdekatan. Fase absolut dari sinyal data watermark ditambahkan pada pada diferensial, atau Fourier Diskrit pada langkah terakhir.

Langkah selanjutnya adalah dengan memasukkan data, dan mengatur nilainya sebagai fase absolut, kemudian fase absolut watermark di tambahkan pada Fourier Diskrit dari sinyal asli. Dan gabungkan kembali segmen-segmen yang telah dimodifikasi fasenya tersebut menjadi satu.

Setelah proses enkode diatas maka akan dilakukan proses dekode yaitui dengan melakukan sinkronisasi terhadap proses enkoding. Panjang segmen dan panjang watermark harus diketahui. Proses dekode memerlukan sinyal suara asli untuk melakukan


(30)

pendeteksian. Langkah-langkah pendeteksian watermark yang dilakukan adalah sebagai berikut :

1. Ambil n bagian pertama dari sinyal suara dimana n adalah panjang segmen enkode yang diketahui, s[0] ..s[n-1]. Perhitungan hanya dilakukan terhadap n elemen pertama sinyal karena data watermark disisipkan hanya di segmen awal sinyal suara asli. 2. Lakukan FFT terhadap n-1 sinyal tersebut, kemudian cari nilai fasenya (

φ

) sesuai

persamaan 2.3

   

= −

k k a b 1 tan

φ (2.3)

ak adalah nilai real dari FFT dan bk adalah nilai imaginer dari sinyal tersebut.

3. Konversi nilai fase yang didapatkan, π/2 menjadi bit 1 dan -π/2 menjadi bit 0 sebanyak panjang bit watermark. Hasil konversi nilai fase dibandingkan dengan nilai fase sinyal suara asli.

4. Didapatkan data bit-bit watermark sesuai dengan hasil konversi kemudian dibandingkan dengan bit-bit watermark asli untuk mengetahui kebenarannya.


(31)

File dengan Watermark

MP3 Hitung Jumlah

Frame yang dapat disisipkan

ENKODE

File Sisip (*.txt)

Kompresi

DEKODE Hitung Jumlah

Bit Data

MP3 File File Teks

Bab 3

PERANCANGAN SISTEM DAN IMPLEMETASI

3.1 Perancangan Sistem

Digital watermarking adalah suatu teknik penyembunyian berkas identitas (dalam hal ini berkas *.txt) pada sebuah data digital (seperti audio MP3) yang memiliki beberapa proses yang harus dilalui seperti pengkodean watermark, pengembalian watermark (dekode) dan lain-lain, sehingga diperlukan spesifikasi perangkat keras yang cukup tinggi untuk dapat menjalankan aplikasi ini.

Watermarking terbagi atas dua proses yaitu enkode dan dekode untuk mengambil berkas sisipan, perhatikan gambar 3.1.


(32)

(33)

(34)

Alur Proses pada phase coding untuk penyisipan teks atau enkode adalah sebagai berikut :

1. Merepresentasikan suara kedalam sinyal yang kemudian akan dibagi menjadi beberapa N segmen yang memiliki panjang yang sama yaitu L, kemudian dimasukkan kesuatu data array A[i], dimana 0<i<L-1

2. Menghitung nilai DFT pada masing-masing N segmen. 3. Hitung nilai fase dan amplitudo dari tiap-tiap segmen. 4. Hitung beda fase antara fase segmen yang berdekatan.

5. Fase absolut dari sinyal watermark ditambahkan kedalam beda fase yang dihasilkan sebelumnya. Sinyal watermark dengan panjang Lw, w[j], 0<j<Lw-1, disajikan sebagai bit 1 untuk gelombang π/2 dan bit 0 untuk gelombang - π/2.

6. Subtitusikan fase segmen awal dengan fase sinyal watermark yang telah diubah dalam bentuk bit tersebut.

7. Buat Matrik fase untuk N>0 dengan menggunakan beda fase untuk menjaga relativitas fase antara segmen suara.

8. Gabungkan segmen-segmen yang telah dibagi menjadi satu sinyal utuh dengan watermark yang telah disispkan. (Lihat Flowchart pada gambar 3.4)


(35)

(36)

(37)

Alur Proses pada phase coding untuk dekode adalah sebagai berikut :

1. Ambil n bagian pertama dari sinyal suara dimana n adalah panjang segmen enkoding yang diketahui, s[0] ..s[n-1]. Perhitungan hanya dilakukan terhadap n elemen pertama sinyal karena data watermark disisipkan hanya di segmen awal sinyal suara asli. 2. Lakukan FFT terhadap n-1 sinyal tersebut, kemudian cari nilai fasenya.

3. Konversi nilai fase yang didapatkan, π/2 menjadi bit 1 dan -π/2 menjadi bit 0 sebanyak panjang bit watermark. Hasil konversi nilai fase dibandingkan dengan nilai fase sinyal suara asli.

4. Didapatkan data bit-bit watermark sesuai dengan hasil konversi kemudian dibandingkan dengan bit-bit watermark asli untuk mengetahui kebenarannya.


(38)

(39)

3.2 Implementasi

Perangkat lunak dibuat dengan menggunakan Visual Borland Delphi 7. Data yang dibutuhkan dalam aplikasi ini adalah berkas audio yaitu *.mp3 dan berkas dokumen sebagai berkas yang akan disisipkan yaitu *.txt. Agar proses implementasi ini dapat bekerja dengan sempurna maka harus diuji untuk mengetahui kelemahan dan kesalahan yang ada untuk kemudian di evaluasi.

3.2.1 Implementasi Antarmuka

Aplikasi ini dibuat sesederhana mungkin sehingga memudahkan pengguna untuk memahami dan menggunakannya. Pada Aplikasi ini terdiri atas 2 Form dengan 1 unit untuk memproses aplikasi.


(40)

Gambar 3.8 Tampilan Form About

3.2.2 Tampilan Utama Aplikasi

Tampilan ini dirancang sedemikian rupa dimana tidak membutuhkan banyak form sehingga memudahkan pengguna untuk menjalankan aplikasi ini.

Tampilan ini terdiri atas beberapa komponen yang dapat di jalankan, yaitu : 1. Tombol ’ Pilih mp3’

Tombol ini memiliki fungsi untuk memilih berkas audio yang akan disisipkan oleh berkas identitas.

2. Tombol ’Mp3 info’

Tombol ini memiliki fungsi untuk Untuk melihat Informasi dari Mp3 tersebut. Informasi tersebut terdiri dari :

a. Versi Audio

b. Indeks Layer Audio

c. Protection bit yaitu ada tidaknya CRC pada berkas audio. d. Padding bit

e. Indeks Bit rate f. Indeks Sampling g. Ukuran Frame Awal


(41)

i. . Ukuran Frame Header Selanjutnya j. VBR

k. Nilai VBR l. Jumlah Frame

m. Jumlah Frame yang dapat di watermark 3. Tombol ’Ukuran Max Sisip’

Fungsi tombol ini adalah melihat ukuran maksimal frame yang dapat disisipkan. 4. Tombol ’Size after Encrypt + Compress’

Fungsi tombol ini adalah melihat berkas setelah di kompresi dan di-enkripsi. 5. Tombol ’Pilih File Sisip’

Fungsi tombol ini adalah memasukkan berkas sisip ke dalam memori aplikasi. 6. Tombol ‘Encode’

Fungsi tombol ini adalah menjalankan proses penyisipan berkas teks (*.txt) kedalam berkas MP3 (*.mp3).

7. Tombol ‘Pilih mp3_watermark’

Fungsi tombol ini adalah memasukkan berkas sisip ke dalam memori aplikasi. 8. Tombol ‘Decode’

Fungsi tombol ini adalah menjalankan proses pengembalian berkas *.txt dari berkas terwatermark.

9. Tombol ‘About’

Fungsi tombol ini adalah melihat hal tentang aplikasi. 10. Tombol ‘Clear Memo’

Fungsi tombol ini adalah membersihkan memo dari info mp3 yang sebelumnya. 11. EditText ‘FileName’

12. EditText ‘HiddenFile’ 13. EditText ‘HiddenLenght’ 14. EditText ‘HiddenFileExt’

15. EditText ‘Password’ adalah untuk memasukkan password yang akan di enkripsi. 16. EditText ‘Input File Terwatermark’;


(42)

3.2.2.1 Proses Enkode

Proses Enkode adalah proses yang dilakukan untuk menyisipkan berkas teks kedalam berkas audio sebagai berkas induknya.

Pada saat pertama sekali memasukkan berkas audio dan berkas teks yang akan disisipkan. Perhatikan pada mp3 info, jumlah frame dan bit frame yang dapat disispkan serta ukuran maksimal . Apabila nilai tersebut didapati maka tahap selanjutnya adalah mengisi password sebagai keamanan berkas tersebut yang akan di enkripsi, dan proses enkode dapat dijalankan. Gambar 3.9 menunujukkan kotak dialog untuk memilih MP3 yang akan disisipkan.


(43)

Gambar 3.10 Tampilan Proses Tombol ’ Mp3 info’

Gambar 3.10 merupakan hasil dari proses Mp3 Info yaitu informasi mengenai berkas audio yang telah dimasukkan dan yang akan disisipi.

Gambar 3.11 Tampilan Proses Tombol ’Ukuran Max Sisip’

Gambar 3.11 merupakan hasil dari proses perhitungan ukuran maksimum bit berkas audio yang dapat disisipi. Langkah-langkah perhitungan ukuran maksimum untuk dapat menyembunyikan teks pada audio adalah sebagai berikut :

1. Temukan header awal sebagai nilai variabel pos. 2. Tetapkan variabel hitung = 0; dan posNext = pos.


(44)

3. Selama posNext tidak sama dengan -1 maka lakukan proses dibawah ini . a. Pos = PosNext+36;

b. Temukan header selanjutnya dan subtitusikan nilainya menjadi nilai variabel posNext.

c. Jika posNetxt tidak sama dengan -1 maka

i. Untuk 0<i<L-2 , maka berkas dapat di watermark

ii. Jika berkas dapat diwatermark, posNext <> -1, dan bukan waktu pertama maka :

Variabel Hitung = Hitung + (pos – posNext) – 4.

Gambar 3.12 Tampilan Proses Tombol ’Pilih Sisip File’

Gambar 3.12 menunjukkan proses dari tombol ’Pilih Sisip File’ yaitu memunculkan kotak dialog untuk memilih berkas teks yang akan disisipi.


(45)

Gambar 3.13 Tampilan Proses Tombol ’Encode’

Gambar 3.13 menunjukkan proses dari tombol Encode yaitu memunculkan pemberitahuan bahwa data telah sukses dilakukan penyisipan dan menunjukkan lokasi berkas yang telah disisipi oleh teks.

3.2.2.2 Proses Dekode

Proses Dekode adalah proses yang dilakukan untuk mengembalikan berkas yang telah disisipkan.

Pertama sekali memasukkan berkas audio yang telah disisipkan. Isi Password pada kotak password yang disediakan, apabila password sama dengan password enkode maka proses enkode dapat dijalankan. Proses selanjutnya adalah memeriksa berkas audio tersebut , apakah merupakan berkas watermark atau tidak. Apabila telah terwatermark, maka proses dekode dapat dilakukan. Proses dekode dapat dilihat pada gambar 3.6.

Gambar 3.14 menunjukkan proses dari tombol Dekode yaitu memunculkan pemberitahuan bahwa data telah sukses dekode dan menunjukkan lokasi berkas teks yang menjadi berkas identitas audio.


(46)

Gambar 3.14 Tampilan Proses Tombol ’Decode’

3.3 Instalasi Aplikasi

Sebelum menjalankan aplikasi ini, maka terlebih dahulu lakukan intalasi Visual Borland Delphi 7.0 dan Tool seperti zlib123 dan dcpcrypt2-2009, untuk mendukung berjalannya aplikasi ini.


(47)

Bab 4

ANALISIS MASALAH

4.1 Analisis Masalah

Penggunaan data digital memberikan banyak kemudahan seperti pendistribusian yang murah dan mudah, penggandaan dan penyimpanan yang mudah, akan tetapi kemudahan-kemudahan tersebut menjadi kendala tersendiri bagi produsen-produsen data digital karena digunakan secara ‘negatif ‘ oleh orang yang tidak bertanggung jawab.

Perlindungan hak cipta terhadap data digital memang sudah menjadi perhatian orang-orang sejak dulu. Banyak cara yang sudah ditempuh untuk memberikan atau melindungi data digital, seperti: enkripsi, perlindungan penggandaan, visible marking, header marking, dan sebagainya, tetapi semua cara tersebut memiliki kelemahannya masing-masing.

Digital watermarking dikembangkan sebagai salah satu jawaban untuk menentukan keabsahan pencipta atau pendistribusi suatu data digital dan integritas suatu data digital. Teknik watermarking bekerja dengan menyisipkan sedikit informasi yang menunjukkan kepemilikan, tujuan, atau data lain, pada media digital tanpa mempengaruhi kualitasnya.

Dalam menyembunyikan pesan, ada beberapa kriteria yang harus dipenuhi.

1). Imperceptbility. Keberadaan pesan tidak dapat dipersepsi oleh indera manusia. Jika pesan disisipkan ke dalam sebuah audio, audio yang telah disisipi pesan haruslah tidak mendapati perbedaan antara suara asli dan suara yang telah disisipi pesan.


(48)

2). Fidelity. Mutu media penampung tidak berubah banyak akibat penyisipan. Perubahan yang terjadi harus tidak dapat dipersepsi oleh indera manusia.

3). Recovery. Pesan yang disembunyikan harus dapat diungkap kembali. Sewaktu-waktu informasi yang disembunyikan ini harus dapat diambil kembali untuk dapat digunakan lebih lanjut sesuai keperluan (Martharany Rumondang, 2002)

Dengan adanya kriteria diatas, maka digunakan suatu teknik watermarking Phase coding, dimana teknik ini memanfaatkan dari kelemahan-kelemahan manusia ketika mendengar suara bersamaan dengan menggabaikan suara dengan frekuensi terlemah. Teknik ini bergerak pada frekuensi domain, yaitu menggantikan fase dari segmen awal audio dengan fase referensi yang merepresentasikan label watermark dan ditambahkan fase diferensial audio asli. Dengan cara ini, diferensial pengkodean dengan fase biner watermark diseimbangkan. Teknik ini cukup efisien untuk perlindungan hak cipta dan pengendalian distribusi data dengan melihat teks yang disisipkan pada data tersebut yang menjadi identitas pada data aslinya, yang berisikan tentang info mengenai sumber-sumber data tersebut.


(49)

4.2 Pengujian Aplikasi

Pengujian perangkat lunak mp3_wm dilakukan dengan menggunakan perangkat keras yang memiliki spesifikasi sebagai berikut :

1. CPU : Intel Core2 duo Processor 2. HD : 160GB

3. Memori : 512 MB DDRAM

Pengujian yang akan dilakukan meliputi pengujian terhadap tiga hal, yaitu :

1. Kebenaran perangkat lunak, yang diukur dari kesesuaian watermark yang disisipkan dengan watermark hasil ekstraksi. Besarnya kesesuaian dihitung dalam persentase dengan membandingkan jumlah bit watermark yang berhasil diekstraksi dengan jumlah bit watermark yang asli.

2. Kinerja perangkat lunak yang diukur dari kecepatan penyisipan maupun pengekstraksian watermark. Pengujian ini dilakukan untuk mengetahui seberapa besar kinerja perangkat lunak yang dibangun

3. Ketahanan data terhadap pemrosesan berkas MP3. Pengujian dilakukan untuk mengetahui sejauh mana kesesuaian bit watermark hasil ekstraksi dengan bit watermark asli, jika berkas MP3 dimanipulasi.

Tabel 4.1 dan Tabel 4.2 menunjukan data-data yang diambil sebagai sampel untuk pengujian aplikasi, yaitu berkas audio yang diuji dan berkas teks sebagai berkas yang akan disisipkan.


(50)

Tabel 4.1 Berkas Audio yang di uji

No Nama Berkas Ukuran Data

Tipe Bitrate Sample Rate

Durasi

1 17. Melly Goeslow – Glow.mp3

4.72MB Stereo 192kbps 44kHz 0:03:36

2 16. Naima-SMS Aku.mp3

4.82MB Stereo 320kbps 44kHz 0:03:31

3 traditional.mp3 0.45MB Stereo 224kbps 32kHz 0:00:20 4 cow_02.mp3 0.02MB Mono 173kbps 48kHz 0:00:01

Tabel 4.2 Berkas Teks yang di uji

No Nama Berkas Ukuran

1 Sisip_label.txt 72B

2 Sorry.txt 1300B

Tabel 4.3 menunjukkan Hasil Pengujian terhadap aplikasi yang dibuat, dan tabel 4.4 merupakan hasil audio dari proses watermark tanpa adanya pengolahan sinyal digital.

Tabel 4.3 Hasil Pengujian Aplikasi

No Hasil Proses Ukuran

1 Pemutaran berkas MP3 sebelum disisipi watermark Berhasil 2 Pemutaran berkas MP3

sebelum disisipi watermark

Berhasil

3 Penyisipan sebuah watermark (.txt) ke dalam sebuah berkas MP3

Berhasil

4 Pemutaran berkas MP3 yang telah disisipi watermark Berhasil 5 Ekstraksi watermark dari berkas MP3 yang telah

disisipi watermark


(51)

Tabel 4.4 Berkas Watermark tanpa Pengolahan Sinyal

No MP3 No Txt Tipe Ukuran Data

Bitrate Sample Rate Durasi

1 1 Stereo 4.72MB 191kbps 44kHz 0:03:36 2 Stereo 4.72MB 191kbps 44kHz 0:03:36 2 1 Stereo 4.82MB 320kbps 44kHz 0:03:31 2 Stereo 4.82MB 320kbps 44kHz 0:03:31 3 1 Stereo 0.45MB 224kbps 32kHz 0:00:20 2 Stereo 0.45MB 224kbps 32kHz 0:00:20

4 1 Mono 0.03Mb 173kbps 48kHz 0:00:01

2 Gagal Gagal Gagal Gagal Gagal

Dilakukan pengujian terhadap beberapa 5 responden dalam mendengarkan audio (Lihat Lampiran B). Hal ini dilakukan untuk melihat apakah audio watermark yang dihasilkan dapat terdeteksi oleh indera manusia.

Tabel 4.5 Hasil Pengujian Watermark terhadap Indera Manusia

No Berkas Sebelum watermark Berkas Sesudah watermark Perbedaan

dengan audio asli Kualitas

Suara

Presentase Kualitas Suara

Presentase

1.1 Baik 80% Baik 80% Tidak Ada

1.2 Baik 80% Tidak Ada

2.1 Baik 80% Baik 80% Tidak Ada

2.2 Baik 80% Tidak Ada

3.1 Baik 90% Baik 90% Tidak Ada

3.2 Baik 90% Tidak Ada

4.1 Baik 90% Baik 90% Tidak Ada


(52)

Tabel 4.6 merupakan hasil analisis terhadap audio dengan perubahan format *.wav dengan menggunakan aplikasi tambahan yaitu RightMark Audio Analyzer 6.2.3.

Tabel 4.6 Analisis Audio dengan Perubahan Format *.wav Menggunkaan Aplikasi RightMark Audio Analyzer 6.2.3

Nama File FR NL DR THD ID SC IDN FRS

A

udi

o A

sl

i

17. Melly Goeslow – Glow.mp3

+17.81 -15.02

-16.8 16.9 8.392 96.06

2

-14.6 9.916 +7.6 -4.6 16. Naima-SMS Aku.mp3 +28.56

-21.37

-21.0 19.9 4.390 94.44

1

-28.5 554.6 60

+7.1 -7.1

traditional.mp3 Test Waveform was not recorded properly

cow_02.mp3 Test Waveform was not recorded properly

A u d io Wat er m ar k 1

17. Melly Goeslow –

Glow.mp3-watermarkSisip_Label.txt

+17.81 -15.02

-16.8 16.9 8.392 96.06

2

-14.6 10.45 2

+7.6 -4.6

16. Naima-SMS Aku.mp3 watermarkSisip_Label.txt

+28.56 -21.37

-21.0 19.9 4.390 94.44

1

-28.5 554.6 60

+7.1 -7.1 traditional.mp3

watermarkSisip_Label.txt

Test Waveform was not recorded properly

cow_02.mp3

watermarkSisip_Label.txt

Test Waveform was not recorded properly

A udi o Wat er m ar k 2

17. Melly Goeslow – Glow.mp3

watermarksorry.txt

+17.81 -15.02

-16.8 16.9 8.392 96.06

2

-14.6 10.82 6

+7.6 -4.6

16. Naima-SMS Aku.mp3 watermarksorry.txt

+28.56 -21.37

-21.0 19.9 4.390 94.44

1

-28.5 554.6 60

+7.1 -7.1 traditional.mp3

watermarksorry.txt

Test Waveform was not recorded properly


(53)

Gambar 4.2 : Perbedaan Sampel pada File Asli dengan File Watermark dengan Wavesound Editor

Dari gambar 4.2, dapat dilihat perubahan sinyal audio setelah disisipkan file teks dengan mendapatkan tambahan sinyal pada sinyal awal, dan perbedaan sinyal tersebut sangat kecil.

Penambahan Sampel pada segmen awal


(54)

Gambar 4.3 Pengujian dengan Sound Generator

Gambar 4.3 menunjukkan pengujian dengan menggunakan aplikasi Sound Generator, aplikasi ini bertujuan untuk melihat nilai frekuensi lemah, Amplitudo lemah, dan SNR (Signal Noise Ratio) pada audio.

Tabel 4.7 Hasil Pengujian terhadap Resampling

No Sampling rate Asal

Sampling Rate Baru

Sampling Rate Kedua

Hasil Ektraksi

1.1 44100Hz 48000Hz 32000Hz Baik

1.2 44100Hz 48000Hz 32000Hz Baik

2.1 44100Hz 48000Hz 32000Hz Baik

2.2 44100Hz 48000Hz 32000Hz Baik

3.1 32000Hz 48000Hz 32000Hz Baik

3.2 32000Hz 48000Hz 32000Hz Baik


(55)

Tabel 4.7 menunjukkan hasil pengujian terhadap audio pada saat diberikan sampling baru. Pengujian dengan menggunakan aplikasi Wavesound Editor dan didapatkan hasil ekstraksi baik yaitu tidak memiliki perbedaan yang besar terhadap audio awal sebelum dilakukan resampling.


(56)

Bab 5

PENUTUP

5.1. Kesimpulan

Berdasarkan pembahasan dan evaluasi dari bab-bab terdahulu dan teori yang ada maka dapat di tarik kesimpulan bahwa :

1. Watermarking dengan teknik phase coding merupakan teknik yang cukup handal dalam penyisipan file ke dalam suatu berkas MP3 karena teknik ini tahan terhadap pengolahan sinyal tanpa banyak mengubah file audio tersebut.

2. Kualitas suara yang dihasilkan oleh watermarking phase coding cukup baik, pendengar tidak merasakan adanya derau.

3. Kelemahan teknik ini adalah pada saat pegeksekusian awal membutuhkan waktu yang lama dibandingkan dengan file asli, karena penyisipan diletakkan pada segmen awal. 4. Enkode terhadap data yang dengan ukuran yang besar memakai waktu yang cukup

lama, karena penghitungan terhadap frame-frame yang ada.

5.3 Saran

Skripsi ini dilakukan untuk menerapkan teknik watermarking-phase coding sebagai salah satu teknik peningkatan pengaman terhadap penyaluran berkas audio dengan menggunakan Visual Borland Delphi 7.0. Aplikasi ini masih terdapat banyak kelemahan-kelemahan dimana dalam proses peng-eksekusiannya membutuhkan waktu yang cukup lama dan masih belum cukup memadai dalam memfasilitasi perlindungan hak cipta untuk data yang berukuran besar.


(57)

Oleh karena itu, diharapkan pada penelitian selanjutnya dapat menemukan metode watermarking yang handal yang dapat diterapkan pada data ukuran besar, dapat dilakukan pada seluruh berkas audio yang ada, serta penelitian lebih lanjut apakah watermark yang ada tidak dapat disisipi lagi dengan watermark metode lain.


(58)

DAFTAR PUSTAKA

Nedeljko, Cvejic. 5 Juli 2009. Introduction to Digital Audio Watermarking.

Fathony, Dean.2003. Digital Audio Watermarking Menggunakan Analisis Audio Content. http://www.informatika.org/~rinaldi/Kriptografi/2006-2007/Makalah1/Makalah1-085.pdf . Diakses : 5 Juli 2009.

Mikdam dan Marwan. 5 Juli 2009 Digital Audio Watermarking : Survey.

http://ducati.doc.ntu.ac.uk/uksim/ESM2003/Papers/Track-General/CS-16/paper%20CR.pdf.

Munir, Rinaldi.2004.Steganografi dan Watermarking. http://www.informatika.org/~rinaldi/Kriptografi/Steganografi%20dan%20Waterm arking.pdf. Diakses : 5 Juli 2009.

Prabawa, Arya.2009. Penerapan Digital Rights Management dan Watermarking pada lagu. http://www.informatika.org/~rinaldi/Kriptografi/2008-2009/Makalah1/MakalahIF30581-2009-a060.pdf. Diakses : 5 Juli 2009.

Rumondang,Martharany.2002. Perlindungan Hak Cipta Pada Data Audio Menggunakan Teknik Watermarking Phase Coding.

Robert, Eklund. 5 Juli 2009. Audio Watermarking Techniques. http://www.musemagic.com/papers/watermark.html.


(59)

Suhono dan Kuspriyanto.2000.”Watermarking sebagai Teknik Penyembunyian Label Hak cipta pada Data Digital”.Teknik Elektro Vol 6.hal. 19-27.Bandung: ITB.

Thanuja dan Nagaraj.Juli 2008.” Schemes for Evaluating Signal Processing Properties of Audio Watermarking”. IJCSNS International Journal of Computer Science and Network Security, VOL.8 No.7.hal 242-246.

Yulid dan Fazmah.Juni 2006.”Audio Wateramrking menggunakan Transformasi Kosinus Diskrit”.Jurnal Penelitian dan Pengembangan Telekomunikasi Vol 11.hal.30-36.


(60)

LAMPIRAN A : LISTING PROGRAM

program mp3_wm; uses

Forms,

Unit1 in 'Unit1.pas' {Form1}, uMP3 in 'uMP3.pas',

Unit2 in 'Unit2.pas' {AboutBox}; {$R *.res}

begin

Application.Initialize;

Application.Title := 'Watermark_Mp3'; Application.CreateForm(TForm1, Form1);

Application.CreateForm(TAboutBox, AboutBox); Application.Run;

end.


(61)

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, MPlayer, StdCtrls, uMP3, ExtCtrls, DCPcrypt2, DCPrc4, ZLibEx, DCPsha1, ComCtrls, Unit2, DCPblockciphers, DCPrijndael, jpeg,

ShellAPI, XPMan; type

TForm1 = class(TForm) txtFilename: TEdit; btnBrowse: TButton; OpenDialog1: TOpenDialog; btnFindFirst: TButton; txtHiddenFile: TEdit; btnBrowseHid: TButton; OpenDialog2: TOpenDialog; btnHide: TButton; txtHiddenLength: TLabeledEdit; txtHiddenFileExt: TLabeledEdit; txtFileResult: TLabeledEdit; btnBrowseSteg: TButton; OpenDialog3: TOpenDialog; btnReveal: TButton; txtPassword: TEdit; btnCheckSize: TButton; btnCheckMaxHidden: TButton; DCP_sha11: TDCP_sha1; GroupBox1: TGroupBox; Memo1: TMemo; btnClearMemo: TButton; btnAbout: TButton; DCP_rijndael1: TDCP_rijndael; MediaPlayer1: TMediaPlayer; TrackBar1: TTrackBar; XPManifest1: TXPManifest; Image1: TImage; Label1: TLabel; Timer1: TTimer;

procedure btnBrowseClick(Sender: TObject); procedure btnFindFirstClick(Sender: TObject); procedure btnClearMemoClick(Sender: TObject); procedure btnBrowseHidClick(Sender: TObject); procedure btnHideClick(Sender: TObject);

procedure btnBrowseStegClick(Sender: TObject); procedure btnRevealClick(Sender: TObject);

procedure btnCheckMaxHiddenClick(Sender: TObject); procedure btnCheckSizeClick(Sender: TObject); procedure btnAboutClick(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Image1Click(Sender: TObject); procedure btnHelpClick(Sender: TObject);


(62)

var DoDefault: Boolean);

procedure Timer1Timer(Sender: TObject); private

{ Private declarations }

function checkSizeAfter(filename: string; password: string): Integer;

function encryptAndCompress(filename: string; password: string): Boolean;

function decompressAndDecrypt(filename: string; password: string): Boolean;

public

{ Public declarations } end; var Form1: TForm1; EmbedFileResult: string; implementation {$R *.dfm}

//function to decompress and decrypt

function TForm1.decompressAndDecrypt(filename: string; password: string):

Boolean; var

SourceCrypt, DestCrypt, InputStream, OutputStream: TFileStream; DeCompressionStream: TZDecompressionStream;

begin

Result:=False; //decrypt try

SourceCrypt:= TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);

DestCrypt:= TFileStream.Create('tmpDecrypt.tmp.zip',fmCreate); DCP_rijndael1.InitStr(password,TDCP_sha1); // initialize the cipher with a hash of the passphrase

DCP_rijndael1.DecryptStream(SourceCrypt,DestCrypt,SourceCrypt.Size); // decrypt the contents of the file

DCP_rijndael1.Burn; DestCrypt.Free; SourceCrypt.Free; DeleteFile(filename); //Result:=True; except

MessageDlg('File IO error',mtError,[mbOK],0); end;

//decompress try

InputStream := TFileStream.Create('tmpDecrypt.tmp.zip', fmOpenRead or fmShareDenyNone);

OutputStream := TFileStream.Create(filename, fmCreate);


(63)

OutputStream.CopyFrom(DecompressionStream, 0); DecompressionStream.Free; OutputStream.Free; InputStream.Free; DeleteFile('tmpDecrypt.tmp.zip'); Result:=True; except

MessageDlg('File IO error',mtError,[mbOK],0); end;

end;

//function to encrypt and compress file

function TForm1.encryptAndCompress(filename: string; password: string): Boolean;

var

SourceCrypt, DestCrypt, InputStream, OutputStream: TFileStream; CompressionStream: TZCompressionStream;

begin

Result:=False; //compress try

InputStream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);

OutputStream := TFileStream.Create('tmpCrypt.tmp.zip', fmCreate); CompressionStream := TZCompressionStream.Create(OutputStream, zcMax); CompressionStream.CopyFrom(InputStream, InputStream.Size); CompressionStream.Free; //Result:=True; OutputStream.Free; InputStream.Free; except

MessageDlg('File IO error',mtError,[mbOK],0); end;

//crypt try

SourceCrypt:= TFileStream.Create('tmpCrypt.tmp.zip',fmOpenRead or fmShareDenyNone);

DestCrypt:=

TFileStream.Create('tmpCrypt.tmp'+ExtractFileExt(filename),fmCreate); DCP_rijndael1.InitStr(password,TDCP_sha1); //

initialize the cipher with a hash of the passphrase

DCP_rijndael1.EncryptStream(SourceCrypt,DestCrypt,SourceCrypt.Size); // encrypt the contents of the file

DCP_rijndael1.Burn; Result:=True;

DestCrypt.Free; SourceCrypt.Free; except

MessageDlg('File IO error',mtError,[mbOK],0); end;


(64)

end;

//function to check file size after encryption and compression function TForm1.checkSizeAfter(filename: string; password: string): Integer;

var

SourceCrypt, DestCrypt, InputStream, OutputStream: TFileStream; CompressionStream: TZCompressionStream;

begin

Result:=-1; //compress try

InputStream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);

OutputStream := TFileStream.Create('tmpCrypt.tmp.zip', fmCreate); CompressionStream := TZCompressionStream.Create(OutputStream, zcMax); CompressionStream.CopyFrom(InputStream, InputStream.Size); CompressionStream.Free; //Result:=OutputStream.Size; OutputStream.Free; InputStream.Free; except

MessageDlg('File IO error',mtError,[mbOK],0); end;

//crypt try

SourceCrypt:= TFileStream.Create('tmpCrypt.tmp.zip',fmOpenRead or fmShareDenyNone);

DestCrypt:= TFileStream.Create('tmpCrypt.tmp',fmCreate); DCP_rijndael1.InitStr(password,TDCP_sha1); // initialize the cipher with a hash of the passphrase

DCP_rijndael1.EncryptStream(SourceCrypt,DestCrypt,SourceCrypt.Size); // encrypt the contents of the file

DCP_rijndael1.Burn; Result:=DestCrypt.Size; DestCrypt.Free;

SourceCrypt.Free; except

MessageDlg('File IO error',mtError,[mbOK],0); end;

DeleteFile('tmpCrypt.tmp'); DeleteFile('tmpCrypt.tmp.zip'); end;

procedure TForm1.btnBrowseClick(Sender: TObject); begin

if (OpenDialog1.Execute) then begin

if FileExists(OpenDialog1.FileName) then begin

Memo1.Clear;

Mediaplayer1.Close;


(65)

txtFilename.Text:=OpenDialog1.FileName; Mediaplayer1.Open;

Trackbar1.Min := 0;

Trackbar1.Max := Mediaplayer1.Length; Trackbar1.Position := 0;

end; end; end;

procedure TForm1.btnFindFirstClick(Sender: TObject); var

pos, posNext: Integer; myRawHeader: TRawMP3Header; myHeaderArray: TMP3HeaderArray; begin

if FileExists(txtFilename.Text) then begin

Memo1.Clear;

pos:=FindFirstHeader(txtFilename.Text);

Memo1.Lines.Add('First header found at byte '+inttostr(pos)); myHeaderArray:=getMP3Header(txtFilename.Text, pos);

ParseHeaderArray(myHeaderArray, myRawHeader); //print result into memo

Memo1.Lines.Add('Audio

version='+inttostr(myRawHeader.AudioVersion));

Memo1.Lines.Add('Layer index='+inttostr(myRawHeader.LayerIdx)); Memo1.Lines.Add('Protection bit='+inttostr(myRawHeader.Protection)); Memo1.Lines.Add('Padding bit='+inttostr(myRawHeader.Padding));

Memo1.Lines.Add('Bit Rate Index='+inttostr(myRawHeader.BitrateIdx)); Memo1.Lines.Add('Sampling Rate

Index='+inttostr(myRawHeader.SamplingRateIdx));

Memo1.Lines.Add('Frame Size='+inttostr(frameSize(myHeaderArray))); posNext:=FindNextFrame(txtFilename.Text, pos, myHeaderArray); Memo1.Lines.Add('Next Header found at='+inttostr(posNext)); //print result into memo

myHeaderArray:=getMP3Header(txtFilename.Text, posNext); Memo1.Lines.Add('Frame Size='+inttostr(frameSize(myHeaderArray))); Memo1.Lines.Add('IsVBR='+inttostr(ord(isVBR(txtFilename.text)))); Memo1.Lines.Add('VBRPos='+inttostr(VBRPos(txtFilename.text))); Memo1.Lines.Add('Frame Count='+inttostr(frameCount(txtFilename.text)));

Memo1.Lines.Add('Frame Available to waterm Count='+inttostr( FrameAvailableToWatermCount(txtFilename.text, 10))); Memo1.Lines.Add('Frame Available to waterm Bytes='+inttostr( MaxWatermSize(txtFilename.text, 10)));

end else begin

MessageDlg('File does not exist!', mtError, [mbOK], 0); exit;

end; end;


(66)

procedure TForm1.btnClearMemoClick(Sender: TObject); begin

Memo1.Lines.Clear; end;

procedure TForm1.btnBrowseHidClick(Sender: TObject); begin

if (OpenDialog2.Execute) then begin

if FileExists(OpenDialog2.FileName) then begin txtHiddenFile.Text:=OpenDialog2.FileName; txtHiddenLength.Text:=inttostr(FileSize(OpenDialog2.FileName)); txtHiddenFileExt.Text:=ExtractFileExt(OpenDialog2.FileName); end; end; end;

procedure TForm1.btnHideClick(Sender: TObject); begin

if (txtPassword.Text='') then begin

messageDlg('Please fill the password', mtError, [ mbOK], 0);

exit; end;

if (not FileExists(txtFilename.Text)) or (not FileExists(txtHiddenFile.Text)) then

begin

messageDlg('Both file (mp3 source and hidden file) must exists', mtError, [

mbOK], 0); exit;

end;

EmbedFileResult:= extractFilePath(txtFilename.Text) + extractFileName(txtFilename.Text)+

'-watermark'+extractFileName(txtHiddenFile.Text)+extractFileExt( txtFilename.Text);

txtFileResult.Text:=EmbedFileResult;

if (encryptAndCompress(txtHiddenFile.Text, txtPassword.Text)) then begin

if (HideFile(txtFilename.Text,

'tmpCrypt.tmp'+ExtractFileExt(txtHiddenFile.Text), EmbedFileResult, 10)) then

begin

messageDlg('Embedded Watermark successful!'+#13+'Result file is '+EmbedFileResult, mtInformation, [mbOK], 0);

end else begin

messageDlg('Embedded failed!', mtError, [mbOK], 0); end;

end else begin

messageDlg('Failed to encrypt and compress!', mtError, [mbOK], 0); end;


(67)

end;

procedure TForm1.btnBrowseStegClick(Sender: TObject); begin

if (OpenDialog3.Execute) then begin

if FileExists(OpenDialog3.FileName) then begin

txtFileResult.Text:=OpenDialog3.FileName; end;

end; end;

procedure TForm1.btnRevealClick(Sender: TObject); var

resultName:string; begin

if (txtPassword.Text='') then begin

messageDlg('Please fill the password', mtError, [ mbOK], 0);

exit; end;

if (not FileExists(txtFileResult.Text)) then begin

messageDlg('Embedded-mp3 file does not exist!', mtError, [ mbOK], 0);

exit; end;

resultName:=DekodeFile(txtFileResult.Text); if (resultName<>'None') then

begin

//success dekode

//decompress and decrypt

if (decompressAndDecrypt(resultName, txtPassword.Text)) then begin

messageDlg('Dekode success!'+#13+'Hasil file is '+resultName, mtInformation, [mbOK], 0);

end else begin

messageDlg('Dekode failed!', mtError, [mbOK], 0); end;

end else begin

messageDlg('Dekode failed!', mtError, [mbOK], 0); end;

end;

procedure TForm1.btnCheckMaxHiddenClick(Sender: TObject); var

max: Integer; begin

if FileExists(txtFilename.Text) then begin


(68)

max:=trunc(MaxWatermSize(txtFilename.Text, 10));

messageDlg('Maximum file size to hide is '+inttostr(max), mtInformation, [

mbOK], 0);

btnCheckMaxHidden.Caption:='Max. Hidden Size='+inttostr(max); end

else begin

messageDlg('File does not exist ', mtError, [ mbOK], 0);

end; end;

procedure TForm1.btnCheckSizeClick(Sender: TObject); var

sizeAfter: Integer; begin

if (txtPassword.Text='') then begin

messageDlg('Please fill the password', mtError, [ mbOK], 0);

exit; end;

if (not FileExists(txtHiddenFile.Text)) then begin

messageDlg('File does not exist ', mtError, [ mbOK], 0);

exit; end;

sizeAfter:=checkSizeAfter(txtHiddenFile.Text, txtPassword.Text); messageDlg('Size after encryption and compression is

'+inttostr(sizeAfter), mtInformation, [ mbOK], 0);

btnCheckSize.Caption:='Size after encrypt+compress='+inttostr(sizeAfter); end;

procedure TForm1.btnAboutClick(Sender: TObject); begin

AboutBox.ShowModal; end;

procedure TForm1.Image2Click(Sender: TObject); begin

ShellExecute(Application.Handle, PChar('open'), PChar('http://achmadz.blogspot.com/'), PChar(0), nil, SW_NORMAL);

end;

procedure TForm1.Image1Click(Sender: TObject); begin

ShellExecute(Application.Handle, PChar('open'),

PChar('http://achmadz.blogspot.com/2008/05/hide-any-file-inside-mp3-file.html'), PChar(0),


(69)

nil, SW_NORMAL); end;

procedure TForm1.btnHelpClick(Sender: TObject); begin

ShellExecute(Application.Handle, PChar('open'), PChar('HELP.txt'), PChar(0),

nil, SW_NORMAL); end;

procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);

begin

if Button = btPlay then Timer1.Enabled := True; end;

procedure TForm1.Timer1Timer(Sender: TObject); begin TrackBar1.Position:=MediaPlayer1.Position; end; end. unit uMP3; interface uses

SysUtils, Windows, Messages, Classes,Dialogs; //mp3 header frame

type

TRawMP3Header = record AudioVersion, LayerIdx, Protection, BitrateIdx, SamplingRateIdx, Padding, PrivateBit, ChannelMode, ModeExt, Copyright, Original, Emphasis: Integer; end;

//array for mp3 header frame type

TMP3HeaderArray = array[0..3] of byte; //bitrate (bps) lookup table


(70)

const

bmpeg1: array[1..14, 1..3] of Word = ( (32, 32, 32), (40, 48, 64), (48, 56, 96), (56, 64, 128), (64, 80, 160), (80, 96, 192), (96, 112, 224), (112, 128, 256), (128, 160, 288), (160, 192, 320), (192, 224, 352), (224, 256, 384), (256, 320, 416), (320, 384, 448));

//sampling frequency(Hz) lookup table const

samplingRate: array[0..3] of integer = ( 44100,48000,32000,0);

//sampling per frame lookup table const

samplingPerFrame: array[1..3] of Integer = ( 1152, 1152, 384);

function FindFirstHeader(filename: string): Integer;

function FindNextFrame(filename: string; prevHeaderPos: Integer; prevHeader: TMP3HeaderArray): Integer;

procedure ParseHeaderArray(headerArray: TMP3HeaderArray; var RawHeader: TRawMP3Header);

function getMP3Header(filename: string; pos: Integer): TMP3HeaderArray; function frameSize(headerArray: TMP3HeaderArray): Integer;

function isVBR(filename: string): Boolean;

function isFirstFrame(filename: string; framePos: Integer): Boolean; function isAvailableToWaterm(filename: string; framePos: Integer; length:

Integer): Boolean;

function isWaterm(filename: string; framePos: Integer): Boolean; function FrameCount(filename: string): Integer;

function FrameAvailableToWatermCount(filename: string; length: Integer): Integer;

function MaxWatermSize(filename: string; length: Integer): Integer; function VBRPos(filename: string): Integer;

function FileSize(FileName : String) : Int64;

function HideFile(mp3File:string; hiddenFile: string; resultFile: string;

length: Integer): Boolean;

function DekodeFile(mp3File:string): string;

procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);

implementation

//function to get first frame position

function FindFirstHeader(filename: string): Integer; var

filemp3: File;

headerArray: array[0..3] of byte; count, pos: Integer;

begin

Result:=-1;

if FileExists(filename) then begin


(71)

AssignFile(filemp3, filename); FileMode:=fmOpenRead;

Reset(filemp3,1);

//looping sampai dapat header file pos:=0;

while not eof(filemp3) do begin

seek(filemp3, pos);

BlockRead(filemp3, headerArray, 4, count);

if ((headerArray[0]=$FF) and ((headerArray[1]=$FB) or (headerArray[1]=$FA))) then begin Result:=pos; break; end else begin pos:=pos+1; end; end; CloseFile(filemp3); end else begin exit; end; end;

//function to find next frame

function FindNextFrame(filename: string; prevHeaderPos: Integer; prevHeader: TMP3HeaderArray): Integer; var filemp3: File; count: Integer; posNow: Integer; headArray: TMP3HeaderArray; begin

Result := -1;

if FileExists(filename) then begin

AssignFile(filemp3, filename); FileMode:=fmOpenRead;

Reset(filemp3, 1);

posNow:=prevHeaderPos+FrameSize(prevHeader); while not eof(filemp3) do

begin

seek(filemp3, posNow);

BlockRead(filemp3, headArray, 4, count);

if ((headArray[0]=$FF) and ((headArray[1] and $E0)=$E0) and ((headArray[2] and $F0)<>$F0)) then

begin Result:=posNow; break; end else begin


(72)

posNow:=posNow+1; end; end; CloseFile(filemp3); end else begin exit; end; end;

//function for parsing mp3 header

procedure ParseHeaderArray(headerArray: TMP3HeaderArray; var RawHeader: TRawMP3Header);

begin

RawHeader.AudioVersion:=(headerArray[1] shr 3) and $3; RawHeader.LayerIdx:=(headerArray[1] shr 1) and $3; RawHeader.Protection:=(headerArray[1] and $1);

RawHeader.BitrateIdx:=(headerArray[2] shr 4) and $F; RawHeader.SamplingRateIdx:=(headerArray[2] shr 2) and $3; RawHeader.Padding:=(headerArray[2] shr 1) and $1;

RawHeader.PrivateBit:=(headerArray[2] and 1);

RawHeader.ChannelMode:=(headerArray[3] shr 6) and $3; RawHeader.ModeExt:=(headerArray[2] shr 4) and $3; RawHeader.Copyright:=(headerArray[2] shr 3) and $1; RawHeader.Original:=(headerArray[2] shr 2) and $1; RawHeader.Emphasis:=(headerArray[2] and 1);

end;

//function to get mp3 header of current pos

function getMP3Header(filename: string; pos: Integer): TMP3HeaderArray; var

filemp3: File;

headerArray: TMP3HeaderArray; count: integer;

begin

if FileExists(filename) then begin

AssignFile(filemp3, filename); FileMode:=fmOpenRead;

Reset(filemp3,1); seek(filemp3, pos);

BlockRead(filemp3, headerArray, 4, count); Result:=headerArray; CloseFile(filemp3); end else begin exit; end; end;

//function to find frame size

function frameSize(headerArray: TMP3HeaderArray): Integer; var

myRawMP3Header: TRawMP3Header; begin


(73)

ParseHeaderArray(headerArray, myRawMP3Header);

if samplingRate[myRawMP3Header.SamplingRateIdx] <> 0 then begin

Result:=trunc(((samplingPerFrame[myRawMP3Header.LayerIdx]/ 8) * (bmpeg1[myRawMP3Header.BitrateIdx][myRawMP3Header.LayerIdx] * 1000))/(samplingRate[myRawMP3Header.SamplingRateIdx] +

myRawMP3Header.Padding)); end;

end;

//function to check whether an mp3 is VBR or not function isVBR(filename: string): Boolean;

var

filemp3: File;

pos, n, count: Integer; buf: array[0..254] of Char; begin

Result:=false;

if FileExists(filename) then begin AssignFile(filemp3, filename); FileMode:=fmOpenRead; Reset(filemp3,1); pos:=FindFirstHeader(filename); seek(filemp3, pos);

BlockRead(filemp3, buf, 255, count); for n := 0 to 251 do

begin

if (buf[n] + buf[n + 1] + buf[n + 2] + buf[n + 3] = 'Xing') or (buf[n] + buf[n + 1] + buf[n + 2] + buf[n + 3] = 'Info') then

begin

Result := true; CloseFile(filemp3); Exit; end end; CloseFile(filemp3); end else begin exit; end; end;

//function to check if certain position is first frame

function isFirstFrame(filename: string; framePos: Integer): Boolean; begin

Result := (framePos = FindFirstHeader(filename)); end;

//function to check if a frame contain secret data

function isWaterm(filename: string; framePos: Integer): Boolean; var

filemp3: File;

pos, n, count: Integer; buf: array[0..254] of Char; begin


(1)

begin exit; end; end;

//funnction to hide file inside mp3

function HideFile(mp3File:string; hiddenFile: string; resultFile: string; length: Integer): Boolean;

var

posmp3, poshidden, posmp3old, n, m, posNext, len, i: Integer; buff1: byte;

firsttime, available: Boolean; key: string;

streamHidden, streamHasil: TFileStream; begin

//

Result:=False; firsttime:= True;

if (FileSize(hiddenFile)>MaxWatermSize(mp3File, length)) then begin

//exceed max size exit;

end;

CopyFile(PAnsiChar(mp3file), PAnsiChar(resultFile), False); //create 'key' (size and extension)

key:=inttostr(FileSize(hiddenFile))+'#'+extractFileExt( hiddenFile);

len:=strlen(PAnsiChar(key)); //open result file

streamHasil:=TFileStream.Create(resultFile, fmOpenReadWrite or fmShareDenyNone);

posmp3:=FindFirstHeader(resultFile); posmp3old:=posmp3;

posNext:=FindNextFrame(resultFile, posmp3, getMP3Header(resultFile, posmp3));

streamHasil.Seek(posmp3, soFromBeginning); //open 'to-be-hidden' file

streamHidden:=TfileStream.Create(hiddenFile, fmOpenRead or fmShareDenyNone);

poshidden:=0;

streamHidden.Seek(poshidden, soFromBeginning); n:=0;

posmp3:=posmp3+40; m:=streamHidden.Size;

//loop until all hidden file readed while (n<m) do

begin

poshidden:=n;

streamHidden.Seek(poshidden, soFromBeginning); streamHidden.Read(buff1, 1);


(2)

if (firsttime) then begin

if (isAvailableToWaterm(mp3File,posmp3old+36,length)) then begin

streamHasil.Seek(posmp3-4, soFromBeginning); streamHasil.WriteBuffer('XXXX', 4);

for i := 0 to len do begin

streamHasil.Write(Byte(key[i+1]), 1); end;

posmp3:=posNext+40; posmp3old:=posNext;

posNext:=FindNextFrame(resultFile, posmp3old, getMP3Header(resultFile,

posmp3old)); firsttime:=False; end else begin

posmp3old:=posNext;

posNext:=FindNextFrame(resultFile, posmp3old, getMP3Header(resultFile,

posmp3old)); posmp3:=posmp3old+40; end;

end;

available:=isAvailableToWaterm(mp3File,posmp3old+36,length); if ((available) AND (not firsttime)) then

begin

if ((posmp3-4)=(posmp3old+36)) then begin

streamHasil.Seek(posmp3-4, soFromBeginning); streamHasil.WriteBuffer('XXXX', 4);

streamHasil.Write(buff1, 1); posmp3:=posmp3+1;

end else begin

streamHasil.Seek(posmp3, soFromBeginning); streamHasil.Write(buff1, 1);

posmp3:=posmp3+1; end;

n:=n+1;

end else if ((not available) AND (not firsttime)) then begin

posmp3:=posNext; end;

if ((posmp3>=posNext) AND (not firsttime)) then begin

posmp3old:=posNext;

posNext:=FindNextFrame(resultFile, posmp3old, getMP3Header(resultFile,

posmp3old)); posmp3:=posmp3old+40; end;


(3)

streamHasil.Free; streamHidden.Free; Result:=True; end;

//function to get hidden file

function DekodeFile(mp3File:string): string; var

filemp3: File;

posmp3, posmp3old, n, count, posNext: Integer; buff1: byte;

firsttime:Boolean; res: string;

remaining, len: Integer; A: TStringList;

resultExt: string;

streamHasil: TFileStream; begin

//

Result:='None'; firsttime:=True; res:='';

remaining:=255;

A := TStringList.Create; //open mp3 file

AssignFile(filemp3, mp3File); FileMode:=fmOpenRead;

Reset(filemp3,1);

posmp3:=FindFirstHeader(mp3File); posmp3old:=posmp3;

posNext:=FindNextFrame(mp3File, posmp3, getMP3Header(mp3File, posmp3));

seek(filemp3, posmp3);

//get result file size and extension posmp3:=posmp3+40;

while (firsttime) do begin

if (isWaterm(mp3File,posmp3old)) then begin

//get it

seek(filemp3, posmp3);

BlockRead(filemp3, buff1, 1, count); res:=res+Char(buff1);

if (buff1=ord('.')) then begin

remaining:=3; end;

remaining:=remaining-1; if (remaining<0) then begin

firsttime:=False; break;


(4)

posmp3:=posmp3+1; end else begin posmp3:=posNext; end;

if (posmp3>=posNext) then begin

posmp3old:=posNext;

posNext:=FindNextFrame(mp3File, posmp3old, getMP3Header(mp3File, posmp3old));

posmp3:=posmp3old+40; end;

end;

Split('#', res, A); len:=strtoint(A[0]); resultExt:=A[1];

streamHasil:=TFileStream.Create(mp3File+resultExt, fmCreate or fmShareDenyNone);

posmp3:=posNext; posmp3old:=posmp3;

posNext:=FindNextFrame(mp3File, posmp3, getMP3Header(mp3File, posmp3));

n:=0;

posmp3:=posmp3+40; while (n<len) do begin

//

if (isWaterm(mp3File,posmp3old)) then begin

//get it

seek(filemp3, posmp3);

BlockRead(filemp3, buff1, 1, count); //write it

streamHasil.Write(buff1,1); n:=n+1;

posmp3:=posmp3+1; end else begin posmp3:=posNext; end;

if (posmp3>=posNext) then begin

posmp3old:=posNext;

posNext:=FindNextFrame(mp3File, posmp3old, getMP3Header(mp3File, posmp3old));

posmp3:=posmp3old+40; end;

end;

streamHasil.Free; CloseFile(filemp3);


(5)

end;

// return the exact file size for a file. Return zero if the file is not found.

function FileSize(FileName : String) : Int64; var

SearchRec : TSearchRec; begin

if FindFirst(FileName, faAnyFile, SearchRec ) = 0 then // if found

Result := Int64(SearchRec.FindData.nFileSizeHigh) shl Int64(32) + // calculate the size

Int64(SearchREc.FindData.nFileSizeLow) else

Result := 0;

//FindClose(SearchRec); // close the find

end;

//split string using specified delimiter

procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);

begin

Assert(Assigned(Strings)); Strings.Clear;

Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end;

end.

unit Unit2; interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, ShellAPI, jpeg;

type

TAboutBox = class(TForm) Panel1: TPanel;

OKButton: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;


(6)

Label5: TLabel;

procedure Image1Click(Sender: TObject); procedure ProgramIconClick(Sender: TObject); procedure OKButtonClick(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

AboutBox: TAboutBox; implementation

{$R *.dfm}

procedure TAboutBox.Image1Click(Sender: TObject); begin

ShellExecute(Application.Handle, PChar('open'), PChar('http://achmadz.blogspot.com/'), PChar(0), nil, SW_NORMAL);

end;

procedure TAboutBox.ProgramIconClick(Sender: TObject); begin

ShellExecute(Application.Handle, PChar('open'),

PChar('http://achmadz.blogspot.com/2008/05/hide-any-file-inside-mp3-file.html'), PChar(0),

nil, SW_NORMAL); end;

procedure TAboutBox.OKButtonClick(Sender: TObject); begin

exit; end; end.