1. Pendahuluan Dewasa ini kemajuan teknologi yang berjalan begitu cepat menuntut kemajuan di segala bidang. Berbagai bidang tidak lepas dari sentuhan teknologi termasuk juga bidang industri musik yang sangat lekat dalam kehidupan masyarakat Algoritma Genetika merupakan algoritma pencarian yang didasarkan pada mekanisme seleksi alamiah. Secara garis besar langkah dalam prosedur ini dimulai dengan menetapkan suatu set solusi potensial dan melakukan perubahan dengan beberapa iterasi dengan algoritma genetika untuk mendapatkan solusi terbaik. Set solusi potensial ini ditetapkan di awal dan disebut dengan kromosom. Kromosom ini dibentuk secara acak berupa susunan angka biner yang di-generate dan dipilih. Keseluruhan set dari kromosom yang diobservasi mewakili suatu populasi. Implementasi algoritma genetika sangatlah luas mencakup berbagai hal yang salah satunya adalah untuk pemrograman otomatis. Otomatisasi dapat dilakukan menggunakan algoritma genetika untuk mendapatkan solusi yang bisa diterima dengan lebih cepat. Adapun pemrograman otomatis yang dapat diterapkan adalah pemrograman otomatis dalam bidang musik sebagai pembangkit pola–pola baru. Salah satu media yang dibutuhkan saat ini yaitu audio midi. Segala bentuk audio yang berdata MIDI (Musical Instrument Digital Interface), dapat dengan mudah diolah. Hal yang paling susah didapat adalah saat menentukan irama pola drum yang sesuai dengan lagu yang akan dibuat. Tapi harus dengan pola drum yang baru agar dapat menjadi hasil karya seni yang tinggi dan diakui musikalitasnya. Berdasarkan latar belakang tersebut, maka akan dilakukan penelitian yang membahas perancangan dan pembuatan generator pola drum yang menggunakan algoritma genetika. Dengan tujuan merancang dan membangun aplikasi Generator Pola Drum menggunakan Algoritma Genetika. Aplikasi yang dibuat diharapkan dapat mempermudah proses pembuatan suatu pola untuk produksi audio drum berbasis midi, untuk pembuatan aransemen dan musik lagu, serta dapat berguna dan membantu user, terutama untuk para pencipta lagu atau komposer lagu dan aransemennya. 2. Tinjauan Pustaka Penelitian terkait penerapan algoritma genetika telah banyak dilakukan, baik yang membahas tentang musik, maupun kasus yang lain. Dalam tesis yang berjudul “Kriptosistem Menggunakan Algoritma Genetika Pada Data Citra“. Dalam penelitian tersebut, diciptakan algoritma kriptografi yang baru dengan menggunakan algoritma genetika [1]. Penelitian terdahulu tentang Generator Melodi Berdasarkan Skala dan Akord Menggunakan Algoritma Genetika, membahas tentang generator melodi dengan representasi kromosom nada dan durasi, fungsi fitness digunakan untuk nada, dan tempo tidak bisa diatur sesuai keinginan dan kebutuhan musik. Input skala dalam Melody Generator hanya bisa beberapa skala dalam sekali generate melodi. Aplikasi yang dibuat memberikan output berupa nada sesuai skala yang dibangkitkan saja (generate) [2]. Berdasarkan penelitian yang pernah dilakukan tentang generator melodi dan penggunaan algoritma genetika, maka akan dilakukan penelitian tentang generator pola drum yang menggunakan algoritma genetika. Dalam penelitian yang dilakukan lebih dititikberatkan untuk pola drum atau ketukan, sehingga representasi kromosom yang dibuat hanya untuk pola. Fungsi fitness ditentukan berdasarkan pola drum, dan digunakan untuk mengevaluasi pola drum, sedangkan untuk durasi didasarkan pada nilai ketukan drum sesuai tempo dan genre yang dipilih. Aplikasi didesain dengan 6 menggunakan tempo yang bisa diatur, sesuai tempo yang diinginkan, dan setiap input akan mewakili empat keluaran suara yang berbeda–beda dalam sekali generate. Aplikasi yang dibuat akan memberikan output dalam beberapa macam suara, yaitu Bass Drum, Accoustic Snare, Pedal Hit Hat, Crash Symbal. Algoritma Genetika Algoritma Genetika adalah algoritma yang memanfaatkan proses seleksi alamiah yang dikenal dengan proses evolusi. Dalam proses evolusi, individu secara terus-menerus mengalami perubahan gen untuk menyesuaikan dengan lingkungan hidupnya. “Hanya individu–individu yang kuat yang mampu bertahan”. Proses seleksi alamiah ini melibatkan perubahan gen yang terjadi pada individu melalui proses perkembang-biakan. Dalam algoritma genetika, proses perkembangbiakan menjadi proses dasar yang menjadi perhatian utama, dengan dasar berpikir: “Bagaimana mendapatkan keturunan yang lebih baik”. Algoritma genetika ditemukan oleh John Holland dan dikembangkan oleh David Goldberg. Algoritma genetika banyak diterapkan untuk mencari solusi terbaik dari suatu permasalahan. Algoritma genetika dimulai dengan kumpulan solusi yang merupakan satu atau lebih kromosom, dan kumpulan dari solusi disebut sebagai populasi. Kromosom sendiri merupakan kumpulan dari gen, dan nilainya dapat berupa bilangan numerik, biner, simbol, ataupun karakter, tergantung dari permasalahan yang dihadapi. Gambar 1 menunjukkan contoh kromosom yang berisi bilangan biner. Kromosom 1 1 1 0 1 0 0 0 1 0 Kromosom 2 0 0 1 1 0 1 0 1 0 Gambar 1. Kromosom Sebuah solusi dari populasi akan diseleksi untuk membuat populasi baru. Solusi tersebut diseleksi berdasarkan nilai fitness dari solusi tersebut. Nilai fitness adalah persentase keberhasilan sebuah solusi terhadap lingkungan sekitarnya. Proses seleksi yang dilakukan untuk memilih kromosom terbaik memiliki beberapa metode, di antaranya adalah : Roulette wheel selection Kromosom yang dipilih berdasarkan nilai fitness, semakin tinggi nilai fitness kromosom, semakin besar probabilitas kromosom tersebut dipilih. Sama halnya dengan permainan roulette, setiap kromosom akan menempati potongan lingkaran pada papan roulette berdasarkan nilai fitness. Untuk menghitung probabilitas kromosom yang dipilih dapat menggunakan rumus pada Persamaan 1. - (1) di mana, pi, probabilitas kromosom terpilih; fi, nilai fitness kromosom ke I; N, jumlah kromosom, dan Fj, jumlah nilai fitness keseluruhan. Metode Roulette wheel selection memiliki kelemahan, apabila nilai fitness sebuah kromosom mencapai 90%, maka probabilitas kromosom untuk terpilih semakin besar, dan mengurangi probabilitas kromosom lain untuk terpilih. tournament selection Metode tournament selection merupakan metode penyeleksian kromosom dari populasi dengan membandingkan nilai fitness kromosom–kromosom tersebut. Kromosom yang berhasil menang dalam tournament akan terpilih menjadi 7 kromosom terbaik dan menjadi kromosom parent untuk pembentukan populasi selanjutnya. rank selection Menutupi kelemahan pada roulette wheel selection, metode rank selection memberikan rank untuk setiap populasi, kemudian setiap kromosom akan mendapatkan nilai fitness berdasarkan rank pada populasinya. Kromosom terburuk akan mendapatkan rank 1, selanjutnya rank 2 dan sampai kromosom terbaik akan mendapat rank N dari jumlah populasi yang ada. Tetapi metode rank selection mengakibatkan pencarian kromosom terbaik membutuhkan waktu lebih lama. elitism Metode elitism menduplikasi setiap kromosom terbaik pada populasinya ke dalam populasi baru, sebelum dilakukan proses crossover dan mutasi. Oleh karenanya, setiap populasi baru akan memiliki kromosom terbaik dari populasi sebelumnya sehingga akan meningkatkan waktu pencarian kromosom terbaik. Pembentukan populasi baru membutuhkan 2 (dua) buah operator genetik, yaitu crossover dan mutasi. Sepasang solusi terbaik, atau dapat dikatakan sebagai parent, akan diseleksi dari populasi sebelumnya untuk pembentukan solusi baru atau child/ offspring dengan menggunakan operator crossover dan mutasi. Crossover adalah pemilihan gen kromosom parent secara acak untuk membentuk kromosom baru/offspring. Sebuah kromosom yang mengarah pada solusi bagus bisa diperoleh dari proses memindah silangkan dua buah kromosom [3]. Crossover dapat dilakukan dalam beberapa cara berbeda, salah satunya adalah pindah silang satu titik poin (one-point crossover) dimana titik potong dipilih secara acak. Gambar 2 merupakan contoh proses Crossover untuk membentuk kromosom baru. Kromosom 1 1 1 0 1 0 0 0 1 0 Kromosom 2 0 0 1 1 0 1 0 1 0 Offspring 1 1 1 0 1 0 1 0 1 0 Offspring 2 1 0 1 0 0 0 0 1 0 Gambar 2 Crossover Pada Kromosom Sedangkan operator mutasi merupakan proses pergantian gen kromosom dengan gen baru. Hal ini bertujuan untuk mencegah pencapaian solusi optimum lokal (convergensi premature) apabila kromosom yang dipilih cenderung memiliki nilai fitness tertinggi. Untuk menghindari convergensi premature dan tetap menjaga perbedaan (diversity) kromosom–kromosom dalam populasi, operator mutasi berperan dalam hal ini. Proses mutasi bersifat acak, sehingga tidak menjamin bahwa setelah proses mutasi akan diperoleh kromosom dengan nilai fitness yang lebih baik. Namun mutasi tetap memberikan harapan agar kromosom yang diperoleh tetap memberikan nilai fitness yang lebih baik dibanding generasi sebelumnya [3]. Mutasi menjadi kontroversi dalam penerapannya di dalam algoritma genetika karena sifatnya yang acak yang dapat menggangu kromosom yang diperoleh. Oleh karenanya, mutasi biasanya tetap digunakan dengan probabilitas yang rendah. Beberapa metode mutasi yang dapat digunakan sesuai kebutuhan : Mutasi dalam pengkodean biner, yaitu mengacak gen yang terpilih dengan melakukan intervensi dari 0 ke 1 dan sebaliknya. Gambar 3 merupakan contoh metode ini. 8 - Mutasi dalam pengkodean permutasi, yaitu dengan cara memilih dua posisi gen secara acak kemudian menukarkannya. Mutasi dalam pengkodean nilai, metode ini mirip dengan metode mutasi pengkodean biner, tetapi dilakukan penambahan atau pengurangan nilai pada gen yang terpilih, dengan nilai terkecil yang diambil secara acak. Offspring 1 1 1 0 1 0 1 0 1 0 Offspring 2 1 0 1 0 0 0 0 1 0 Offspring 1 baru 1 0 0 1 0 1 1 1 0 Offspring 2 baru 0 0 1 0 1 0 0 1 1 Gambar 3 Mutasi Pada Offspring Proses evolusi pada algoritma genetika akan terhenti ketika menemukan solusi terbaik, kondisi tersebut dinamakan terminasi. Namun, ada kalanya proses evolusi akan berjalan terus tanpa solusi terbaik. Untuk mengatasi hal tersebut, kondisi terminasi harus ditentukan, seperti berapa banyak iterasi maksimal yang dapat dilakukan dalam proses evolusi. Hal ini akan mempengaruhi solusi terbaik yang dipilih, jika proses iterasi mencapai batas maksimal, solusi akan diambil dari populasi yang ada, tetapi bila proses iterasi belum mencapai maksimal, maka solusi terbaik telah ditemukan. Pustaka JFugue JFugue adalah sebuah open-source Java API (Application Programming Interface) tanpa kompleksitas dari MIDI. JFugue merepresentasikan musik ke dalam bentuk bahasa pemrograman [4]. Gambar 4 merupakan contoh sederhana penggunaan JFugue. Gambar 4 Contoh Penggunaan Jfugue Pustaka JGAP JGAP (baca jay-gap) adalah salah satu pustaka java yang menyediakan komponen untuk pemrograman genetik dan algoritma genetik. JGAP menyediakan mekanisme genetik dasar yang dapat dengan mudah digunakan untuk menerapkan prinsip-prinsip evolusi untuk solusi masalah. Beberapa hal yang harus diketahui untuk menggunakan JGAP adalah : (1) Kromosom yang akan digunakan; (2) Penentuan nilai fitness; (3) Konfigurasi awal untuk objek; (4) Populasi awal untuk menemukan solusi; (5) Evolusi populasi. Peran JGAP hanyalah sebagai framework untuk pemrograman genetik dan algoritma genetik. Bagian terpenting pada algoritma genetik, yaitu nilai fitness harus tetap dibuat. Pada pustaka JGAP, pembuatan nilai fitness dilakukan dengan melakukan extendsclass yang akan digunakan untuk menentukan nilai fitness dengan classFitnessFunction dari pustaka JGAP (terlihat pada Gambar 5). Gambar 5 Pembuatan Nilai Fitness Menggunakan Pustaka JGAP 9 Setelah meng-extends class FitnessFunction, class tersebut wajib mengoverridemethodevaluate() dari class FitnessFunction yang akan mengembalikan nilai fitness dari kromosom. Selain membuat class untuk menentukan nilai fitness, pustaka JGAP juga membutuhkan konfigurasi awal untuk algoritma genetik. Konfigurasi awal dilakukan dengan membuat instance dari class Configuration. Konfigurasi awal pada JGAP dibutuhkan untuk memberikan nilai awal pada variabel–variabel yang akan digunakan dalam algoritma genetik. JGAP menyediakan konfigurasi default dengan memanggil classDefaultConfiguration() pada saat membuat instance dari classConfiguration (Gambar 6). Gambar 6 Konfigurasi Default Pada Pustaka JGAP Output File MIDI MIDI (Musical Instrument Digital Interface) merupakan sebuah standard yang diterima secara luas untuk pertukaran informasi tentang permainan musik secara digital [5]. Instrumen MIDI biasanya dapat mengirim sekaligus menerima perintah MIDI. Meski begitu ada juga instrumentMIDI tertentu yang hanya melakukan satu fungsi, yaitu hanya dapat mengirim atau hanya dapat menerima perintah MIDI saja. Instrument MIDI bisa dibagi menjadi 3 (tiga) kelompok berdasarkan interaksinya dengan perintah MIDI, yaitu: (1) Instrument MIDI yang dapat mengirim dan menerima perintah MIDI; (2) Instrument MIDI yang hanya dapat menerima perintah MIDI; dan (3) Instrument MIDI yang hanya dapat mengirim perintah MIDI. MIDI (Musical Instrument Digital Interface) merupakan sebuah standard yang diterima secara luas untuk pertukaran. Gambar 7 Proses Penerjemahan Data MIDI Teori Pola Musik Drum Teori musik drum yang dipakai dan diterapkan dalam aplikasi yang dibuat adalah mengacu pada genre lagu. Pada penelitian yang dilakukan, teori pola musik drum mengacu pada genre lagu yang sering dan umum digunakan dalam pembuatan lagu. Pola awal, sekaligus sebagai default pola, menggunakan sample teori musik style pada keyboard standart internasional. Kemudian ditulis dengan bahasa program sesuai simbol–simbol yang telah ditetapkan pada aplikasi. Tabel 1 menunjukkan contoh sample pola default pada genre lagu yang telah ditentukan Keterangan dari simbol pola drum ditunjukkan pada Tabel 2. Tabel 1 Pola Drum Sesuai Genre Pola O...OO.. ..*...*. ^^^^^^^^ !....... Genre Slow Rock O.O..O ...*.. ^^^^^^ !..... Chacha 10 Waltz Disco House Hard rock O..O..O.. .**.**.** ^^^^^^^^^ !........ O...O...O...O... ..*...*...*...*. .^.^.^.^.^.^.^.^ !.......!....... O.OO.O.OO.O.OO.O.OO. .*..*.*..*.*..*.*..* .^^.^.^^.^.^^.^.^^.^ !....!....!....!.... Tabel 2. Keterangan Simbol Pola Drum Simbol O * ^ ! . Suara Bass Drum Acoustic Snare Pedal Hit Hat Crash Symbal Rest 3. Metode dan Perancangan Sistem Metode Pengembangan Sistem Pada bagian ini akan menjelaskan tentang metode yang digunakan untuk perancangan sistem, yaitu Prototype Model, dan perancangan penerapan algoritma genetika dalam proses generator pola drum. Metode yang digunakan untuk perancangan aplikasi adalah Prototype Model. Prototype Model adalah metode pengembangan perangkan lunak yang memungkinkan adanya interaksi antara pengembang sistem dengan pengguna sistem, untuk mengurangi ketidakserasian antara pengembang dengan pengguna. Bagan prototype model dapat dilihat pada Gambar 8. Gambar 8. Bagan Prototype Model [6] 1. Tahapan penelitian berdasarkan prototype model, dijelaskan sebagai berikut : Listen to Customer Tahap awal ini merupakan tahap analisis kebutuhan pengguna. Pengguna yang dijadikan sebagai user adalah Bapak Iwan Santosa, selaku guru les musik drum pada salah satu lembaga musik Salatiga. Berdasarkan wawancara yang dilakukan, diperoleh informasi tentang kebutuhan sistem yang diharapkan oleh user, yang dapat dideskripsikan sebagai berikut : (1) User membutuhkan aplikasi untuk membuat pola suara drum baru; (2) Pola suara dapat diputar, sehingga dapat didengarkan untuk latihan; (3) Pola suara memiliki pengaturan tempo dan nilai ketukan untuk mengatur cepat lambatnya suara yang terbentuk.; (4) Pola drum yang sudah terbentuk dapat disimpan dengan file format midi agar dapat diolah kembali. 11 2. 3. Build Tahap selanjutnya adalah perancangan aplikasi dengan menggunakan metode algoritma genetika untuk membuat pola suara baru. Langkah pertama yang dilakukan adalah perancangan dengan metode algoritma genetika, perancangan UML (Unified Modelling Language) mengenai sistem yang- akan dibangun, perancangan user interface, dilanjutkan dengan pembuatan aplikasi menggunakan NetBeans IDE 7.0.1. Customer Test Tahap ini dilakukan dengan melakukan ujicoba aplikasi ke pengguna, yang bertujuan untuk evaluasi terhadap aplikasi yang dibangun. Proses ini terus berulang sampai aplikasi sesuai dengan kriteria pengguna. Analisis Sistem Dalam tahap ini dilakukan analisis terhadap sistem secara keseluruhan meliputi analisis input, analisis proses dan analisis output sistem yang dimodelkan dalam bentuk flowchart pada Gambar 9. Gambar 9. Flowchart Sistem Analisis Input Sistem memiliki beberapa bagian input, yang dijelaskan sebagai berikut : Kromosom; Kromosom yang digunakan dalam proses algoritma genetika terdiri dari data String yang berupa simbol–simbol suara instrument drum (terlihat pada Tabel 2). Jumlah gen di setiap kromosom bergantung pada pola genre untuk setiap jenis suara yang telah dibuat di dalam sistem. Jika sebuah pola genre terdiri dari 4 karakter untuk masing–masing suara, maka jumlah gen pada kromosom adalah 16. Populasi; Ukuran populasi pada sistem ditentukan berdasarkan input dari user, dengan tujuan user dapat mencari pola suara baru yang lebih beraneka ragam. Semakin besar ukuran populasi yang di-input-kan, semakin lama waktu yang dibutuhkan sistem untuk membuat pola suara drum baru. Probabilitas Selection; digunakan untuk persentase pengambilan kromosom yang akan digunakan untuk membuat populasi baru. Probabilitas Crossover; akan mempengaruhi keanekaragaman kromosom yang terbentuk karena semakin tinggi persentase kromosom, semakin besar kemungkinan dilakukan proses crossover pada kromosom. 12 Probabilitas Mutation; akan mempengaruhi persentase kromosom yang mengalami mutasi dalam populasi. Nilai probabilitas dihitung berdasarkan 1/x kromosom di mana nilai x akan mempengaruhi jumlah kromosom yang mengalami mutasi. Termination; Merupakan batas iterasi sistem untuk mencari pola baru. Iterasi ini dimaksudkan untuk mencegah proses pembuatan pola suara drum baru terlalu lama, karena proses evolusi populasi yang terjadi tidak menghasilkan kromosom yang sesuai. Tempo; Tempo ditentukan berdasarkan input dari user, untuk mengatur tempo lagu, pengaturan awal untuk tempo adalah 120 bpm (bars per minute). Bar; Bar mengatur banyaknya ketukan untuk pola suara yang dibentuk. Bar yang disediakan hanya 3/4 dan 4/4. Loop; Loop digunakan jika pola suara drum baru yang dihasilkan ingin dimainkan berulang kali. Loop pada sistem dibatasi sampai 100 kali. Analisis Output Output sistem berupa data String yang terdiri dari simbol-simbol suara instrument drum. Berdasarkan output tersebut, user dapat memainkannya, sehingga menghasilkan suara instrument drum. Output tersebut juga dapat di-export menjadi file suara berformat MIDI, sehingga dapat diolah dan dijalankan oleh aplikasi lain. Penerapan Algoritma Genetika Proses Pembentukan Kromosom Kromosom yang digunakan merupakan kumpulan array gen yang berupa data String. String yang digunakan merupakan simbol dari suara instrument drum, seperti terlihat pada Tabel 2. Karena pola suara drum memiliki lebih dari satu suara, maka representasi kromosomnya merupakan kumpulan dari array gen. Misalnya untuk pola suara drum dengan Genre Slow Rock, pola suara disusun seperti terlihat pada Tabel 3. Tabel 3. Pola Suara Drum Genre Slow Rock Suara Pola Index O...OO.. 0 Bass Drum 1 Acoustic Snare ..*...*. ^^^^^^^^ 2 Pedal Hithat !....... 3 Crash Symbal Masing–masing index suara pada Tabel 3, akan dimasukkan ke dalam gen. Index ke–i akan dimasukkan ke dalam gen[i], i = 0…N, dimana N = jumlah suara. Proses pembentukan kromosom baru untuk pembuatan populasi awal dalam bentuk flowchart, ditunjukkan pada Gambar 9. 13 Gambar 9. Flowchart Proses Pembentukan Kromosom Awal Sedangkan proses untuk pembuatan kromosom baru untuk setiap populasinya dilakukan dengan cara melakukan proses selection, crossover dan mutation terhadap kromosom dari populasi sebelumnya. Pustaka JGAP yang digunakan pada sistem ini menggunakan konfigurasi awal untuk melakukan proses tersebut, dijelaskan sebagai berikut : Proses selection menggunakan seleksi alam (natural selection) dengan nilai S (persentase kromosom) sebesar 90%, yaitu mengambil S kromosom terbaik untuk populasi selanjutnya berdasarkan nilai fitness-nya. Proses crossover dilakukan dengan menggabungkan gen dari dua buah kromosom secara acak dari masing–masing kromosom dan menggabungkannya menjadi kromosom baru. Proses crossover dilakukan dengan nilai P (probabilitas crossover) sebesar 35% dari populasi. Proses mutasi dilakukan dengan nilai M (kemungkinan mutasi) sebesar 12, artinya 1 dari 12 gen pada kromosom akan bermutasi. Gambar 10 merupakan flowchart untuk pembentukan kromosom baru berdasarkan proses selection, crossover dan mutasi. Gambar 10 Flowchart Proses Pembentukan Kromosom Baru 14 Proses Inisialisasi Populasi Proses pembuatan populasi awal (inisialisasi populasi) dilakukan dengan cara mengambil kromosom dari pembentukan kromosom awal. Sedangkan proses pembentukan populasi baru dilakukan dengan cara mengambil kromosom yang merupakan kromosom dengan nilai fitness tertinggi dari populasi sebelumnya. Gambar 10 merupakan flowchart proses pembentukan populasi baru, yang dapat dijelaskan sebagai berikut. Proses dimulai dengan menguji apakah populasi sekarang merupakan populasi awal, jika populasi awal maka akan dijadikan populasi baru, dan jika bukan populasi awal maka akan diambil kromosom dengan nilai fitness tertinggi menjadi populasi baru. Gambar 10 Proses Pembentukan Populasi Baru Evaluasi dan Fungsi Fitness Proses evaluasi nilai fitness pada kromosom dilakukan dengan menggunakan 2 (dua) fungsi, yaitu fungsi count symbol dan fungsi comparing symbol’s position. Sehingga, untuk mencari nilai fitness keseluruhan, dilakukan dengan mencari nilai rata–rata dari kedua fungsi. di mana f adalah nilai fitness keseluruhan. Fungsi Count Symbol Fungsi menghitung count symbol digunakan untuk membandingkan jumlah simbol antara kromosom awal dengan kromosom baru. Kromosom awal sebagai pembanding awal merupakan pola suara drum dari genre yang ditentukan. Proses membandingkan 2 (dua) kromosom tersebut, dilakukan pencarian simbol karakter di setiap pola suara awal dan pola suara baru. Perhitungan jumlah simbol dilakukan dengan pengecekan setiap karakter pada gen, jika karakter merupakan tanda istirahat/Rest yang disimbolkan sebagai karakter titik, maka jumlah simbol bertambah. Nilai kemiripan dihitung dengan mencari nilai absolute dari selisih antara jumlah simbol dua kromosom tersebut. Nilai kemiripan tertinggi adalah kromosom baru yang selisih simbolnya dengan kromosom awal mendekati 0. Sehingga didapatkan total nilai fungsi fitness adalah : 15 dimana, f(x), nilai fitness fungsi count symbol, fi, selisih kromosom awal dengan kromosom baru, N, jumlah suara instrument pada pola suara. Proses evaluasi fungsi Count Symbol dalam bentuk flowchart, dapat dilihat pada Gambar 11. Gambar 11 Flowchart Fungsi Fitness Count Symbol Fungsi Comparing Symbol’s Position Fungsi comparing symbol’s position merupakan fungsi untuk membandingkan simbol suara bass drum, acoustic snare dan crash symbal. Proses fungsi ini melakukan perbandingan untuk setiap karakter di gen. Misalkan jika suara bass drum terletak pada gen ke – 0 dengan panjang gen sebanyak i, maka untuk setiap karakter ke – i di gen ke – 0 akan dipasangkan dengan suara acoustic snare pada gen ke – 1, untuk mengecek apakah karakter pada masing–masing suara muncul atau tidak. Ketentuan perbandingan pada fungsi ini adalah sebagai berikut: Jika suara bass drum muncul dan suara acoustic snare tidak muncul maka nilai fitness fungsi bertambah 1. Jika suara bass drum muncul dan suara crash symbal muncul, maka nilai fitness fungsi bertambah 1. Jika suara acoustic snare muncul dan suara crash symbal tidak muncul, maka nilai fitness fungsi bertambah 1. Nilai fungsi fitness diakhiri dengan pembagian nilai fitness terhadap jumlah simbol suara yang dibandingkan. Proses fungsi Comparing Position’s Symbol dalam bentuk flowchart, dapat dilihat pada Gambar 12. 16 Gambar 12 Flowchart Fungsi Comparing Position's Symbol Kondisi Terminasi Kondisi terminasi ditandai dengan batas maksimum iterasi. Batas maksimum ini didapat dari input yang dimasukkan oleh user, setelah mencapai batas maksimum iterasi, sistem akan mencetak pola suara drum baru, yang diambil dari kromosom dengan nilai fitness terbaik. Perancangan Sistem Spesisifikasi Perangkat Lunak dan Perangkat Keras Spesifikasi perangkat lunak sistem, adalah sebagai berikut : Java SE 6 Update 18; Netbeans IDE 7.0.1 Sebagai software pembantu untuk membuat program dan desain antar muka; Pustaka JFugue 4.0.2 sebagai pustaka untuk membunyikan musik String dan melakukan export ke dalam bentuk format file MIDI; Pustaka JGAP 3.6 sebagai pustaka framework untuk pemrogram genetika dan algoritma genetika java. Spesifikasi perangkat keras sistem adalah sebagai berkut : Intel Core 2 Duo 2.2 GHz; RAM 1.00 GB; HardDisk 160 GB Use Case Diagram Rancangan use case diagram pada sistem, ditunjukkan pada Gambar 13. Export ke MIDI <<extend>> <<extend>> User Buat Pola Suara Baru <<extend>> Main Berhenti Gambar 13 Use Case Diagram Sistem 17 Use case diagram sistem pada Gambar 13, menggambarkan interaksi antar user dengan sistem. Pada sistem ini, user dapat membuat pola suara baru, kemudian dari suara baru yang telah dibuat, user dapat memainkan, menghentikan dan export ke format file MIDI. Class Diagram Rancangan class diagram pada sistem dapat diuraikan menjadi 2 (dua) package sebagai berikut. Package tools Gambar 15 Class Diagram Package Tools ClassGenre merupakan class yang menyimpan genre pola suara drum. Pada kelas ini terdapat 2 (dua) atribut, yaitu : nama, untuk menyimpan nama genre, dan pola, untuk menyimpan String pola genre ClassFitnessValue berfungsi untuk menghitung nilai fitness pada kromosom dari setiap populasi.Class ini memiliki method : evaluate, methodevaluate berguna untuk menghitung dan akan mengembalikan nilai berupa nilai fitness; dan countSimbolPola, method ini digunakan untuk menghitung jumlah simbol yang sama pada kromosom. ClassPolaDrums berfungsi untuk memproses algoritma genetika dalam membuat pola suara drum baru. Class ini terdiri dari method : create : methodcreate digunakan untuk mengatur konfigurasi awal pada algoritma genetika menggunakan pustaka JGAP. generate : methodgenerate digunakan untuk evolusi populasi mencari pola suara baru sampai batas maksimal evolusi. outputSolution : methodoutputSolution digunakan untuk mencetak kromosom terbaik dari populasi. ClassSoundPlayer berfungsi untuk mengubah musikString menjadi suara dengan pustaka JFugue.Class ini terdiri dari method : setPattern : method yang digunakan untuk men-setpattern musik String untuk dimainkan. playMusic : method ini digunakan untuk memainkan pattern musik String yang telah di set. 18 - stopPlayer : method ini digunakan untuk menghentikan musik String yang sedang dimainkan. run : method yang di-override jika menggunakan pustaka JFugue untuk memainkan musik String. ClassDrumGenerator merupakan userinterface sistem. Userinterface hanya terdiri dari satu form utama untuk menampilkan pola suara drum baru, dengan field untuk proses input user seperti populasi, maksimum iterasi, bar, nilai ketukan, dan genre suara drum. 4. Hasil dan Pembahasan Pembahasan Kode Program Aplikasi dibuat menggunakan java dengan software NetBeans IDE 7.0.1 dengan JDK 1.6u18. Kode Program 1 Method Evaluate() Untuk Perhitungan Nilai Fitness 1. 2. 3. protected double evaluate(IChromosome ic) { String[] polaBaru = new String[4]; //0 = bass drum, 1 = acoustic snare, 2 = pedal hithat, 3 = crash symbal 4. polaBaru[0] = (String) ic.getGene(0).getAllele(); 5. polaBaru[1] = (String) ic.getGene(1).getAllele(); 6. polaBaru[2] = (String) ic.getGene(2).getAllele(); 7. polaBaru[3] = (String) ic.getGene(3).getAllele(); 8. fitnessValue = (fitnessCountSymbol(polaBaru) + comparingSymbol(polaBaru)) / 2; 9. return fitnessValue; 10. } Kode Program 1 menunjukkan kode program method evaluate untuk perhitungan nilai fitness. Penentuan nilai fitness dengan pustaka JGAP membutuhkan sebuah class yang merupakan extends dari class FitnessFunction pada pustaka JGAP, dan class tersebut akan mengimplementasikan method evaluate yang digunakan untuk menghitung nilai fitness. Baris ke – 2 s/d 7 digunakan untuk menyimpan kromosom dari populasi ke dalam array String polaBaru. Baris ke – 8 merupakan perhitungan nilai fitness kromosom yang ditampung di variabel double fitnessValue dengan memanggil fungsi fitnessCountSymbol dan comparingSymbol untuk menghitung nilai fitness kromosom. Baris ke – 9 akan mengembalikan nilai fitness kromosom tersebut. Kode Program 2 Pembuatan Pola Suara Drum 1. 2. 3. 4. 5. 6. 7. public String generate(int popSize, int maxEvolve) throws InvalidConfigurationException { Genotype population; population = create(popSize); population.evolve(maxEvolve); String _str = outputSolution(population); return _str; } Kode Progam 2 merupakan method untuk membuat pola suara baru. Baris ke – 2 dan 3 adalah pembentukan populasi awal sesuai dengan ukuran populasi yang telah ditentukan. Baris ke – 4 merupakan proses pembentukan populasi dengan memanggil method evaluate() yang memiliki parameter maxEvolve sebagai batas maksimum evolusi. Kemudian, kromosom terbaik akan ditampung ke dalam String _str yang didapatkan dengan memanggil method outputSolution. 19 Kode Program 3 Konfigurasi Parameter Algoritma Genetika pada JGAP 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. private Genotype create(int popSize) throws InvalidConfigurationException { Configuration.reset(); Configuration conf = new Configuration(); conf.setBreeder(new GABreeder()); conf.setRandomGenerator(new StockRandomGenerator()); conf.setEventManager(new EventManager()); BestChromosomesSelector bestChromsSelector = new BestChromosomesSelector(conf, 0.90d); bestChromsSelector.setDoubletteChromosomesAllowed(true); conf.addNaturalSelector(bestChromsSelector, false); conf.setMinimumPopSizePercent(0); conf.setSelectFromPrevGen(1.0d); conf.setKeepPopulationSizeConstant(true); conf.setFitnessEvaluator(new DefaultFitnessEvaluator()); conf.setChromosomePool(new ChromosomePool()); conf.addGeneticOperator(new CrossoverOperator(conf, crossOverRate)); conf.addGeneticOperator(new MutationOperator(conf, mutationRate)); 17. FitnessFunction myFunc = new FitnessValue(pola); 18. 19. conf.setFitnessFunction(myFunc); Gene[] stringGene1 = new Gene[4]; 20. stringGene1[0] = new StringGene(conf, pola[0].length(), pola[0]); 21. stringGene1[1] = new StringGene(conf, pola[1].length(), pola[1]); 22. stringGene1[2] = new StringGene(conf, pola[2].length(), pola[2]); 23. stringGene1[3] = new StringGene(conf, pola[3].length(), pola[3]); 24. 25. 26. 27. 28. 29. pola[0].length(), pola[1].length(), pola[2].length(), pola[3].length(), IChromosome sampleChromosome1 = new Chromosome(conf, stringGene1); conf.setSampleChromosome(sampleChromosome1); conf.setPopulationSize(popSize); Genotype population = Genotype.randomInitialGenotype(conf); return population; } Kode Program 3 menunjukkan konfigurasi parameter Algoritma Genetika pada JGAP. Secara umum, JGAP menyediakan konfigurasi default dengan membuat instance dari class DefaultConfiguration(). Namun, JGAP juga menyediakan kemampuan untuk membuat konfigurasi manual agar parameter Algoritma Genetika bersifat dinamis dengan membuat instance dari class Configuration. Baris ke – 7 s/d 9 merupakan konfigurasi untuk proses selection pada kromosom. Objek dari class BestChromosomesSelector akan mengatur persentase banyaknya kromosom yang akan diambil dari populasi. Baris ke – 8 adalah pengaturan untuk kromosom yang digunakan, jika bernilai true, maka kromosom yang sama diperbolehkan untuk ditambahkan ke dalam populasi. Baris ke – 9 menambahkan natural selection pada konfigurasi JGAP. Kode Program 4 Proses Export Pola Suara ke File MIDI 1. Player player = new Player(); 2. player.saveMidi(soundPlayer.pattern, file); Kode Program 4 merupakan cara untuk meng-export pola suara menjadi file MIDI. Jfugue menyediakan fungsi untuk melakukan proses tersebut dengan memanggil method saveMidi dari class Player. Method ini membutuhkan parameter berupa pattern dari pola suara dan file tujuannya. 20 Pengujian Sistem Berdasarkan Parameter Algoritma Genetika untuk Pembuatan Pola Baru Pengujian sistem dilakukan terhadap beberapa parameter algoritma genetika untuk melihat pengaruhnya terhadap pola suara drum hasil generate. Uji Coba Parameter Population Size. Pengujian dilakukan sebanyak 30 kali ke setiap populasi yang diuji dengan menghitung rata–rata nilai fitness yang dihasilkan. Adapun pengujian dilakukan dengan nilai parameter population size berbeda–beda, sedangkan parameter lainnya tetap, agar dapat dilihat perbedaan yang terjadi. Parameter lainnya berisikan data sebagai berikut : (1) Genre Slow Rock; (2) Maksimum evolusi sebesar 10; (3) Natural selection rate sebesar 90%; (4) Crossover rate sebesar 35%; (5)Mutation rate sebesar 1/12. Pengujian dilakukan sebanyak 3 kali dengan population size masing–masing 1, 10 dan 100. Hasil uji coba parameter disajikan pada Tabel 4. Data Ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Total Rata–rata Tabel 4 Pengujian Population Size Sebesar 1, 10 dan 100 Persentase Nilai Fitness Population Size 1 Population Size 10 Population Size 100 78.125 100 100 53.125 98.4375 100 68.75 100 100 98.4375 98.4375 100 93.75 100 100 65.9375 100 100 87.5 100 100 87.5 100 100 87.5 98.4375 100 98.4375 98.4375 100 79.4642 92.1875 100 77.9017 93.75 100 79.0625 98.4375 100 92.1875 95.3125 100 73.2142 95.3125 100 64.0625 93.75 100 89.0625 100 100 87.5 93.75 100 98.4375 93.75 100 79.6875 100 100 75.3125 100 100 85.9375 98.4375 100 75.0 98.4375 100 81.25 95.3125 100 67.1875 100 100 76.3888 98.4375 100 93.75 100 100 66.8402 95.3125 100 72.3958 100 100 84.1517 98.4375 100 2417.857 2934.375 3000 80.59522 97.8125 100 Berdasarkan hasil pengujian pada Tabel 4, didapatkan hasil rata–rata fitness dengan population size 1 sebesar 80.59522, population size 10 sebesar 97.8125, population size 100 sebesar 100, dan dapat disimpulkan bahwa semakin besar nilai population size, semakin besar kemungkinan nilai fitness optimum. Uji Coba Parameter Maksimum Evolusi Pengujian Parameter Maksimum Evolusi dilakukan sebanyak 30 kali ke setiap populasi yang diuji, dengan menghitung rata–rata nilai fitness yang dihasilkan. Adapun pengujian dilakukan dengan nilai parameter maksimum evolusi yang berbeda-beda, sedangkan parameter lainnya tetap agar dapat dilihat perbedaan yang terjadi. Parameter lainnya berisi data sebagai berikut : (1) Genre Slow Rock; (2) 21 Population size sebesar 10; (3)Natural selection rate sebesar 90%; (4)Crossover rate sebesar 35%; (5)Mutation rate sebesar 1/12. Pengujian dilakukan sebanyak 3 kali dengan maksimum evolusi masing– masing 1, 10 dan 100. Hasil uji coba parameter Maksimum Evolusi disajikan pada Tabel 5. Data Ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Total Rata – rata Tabel 5 Pengujian Maksimum Evolusi Sebesar 1, 10 dan 100 Persentase Nilai Fitness Maks. Evolusi 1 Maks. Evolusi 10 Maks. Evolusi 100 82.8125 95.3125 100 89.0625 100 100 93.75 92.1875 100 93.75 100 100 92.1875 98.4375 100 89.0625 100 100 92.1875 98.4375 100 93.75 93.75 100 92.1875 100 100 93.75 95.3125 100 86.6071 100 100 93.75 100 100 87.5 100 100 88.4375 98.4375 100 98.4375 98.4375 100 98.4375 93.75 100 95.3125 100 100 95.3125 100 100 92.1875 100 100 98.4375 100 100 89.0625 93.75 100 93.75 98.4375 100 92.1875 100 100 92.1875 100 100 100 98.4375 100 89.0625 95.3125 100 89.0625 93.75 100 92.1875 100 100 91.6666 98.4375 100 85.9375 89.0625 100 2762.024 2931.25 3000 92.0674 97.7083 100 Berdasarkan hasil pengujian pada Tabel 5 didapatkan hasil rata–rata fitness dengan maksimum evolusi 1 sebesar 92.0674, maksimum evolusi 10 sebesar 97.7083, maksimum evolusi 100 sebesar 100, dan dapat disimpulkan bahwa semakin besar nilai maksimum populasi, semakin besar kemungkinan nilai fitness optimum. Uji Coba Parameter Crossover Rate Pengujian Parameter Crossover Rate dilakukan sebanyak 30 kali ke setiap populasi yang diuji dengan menghitung rata–rata nilai fitness yang dihasilkan. Adapun pengujian dilakukan dengan nilai parameter crossover rate yang berbedabeda, sedangkan parameter lainnya tetap agar dapat dilihat perbedaan yang terjadi. Parameter lainnya berisikan data sebagai berikut : (1) Genre Slow Rock; (2) Population size sebesar 10; (3) Maksimum evolusi sebesar 10%; (4) Natural selection rate sebesar 90%; (5) Mutation rate sebesar 1/12. Pengujian dilakukan sebanyak 3 kali dengan crossover rate masing–masing 0.1, 0.5 dan 1. Hasil uji coba parameter disajikan pada Tabel 7. Tabel 7 Pengujian Maksimum Crossover Rate 0.1, 0.5 dan 1 Data Ke Persentase Nilai Fitness Crossover Rate Crossover Rate 0.5 Crossover Rate 1 0.1 1 95.3125 98.4375 100 2 98.4375 100 100 22 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Total Rata – rata 98.4375 92.1875 95.3125 98.4375 95.3125 93.75 93.75 93.75 100 100 100 100 93.75 100 100 92.1875 95.3125 93.75 100 98.4375 100 100 93.75 95.3125 95.3125 100 93.75 98.4375 2904.688 96.82292 100 87.5 100 95.3125 100 95.3125 100 100 100 93.75 92.1875 100 93.75 100 100 100 100 100 95.3125 100 100 98.4375 95.3125 98.4375 98.4375 98.4375 100 98.4375 2939.063 97.96875 100 100 93.75 95.3125 95.3125 100 95.3125 100 93.75 100 98.4375 98.4375 100 100 93.75 100 100 100 95.3125 95.3125 93.75 93.75 100 100 93.75 98.4375 95.3125 89.0625 2918.75 97.29167 Berdasarkan hasil pengujian pada Tabel 7 didapatkan hasil rata–rata fitness dengan crossover rate 0.1 sebesar 96.8229, crossover rate 0.5 sebesar 97.96875, crossover rate 1 sebesar 97.29167, dan dapat disimpulkan bahwa nilai fitness tidak bergantung pada nilai crossover rate. Pengujian File Output Generator Pengujian dilakukan pada hasil export MIDI dengan cara membandingkan pola hasil generate sistem dengan drum setelah dibuka di dalam editor musik drum lainnya. Gambar 22 menunjukkan hasil generate pola drum oleh sistem. Gambar 22 Contoh Hasil Generate Pola Drum Oleh Sistem dan Log Kemudian dibuka file hasil export MIDI di dalam aplikasi lain yaitu dibuka file hasil export MIDI di dalam software lain yaitu Fruty Loops 9 yang hasilnya dapat dilihat pada Gambar 23. 23 Gambar 23 Hasil Export MIDI Dibuka Di Aplikasi FL 9 Gambar 23 menunjukkan bahwa file drum MIDI hasil export sistem dapat dibuka dengan baik oleh aplikasi Fruty Loop 9. Hasil Wawancara Pengujian Aplikasi Berdasarkan hasil pengujian aplikasi Generator Pola Drum sesuai dengan wawancara terhadap bapak Iwan Santosa, diperoleh hasil yang sangat memuaskan. Menurut beliau, aplikasi ini dapat di pakai untuk mengajar sesuai kebutuhan pengajar dan dapat digunakan untuk membuat pola lagu baru sesuai kriteria lagu berdasarkan genre lagu yang telah disediakan diaplikasi ini serta dapat menghasilkan output file berupa data file midi agar dapat disimpan serta diolah lagi. 5. Simpulan Berdasarkan hasil pembuatan, pembahasan, dan pengujian aplikasi Generator Pola Drum, dapat disimpulkan bahwa penerapan algoritma genetika dapat menghasilkan output berupa teknik pembuatan pola suara drum sesuai genre musiknya. Aplikasi yang dibangun dapat membantu para musisi, composer, arranger serta orang yang berkecimpung di dunia industri musik agar dapat membuat pola musik drum dengan mudah dan praktis. Saran dan pengembangan aplikasi Algoritma Genetika ini adalah penambahan sub fungsi fitness yang lebih bervariatif, sehingga dihasilkan warna pola drum yang baru sesuai dengan selera secara spesifik untuk genre yang dipilih. 6. [1]. [2]. [3]. [4]. [5]. [6]. Daftar Pustaka Pakereng, M. A. Ineke, 2007, Kriptosistem Menggunakan Algoritma Genetika Pada Data Citra, Yogyakarta: Thesis. Universitas Gadjah Mada. Nugroho dkk, Andi, 2009. Generator Melodi Berdasarkan Skala dan Akord Menggunakan Algoritma Genetika, Jurnal Informatika, Vol 5, No 1, Juni 2009: 15 – 29. Koelle, David, 2010. Java API for Music Programming, http://www.jfugue.org/. Diakses tanggal 4 April 2012. Suyanto, 2005, Algoritma Genetika dalam Matlab, Yogyakarta: ANDI OFFSET. Smith, Instruments, Dave, 2009. About Dave Smith Instruments, http://www.davesmithinstruments.com/about/index.php. Diakses tanggal 4 April 2012. Pressman, Roger S., 2001. Software Engineering a Practitioner’s Approach, New York : McGraw-Hill Higher Education. 24