BAB IV RANCANGAN GENERATOR MELODI Bab ini menjabarkan proses perancangan sistem generator melodi beserta hasilnya. Pertama, dibahas mengenai analisis skema dasar umum sistem untuk menyusun melodi dari parameter berupa batasan-batasan feature, berdasar pada feature-feature hasil analisis pada tahap sebelumnya. Kedua, rancangan implementasi parameter-parameter hasil analisis di sistem generator melodi. Ketiga, bab ini memaparkan detail rancangan generator melodi dalam bentuk kelas-kelas perancangan.
IV.1
Konteks dan Arsitektur Sistem
Alat bantu proses pembuatan musik dapat dibagi menjadi dua kelompok, yaitu alat bantu untuk musik dalam bentuk simbolis/MIDI dan alat bantu pada bentuk audio. Dalam proses pembuatan musik, seorang komposer dapat menggunakan alat-alat bantu dalam bentuk simbolis tersebut untuk membuat melodi, iringannya sampai lengkap dalam bentuk simbolis. Kemudian hasil tersebut dapat dicetak kemudian dimainkan oleh musisi, atau dengan menggunakan synthesizer, hasil tersebut dapat diperdengarkan ataupun dikonversi menjadi audio.
Gambar IV.1. Pembagian jenis alat bantu berdasarkan tingkat intervensi dan letaknya dalam proses pembuatan musik
IV–1
IV–2
Untuk mempermudah mengetahui batas-batas sistem generator melodi yang dibuat, dirumuskan pembagian alat bantu komposer seperti pada Gambar IV.1. Sumbu mendatar menunjukkan tingkat intervensi dari pengguna, semakin rendah tingkat intervensi, alat bantu tersebut bekerja semakin otonom. Alat bantu pada tingkat intervensi tinggi mencakup editor-editor musik, sedangkan alat bantu pada tingkat intervensi rendah mencakup alat bantu yang dapat mengusulkan atau membentuk secara otonom bagian-bagian dari musik. Sumbu tegak menunjukkan alat bantu tersebut dalam proses pembuatan musik. Pada sumbu tegak bagian bawah, alat bantu membantu pada tahap awal, yaitu pembentukan melodi, semakin ke atas, semakin menuju finalisasi musik tersebut. Pada tahap awal pembuatan musik, alat bantu pembuatan melodi dapat dipandang berdasarkan tinggi rendahnya kendali dari komposer sebagai pengguna, seperti diperlihatkan pada Gambar IV.1. Semakin rendah intervensi, alat bantu tersebut semakin otomatis. Sebaliknya, semakin tinggi intervensi pengguna, alat tersebut semakin manual. Alat bantu dengan intervensi yang tinggi dapat dipergunakan untuk memanipulasi melodi pada tingkatan elemen terkecil dari melodi, yaitu not. Setiap not dapat ditambahkan, dihapus, diatur oleh pengguna. Pada tingkat intervensi yang rendah, terletak sistem melody generator. Melodi dibuat secara otomatis, campur tangan pengguna hanya pada parameter pembuatan melodi. Alat bantu berupa sistem pembuat melodi yang dirancang pada Tesis ini berada pada bagian kiri bawah dari Gambar IV.1. Sistem ini bertujuan menghasilkan frasa-frasa melodi baru yang bebas konteks, tidak terikat oleh aturan dan pengetahuan yang dimiliki komposer. Sehingga, frasa yang dihasilkan dapat menjadi inspirasi yang benar-benar baru bagi komposer tersebut. Oleh karenanya, sistem ini hanya menerima masukan berupa parameter-parameter sederhana, dalam hal ini berupa mood yang diinginkan serta beberapa parameter sederhana seperti jumlah not yang diinginkan. Beberapa alat bantu dapat digunakan oleh komposer pada langkah komposisi selanjutnya setelah mendapatkan melodi yang sesuai, misalnya dengan memakai BandInABox [BAN09] atau alat bantu sejenis. Terkait dengan topik kajian Tesis, makalah [CHA08] yang membahas alat bantu untuk membuat iringan serta harmonisasi, dengan pendekatan mood. Alat bantu tersebut menerima masukan berupa motif melodi, dan mood tertentu, dan menghasilkan harmonisasi sebagai pelengkapnya.
IV–3
Gambar IV.2. Arsitektur sistem generator melodi berbasis mood. Sistem ini terdiri dari beberapa bagian utama, yaitu User Interface, Translator Mood dan Generator Melodi. Arsitektur sistem dapat dilihat pada Gambar IV.2. Pengguna berinteraksi dengan sistem melalui User Interface. User Interface akan meneruskan masukan pengguna berupa mood yang dipilih ke Translator Mood. Translator Mood mengubah masukan mood menjadi nilai parameter-parameter detail yang diteruskan ke Generator Melodi. User Interface juga melayani input user berupa parameter detail, yang akan diteruskan langsung ke Generator Melodi. Generator Melodi bertugas melakukan pembangkitan melodi berdasarkan parameter masukan, kemudian mengembalikan melodi tersebut ke User Interface untuk disampaikan ke pengguna. Pada seluruh bagian dari sistem ini, hasil analisis serta teori dasar mengenai musik dipergunakan. Pada bagian User Interface, diimplementasikan antarmuka masukan mood, antarmuka masukan parameter feature, tampilan partitur untuk menampilkan melodi yang dihasilkan, dan kemampuan untuk menyimpan hasil menjadi file MIDI. Pada Translator Mood diimplementasikan model pemetaan antara mood dengan feature melodi. Pada Generator Melodi diimplementasikan sebuah algoritma generator melodi yang dibentuk berdasarkan model generator yang iteratif. Bagian Translator Mood bertugas menerjemahkan masukan pengguna berupa mood menjadi parameter masukan ke Generator Melodi. Sedianya, pada bagian ini akan diimplementasikan model yang didapatkan dari proses pemetaan antara mood dengan feature yang dianalisis pada bagian III.3. Karena analisis tersebut tidak mencapai titik akhir, maka algoritma translator mood yang diimplementasikan pada bagian ini adalah algoritma dummy. Algoritma dummy tersebut dihasilkan dari justifikasi bahwa dimensi arousal dari mood mempengaruhi parameter
IV–4
untuk feature artikulasi, tempo, dan interval nada, sedangkan dimensi valence berpengaruh terhadap feature tangga nada, dan interval nada.
IV.2
Skema Umum Generator Melodi
Bagian ini akan membahas skema umum bagian Generator Melodi. Seperti pada gambaran umum sistem pada bagian I.1 (lihat Gambar I.3), sistem generator melodi ini merangkai nada-nada dari seluruh kemungkinan nada yang ada berdasarkan nilai parameter-parameter masukan, teori-teori musik, serta hasil analisis keterkaitan karakteristik dasar melodi dengan mood yang dipelajari dari lagu-lagu lain. Sistem generator melodi ini harus dirancang sedemikian rupa sehingga mampu menampung implementasi seluruh jenis parameter ke dalamnya. Jika tidak dirancang dengan baik, implementasi parameter dapat menjadi sangat sulit. Karena parameter yang akan diimplementasikan banyak jumlahnya, dan untuk memudahkan pengembangan selanjutnya, sedapat mungkin seluruh parameter tersebut dapat diimplementasikan dengan cara yang sama, atau seragam. Sistem generator melodi pada saat dijalankan akan merangkai elemen dasar dari melodi, yaitu not. Setiap not dalam melodi mempunyai satu feature dasar atau properti pada ranah frekuensi, yaitu pitch (p), dan dua properti pada ranah waktu, yaitu durasi (d) dan waktu kemunculan (t). Seluruh parameter masukan sebenarnya hanya memberikan batas pada kombinasi ketiga hal ini pada rangkaian melodi, sesuai dengan analisis pada bagian III.2. Terdapat berbagai macam pendekatan yang dapat digunakan untuk dapat melakukan pembentukan melodi ini. Pendekatan yang digunakan pada sistem ini diadopsi dari [WAN98]. Pada pendekatan tersebut, nada dipilih secara acak dari satu set nada yang sebelumnya telah dipilih sesuai dengan teori musik yang digunakan pada sistem tersebut. Pada pendekatan ini, properti waktu kemunuculan (t) dijadikan acuan utama. Proses perangkaian melodi dilakukan satu demi satu not, dari melodi kosong ditambahi satu per satu nada sampai membentuk sebuah frasa melodi usulan. Properti waktu kemunculan (t) dimulai dari 0 pada awal saat melodi kosong, kemudian nilai t ditambah sesuai dengan durasi not yang ditambahkan. Hal ini dapat dilakukan karena dalam membentuk melodi, salah satu batasan yang harus dipenuhi adalah dalam satu saat hanya boleh ada maksimal satu buat nada yang “aktif”.
IV–5
Kendali seluruh parameter yang menjadi masukan digunakan untuk menentukan nilai dua properti lainnya, yaitu pitch (p) dan durasi not saat ini (d). Secara implisit, parameter juga mempengaruhi t untuk not berikutnya dari nilai d ini. Kedua nilai properti lainnya ditangani dalam waktu yang bersamaan, yaitu dengan mengenumerasi seluruh kemungkinan kedua nilai properti tersebut. Kemudian masing-masing parameter membatasi kemungkinan nada-nada yang dipakai dengan mengurangi dan menambah probabilitas masing-masing pasangan nilai. Setelah itu, secara probabilistik dipilih not yang kemudian disambungkan dengan melodi yang sudah terbentuk.
Gambar IV.3. Gambaran proses pemilihan nada Gambaran proses yang terjadi pada setiap pemilihan nada yang akan ditambahkan pada melodi bisa dilihat pada Gambar IV.3. Suatu generator nada menghasilkan seluruh kemungkinan nada. Seluruh kemungkinan nada kemudian diproses oleh rantai filter-filter parameter. Filter ini dapat menerima masukan berupa nilai parameter. Parameter dalam rantai tersebut juga dapat mempergunakan data melodi yang sudah terbentuk sebagai salah satu pertimbangan dalam membatasi kemungkinan nada. Aturan yang diekstraksi dari teori dasar musik juga diimplementasikan dalam bentuk sebuah Filter. Kemudian suatu pemilih nada memilih sebuah nada dari kemungkinan yang tersedia, dan merangkaikannya dengan melodi yang sudah terbentuk. Proses ini akan diulang sampai memenuhi jumlah nada yang diinginkan. Proses tersebut dituangkan secara algoritmik dalam Algoritma IV.1. Fungsi buat_melodi_kosong membuat sebuah melodi yang kosong. Fungsi filters adalah array filter yang diterapkan pada proses pembuatan melodi. Prosedur filter_kemungkinan_nada pada setiap filter mengubah nilai probabilitas semua kemungkinan nada sesuai dengan kegunaan filter tersebut.
IV–6
Algoritma IV.1 Algoritma utama sistem generator melodi Input: filters: array dari filter-filter jumlah_nada: jumlah nada yang diinginkan Output: melodi usulan Algoritma: melodi = buat_melodi_kosong() while (melodi.jumlah_nada < jumlah_nada) prob = buat_semua_kemungkinan_nada() for each (filter <- filters) filter.filter_kemungkinan_nada (prob, melodi) nada = pilih_nada(prob) melodi.tambah_nada(nada) return melodi Fungsi pilih_nada akan memilih sebuah nada, yaitu pasangan nilai d dan p, secara probabilistik sesuai dengan probabilitas nada tersebut. Walaupun pendekatan ini dapat memenuhi kebutuhan implementasi parameter pengaturan generator melodi, terdapat beberapa kelemahan pada pendekatan ini: 1. Enumerasi semua kemungkinan pasangan nilai p dan d membutuhkan banyak ruang memori, serta membuat pemrosesan oleh filter menjadi banyak, karena pada setiap iterasi nilai probabilitas dipilihnya masing-masing kemungkinan pasangan nilai tersebut akan diubah oleh masing-masing filter. Hal ini dapat diatasi dengan mempersempit jangkauan nilai pitch yang dapat menjadi pilihan. Bagaimanapun juga, melodi mempunyai syarat bahwa nadanya harus “bersambung”, tidak mungkin nilai pitch-nya akan bervariansi tinggi (lihat bagian II.3). 2. Jika terdapat parameter-parameter yang memerlukan penghitungan yang cukup berat, pada setiap iterasi, maka filter harus menghitung ulang penghitungan tersebut. Hal ini dapat diatasi dengan menggunakan prinsip caching, dengan membuat filter tersebut menyimpan secara internal beberapa nilai yang dibutuhkan dalam penghitungan pada iterasi berikutnya. 3. Beberapa parameter mengubah probabilitas dipilihnya not berdasarkan rangkaian not secara keseluruhan. Untuk parameter-parameter seperti ini,
IV–7
filter yang diimplementasikan harus memiliki cara untuk mengetahui melodi yang sudah terbentuk, serta pada tiap iterasi filter tersebut perlu menghitung ulang pengaruh melodi tersebut. Hal ini dapat diatasi dengan memberikan melodi sebelumnya sebagai masukan ke fungsi filter, serta mempergunakan prinsip caching seperti pada poin sebelumnya.
(a)
(b)
(c) Gambar IV.4. Nilai awal probabilitas (a), faktor pengali yang dihasilkan oleh filter (b), serta nilai akhir probabilitas setelah dikalikan dengan faktor pengali (c). Sumbu tegak pada gambar menunjukkan tingkat nilai probabilitas atau faktor pengali, setiap blok mewakili nilai probabilitas / faktor pengali untuk setiap kemungkinan not. Pada setiap langkah, filter mengubah nilai probabilitas not dengan cara membuat faktor pengali untuk setiap kemungkinan not sesuai dengan parameter yang diminta. Kemudian, faktor pengali tersebut dikalikan dengan nilai probabilitas not yang ada. Gambar IV.4 menunjukkan diagram histogram nilai probabilitas asli (a), faktor pengali (b) serta nilai probabilitas hasil proses filter (c). Karena kemungkinan not adalah besaran dua dimensi, pitch dan durasi, maka nilai probabilitas dapat dipandang sebagai matriks dua dimensi, dengan baris mewakili durasi dan kolom mewakili pitch, seperti pada Tabel IV.1. Secara umum, filter dapat
IV–8
bekerja pada dimensi pitch saja (lihat Gambar IV.5), atau pada dimensi durasi saja (lihat Gambar IV.6), atau pada kedua dimensi secara langsung. Tabel IV.1. Matriks probabilitas kemungkinan not. Durasi \ Pitch 1/2 1/4 1/16 1/32 ...
1
2
3
4
5
6
7
...
...
...
...
...
...
...
...
...
Gambar IV.5. Posisi faktor pengali filter pitch dalam pengubahan nilai probabilitas dalam matriks.
Gambar IV.6. Posisi faktor pengali filter pitch dalam pengubahan nilai probabilitas dalam matriks.
IV.3
Pemilih Nada Secara Probabilistik
Salah satu inti dari algoritma generator melodi ini adalah bagian pemilih nada secara probabilistik dari seluruh kemungkinan nada. Pemilihan secara probabilistik ini diimplementasikan dengan menggunakan pembangkit bilangan acak probabilistik, yang dapat menghasilkan bilangan acak sesuai dengan sebaran probabilitas yang diberikan. Sebaran probabilitas yang diberikan pada pembangkit
IV–9
bilangan acak ini diambil dari nilai kemungkinan nada dipilih, sehingga semakin tinggi nilai kemungkinan nada dipilih, semakin mungkin nada tersebut akan terpilih menjadi nada berikutnya. Pembangkit nilai acak yang umum ditemui adalah pembangkit bilangan acak dengan distribusi nilai yang setara (uniform random generator). Terdapat bermacam-macam algoritma pembangkit nilai acak uniform, yang dapat dibagi berdasarkan tujuan pembangkit nilai tersebut, yaitu untuk permasalahan kriptografi dan untuk permasalahan statistik. Permasalahan pemilihan probabilistik untuk sistem generator melodi ini memiliki karakteristik seperti permasalahan statistik, yaitu memerlukan kecepatan, bukan keamanan.
(a)
(b) Gambar IV.7. Distribusi probabilitas nilai (a) uniform (b) sebaran nilai tertentu (non-uniform). Untuk menghasilkan nilai acak dengan distribusi seperti pada Gambar IV.7 (b) dari distribusi uniform seperti pada Gambar IV.7 (a), setiap kemungkinan nilai yang diminta diabstraksikan menjadi ember-embar dengan ukuran yang sebanding dengan probabilitas dari nilai tersebut. Ember tersebut kemudian disusun pada daerah hasil pembangkit nilai acak uniform (lihat Gambar IV.8.
Gambar IV.8. Proses untuk menghasilkan nilai acak dengan distribusi tertentu dari nilai acak dengan distribusi uniform
IV–10
Sebuah nilai acak uniform x0 kemudian dibangkitkan, dan dipetakan ke dalam ember nilai tersebut, menghasilkan nilai acak x. Kemungkinan nilai x yang dihasilkan akan setara dengan besar ember, yang setara dengan sebaran nilai yang diinginkan. Pada Gambar IV.8, nilai x yang dihasilkan adalah nilai yang diwakili ember ke-4. Misalkan sebaran probabilitas n buah bilangan yang diinginkan masing-masing adalah p1 , p2 , ..., pn , dengan total nilai probabilitas untuk semua bilangan adalah Pn x=1 pi = 1. Besar masing-masing ember untuk setiap nilai sebanding dengan nilai probabilitas masing-masing kemungkinan nilai tersebut. Misalkan daerah hasil pembangkit nilai acak uniform adalah [0, m), maka besar masing-masing ember untuk setiap kemungkinan nilai adalah p1 m, p2 m, ..., pn m. Karena masing-masing kemungkinan nilai x0 yang dihasilkan oleh pembangkit nilai acak 1 1 uniform adalah , maka masing-masing nilai x memiliki kemungkinan px m = m m px . Terlihat bahwa hasil nilai x akan memiliki sebaran probabilitas yang sama dengan probabilitas yang diminta.
IV.4
Analisis Parameter Feature
Sesuai dengan skema umum algoritma generator melodi pada bagian sebelumnya, feature dasar melodi, yaitu not dikendalikan oleh beberapa nilai parameter masukan dari user. Parameter masukan dari user berupa batasan nilai feature melodi tersebut. Berdasarkan analisis pada bagian III.2, feature dibagi menjadi bertingkat-tingkat. Pada tingkat paling rendah (tingkat 0), generator melodi bekerja, dengan merangkai nilai properti t, d dan p dari setiap not. Semakin tinggi tingkat feature, semakin tinggi abstraksinya, dan semakin bias terhadap teori musik yang sudah dirumuskan sebelumnya. Karena itu, pada generator melodi ini, batasan feature yang akan menjadi parameter masukan dibatasi hanya tingkat 1 dan tingkat 2.
IV.4.1
Parameter Feature Tingkat 1: Ranah Pitch
Parameter pada tingkat ini melingkupi semua parameter yang mempengaruhi nilai probabilitas dari segi nilai pitch (p) yang dimilikinya. Parameter pada tingkat ini melingkupi parameter-parameter sebagai berikut: 1. Tangga nada Pada musik barat, dalam satu oktaf yang terdiri dari 12 buah pitch, umum
IV–11
dipakai dua jenis tangga nada, yaitu tangga nada mayor dan minor, dengan tangga nada minor dibagi menjadi tiga jenis, yaitu natural minor, harmonic minor, dan melodic minor. Nilai probabilitas dari nada-nada utama pada tangga nada tetap, sedangkan nilai probabilitas dari nada-nada sisipan pada tangga nada dikurangi. Tabel IV.2 menampilkan tangga nada-tangga nada yang dipilih dari tangga nada yang sering digunakan dalam musik barat. Untuk mempermudah, maka seluruh tangga nada bernadadasar C. Jika diinginkan untuk memiliki nada dasar lainnya, melodi hasil dapat di-transpose-kan ke nada dasar yang sesuai. Karena tangga nada berulang pada setiap oktaf, faktor pengali yang dihasilkan juga berulang pada setiap oktaf. Misalkan perbandingan probabilitas antara nada-nada utama pada tangga nada dengan nada-nada sisipan adalah 1 : psisipan , dengan 0 < psisipan < 1. Maka faktor pengali ranah pitch untuk masing-masing tangga nada pada Tabel IV.2 dapat dilihat pada Gambar IV.9. Tabel IV.2. Nada-nada pada tangga nada. Tangga Nada Mayor Minor Harmonik Minor Melodik Kromatik
Nada-Nada C, D, E, F, G, A, B C, D, Eb, F, G, Ab, B C, D, Eb, F, G, A, B C, Bb, Ab, G, F, Eb, D (turun) C, C#, D, D#, E, F, F#, G, G#, A, A#, B
IV–12
(a)
(b)
(c)
(d)
(e) Gambar IV.9. Faktor pengali untuk tangga nada mayor (a), minor harmonik (b), minor melodik naik (c) dan turun (d), serta kromatik (e), dengan perbandingan antara nilai faktor pengali besar dengan kecil adalah 1 : psisipan .
2. Jangkauan pitch Jangkauan pitch meliputi range nilai pitch terkecil sampai nilai pitch terbesar yang perlu diperhitungkan. Parameter ini diimplementasikan dengan
IV–13
mengeset nilai probabilitas nada-nada yang memiliki nilai pitch diluar jangkauan menjadi 0. Misalkan jangkauan pitch (p) yang dinginkan adalah antara pmin sampai dengan pmax , maka nilai p sedemikian sehingga pmin <= p <= pmax nilai probabilitasnya dibiarkan tetap, sedangkan nilai pitch p di luar jangkauan tersebut (p < pmin dan p > pmax ) diubah menjadi 0. Faktor pengali untuk parameter ini dapat dilihat pada Gambar IV.10.
Gambar IV.10. Faktor pengali parameter jangkauan pitch. 3. Nilai pitch awal dan akhir Nilai pitch nada awal dan akhir pada melodi dapat menjadi parameter masukan, agar pengguna dapat meminta generator melodi membuat melodi yang dapat menyambung dengan melodi yang sudah ada sebelumnya. Faktor pengali untuk parameter ini bergantung pada posisi not yang sedang diproses. Pada awal dan akhir pembuatan melodi, faktor pengali parameter ini mirip dengan faktor pengali untuk parameter jangkauan pitch, dengan pmin dan pmax yang sama, yaitu pitch yang diinginkan. Pada bagian lain, faktor pengali rata untuk seluruh nada, yaitu 1 (nilai probabilitas tidak diubah).
IV.4.2
Parameter Feature Tingkat 1: Ranah Waktu
Parameter pada kelompok ini melingkupi semua parameter yang mempengaruhi nilai probabilitas nada dari segi nilai durasi (d) yang dimiliki olehnya. Parameter pada kelompok ini melingkupi parameter-parameter sebagai berikut: 1. Durasi Parameter ini mendefinisikan batas-batas nilai durasi. Nilai durasi dibatasi dengan menggunakan kurva distribusi. Filter yang mengimplementasikan parameter ini akan menghasilkan faktor pengali pada ranah waktu yang dibangkitkan dari kurva distribusi nilai durasi. Durasi-durasi yang pada kurva distribusi durasi memiliki nilai rendah akan dikalikan dengan faktor pengali yang rendah pula, sedangkan durasi yang memiliki nilai tinggi akan dikalikan dengan faktor pengali yang memiliki nilai tinggi. 2. Artikulasi Parameter ini mendefinisikan artikulasi seperti apa yang diterapkan pada
IV–14
setiap not. Artikulasi yang dapat diterapkan meliputi legato, marcatto dan stacatto. Artikulasi mempengaruhi dinamisnya perubahan antara satu not dengan not berikutnya. Artikulasi legato didapatkan dengan sedikit memanjangkan nilai not sehingga menyentuh not setelahnya, artikulasi marcatto didapatkan dengan nilai not apa adanya, sedangkan stacatto didapatkan dengan nilai not yang dikurangi.
IV.4.3
Parameter Feature Tingkat 2
Parameter ini meliputi dua ranah melodi sekaligus, yaitu ranah pitch dan ranah waktu. Dalam tesis ini, terdapat satu parameter pada kelompok ini yang diimplementasikan yaitu interval pitch. Parameter ini mendefinisikan batas-batas nilai interval pitch, yang mempengaruhi posisi melodi hasil diantara sifat conjunct dan disjunct. Seperti parameter durasi, parameter ini didefinisikan dengan menggunakan kurva distribusi. Pada implementasinya, filter untuk parameter ini akan melihat informasi mengenai not terakhir yang dihasilkan oleh sistem sebelum memperhitungkan faktor pengali. Faktor pengali akan digeser sesuai dengan pitch dari not teraktir tersebut.
IV.4.4
Parameter Khusus
Parameter pada kelompok ini tidak secara mempengaruhi proses pembuatan melodi seperti parameter lainnya. Parameter-parameter ini tidak mempengaruhi secara langsung probabilitas not pada setiap iterasi, tetapi mempengaruhi pembuatan melodi dari cara lain yang unik untuk setiap parameter. Parameter-parameter pada kelompok ini terdiri atas: 1. Tempo Parameter ini mendefinisikan kecepatan melodi. Nilai parameter ini tidak mempengaruhi nilai probabilitas, tetapi langsung mengeset nilai tempo pada melodi. 2. Panjang Melodi Parameter ini mendefinisikan jumlah not pada melodi yang akan dibuat. Parameter ini membatasi jumlah iterasi yang dilakukan pada algoritma utama sistem generator melodi ini (lihat Algoritma IV.1).
IV–15
IV.5
Rancangan Generator Melodi
Bagian User Interface akan diimplementasikan menjadi beberapa kelas sesuai dengan framework yang dipakai untuk membangun antarmuka sistem. Agar pengguna dapat melihat secara langsung perubahan pada nilai parameter detail akibat penggantian mood yang dipilih oleh pengguna, bagian Translator Mood diimplementasikan menjadi sebuah prosedur pada kelas antarmuka, yang mengubah secara langsung nilai masing-masing parameter pada antarmuka. Bagian Generator Melodi akan diimplementasikan menjadi sejumlah kelas, yang akan dibahas secara mendetail pada bagian ini.
Gambar IV.11. Diagram kelas generator melodi Dengan memakai paradigma berorientasi objek, untuk dapat mengimplementasikan algoritma utama bagian Generator Melodi, maka dibutuhkan kelas-kelas seperti pada diagram kelas pada Gambar IV.11. Kelas-kelas tersebut adalah sebagai berikut: 1. Kelas MelodyGenerator Kelas ini merupakan kelas utama yang padanya diimplementasikan algoritma utama. 2. Kelas Note Kelas yang menyimpan nilai sebuah nada, yaitu nilai pitch dan nilai durasi.
IV–16
3. Kelas Melody Kelas yang menyimpan rangkaian nada yang membentuk melodi. 4. Kelas PossibleNote Kemungkinan nada dan nilai kemungkinan/probabilitas untuk dipilih. Nilai inilah yang akan diubah oleh setiap filter. 5. Kelas Parameter Kelas abstrak yang mengimplementasikan filter parameter dalam generator melodi. Setiap filter dari parameter yang ada diturunkan dari kelas ini. 6. Kelas-kelas parameter Kelas-kelas yang merupakan turunan dari kelas Parameter, masing-masing mengimplementasikan filter parameter tertentu.
IV.5.1
yang
Kelas MelodyGenerator
Kelas ini adalah sebuah kelas controller. Kelas utama ini tidak mempunyai atribut, hanya mempunyai sebuah operasi, yaitu GetMelody yang merupakan implementasi algoritma utama dari generator melodi ini. Penjelasan operasi tersebut dapat dilihat pada Tabel IV.3. Tabel IV.3. Operasi pada kelas MelodyGenerator Nama Operasi GetMelodi
Keterangan Fungsi ini adalah fungsi utama dalam generator melodi ini. Pada fungsi ini diimplementasikan algoritma utama yang dapat dilihat pada Algoritma IV.1. Fungsi ini menerima masukan berupa parameter-parameter dalam bentuk objek-objek dari kelas-kelas turunan dari kelas Filter. Fungsi ini membentuk melodi dari melodi kosong, yaitu dengan membuat objek kelas Melody, kemudian pada setiap iterasi membangkitkan seluruh kemungkinan nada (dengan menggunakan PossibleNote), dan memanggil fungsi FilterPossibleNote pada masing-masing Filter yang menjadi masukan. Dari hasil tersebut, dipilih secara probabilistik sebuah nada, dan dimasukkkan ke dalam melodi dengan memanggil prosedur AppendNote.
IV–17
IV.5.2
Kelas Note
Kelas ini adalah sebuah kelas entity. Kelas ini menyimpan nilai sebuah not pada suatu melodi. Kelas ini tidak mempunyai operasi, hanya mempunyai tiga buah atribut, seperti dijelaskan pada Tabel IV.4. Tabel IV.4. Atribut pada kelas Note Nama Atribut pitch duration start time
IV.5.3
Keterangan Menyimpan nilai pitch dari not. Menyimpan nilai durasi/panjang dari sebuah not. Menyimpan nilai waktu awal kemunculan not ini.
Kelas Melody
Kelas ini adalah sebuah kelas entity. Kelas ini menyimpan sebuah melodi yang terdiri atas not-not, dengan menggunakan objek kelas Note. Kelas ini mempunyai satu operasi utama untuk menambahkan sebuah not, yaitu AddNote, dan satu operasi tambahan agar melodi dapat diproses lebih lanjut, yaitu ToMidi. Atribut dan operasi pada kelas ini dijelaskan pada Tabel IV.5. Tabel IV.5. Atribut dan operasi pada kelas Melody Nama Atribut/Operasi Atribut notes Operasi AppendNote Operasi ToMIDI
IV.5.4
Keterangan Menyimpan nol atau lebih objek Note sebagai representasi daftar not yang ada pada melodi ini. Menambahkan satu buah not pada bagian belakang dari melodi. Mengkonversi melodi menjadi MIDI untuk disimpan ataupun diputar pada perangkat MIDI.
Kelas PossibleNote
Kelas ini adalah sebuah kelas entity. Kelas ini menyimpan sebuah nilai nada serta kemungkinannya, dan digunakan pada MelodyGenerator untuk menyimpan probabilitas nada. Atribut dan operasi pada kelas ini dijelaskan pada Tabel IV.6.
IV.5.5
Kelas Parameter
Kelas abstrak ini adalah sebuah kelas controller. Kelas abstrak ini mendefinisikan sebuah operasi yang akan dipanggil oleh GetMelody pada MelodyGenerator. Operasi pada kelas ini dijelaskan pada Tabel IV.7.
IV–18
Tabel IV.6. Atribut dan operasi pada kelas PossibleNote Nama Atribut/Operasi Atribut pitch Atribut duration Atribut probability Operasi MultiplyProbability Operasi DivideProbability
Keterangan Menyimpan nilai pitch dari not. Menyimpan nilai durasi/panjang dari not. Menyimpan nilai probabilitas dari not. Menaikkan nilai probabilitas dengan mengalikannya dengan nilai tertentu. Menurunkan nilai probabilitas dengan membaginya dengan suatu nilai.
cara cara
Tabel IV.7. Operasi pada kelas Parameter Nama Operasi FilterPossibleNote
Keterangan Prosedur ini melakukan filtering terhadap koleksi PossibleNote yang menjadi masukan, dengan memanggil prosedur MultiplyProbability atau DivideProbability yang ada pada kelas PossibleNote. Kelas-kelas yang mengimplementasikan fungsi ini dapat memanfaatkan informasi mengenai melodi yang telah dibentuk dari objek Melody yang menjadi masukan fungsi ini.
Untuk setiap parameter yang ada, dibuat sebuah kelas turunan dari kelas Parameter ini. Kelas-kelas tersebut mengimplementasikan prosedur FilterPossibleNote sesuai dengan feature yang diwakili kelas tersebut, serta sesuai dengan parameter masukan yang diberikan.