• Tidak ada hasil yang ditemukan

BAB 3 ANALISIS DAN PERANCANGAN. Pada tugas akhir ini penulis membuat sebuah aplikasi Text-to-Speech (TTS)

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 3 ANALISIS DAN PERANCANGAN. Pada tugas akhir ini penulis membuat sebuah aplikasi Text-to-Speech (TTS)"

Copied!
55
0
0

Teks penuh

(1)BAB 3 ANALISIS DAN PERANCANGAN. Pada tugas akhir ini penulis membuat sebuah aplikasi Text-to-Speech (TTS) Bahasa Indonesia yang bernama BlueTTS. BlueTTS memiliki kemampuan belajar dalam proses penggenerasian fonem dengan menggunakan metode backpropagation dan kemampuan pengenalan kategori sintaksis sesuai dengan kontekstual kalimat dengan menggunakan metode N-Gram.. Normalisasi teks. N-GRAM. Pengenalan kontekstual. Pemisahan kata dasar. Input teks. Pengenalan fonem. BACKPROPAGATION. pho. Speech syntesizer. Penentuan prosodi. Wav file. Gambar 3.1 Gambaran Umum Proses Kerja BlueTTS. 61.

(2) 62 Perancangan keseluruhan sistem BlueTTS ini dibagi menjadi berbagai tahap dimulai dari analisis permasalahan dan solusi yang akan diberikan, analisis metode yang akan digunakan, gambaran-gambaran dari setiap modul yang ada, disertai dengan diagram alir dari modul tersebut. Kemudian akan diperlihatkan perancangan layar daripada aplikasi BlueTTS ini.. 3.1 Analisis Permasalahan. Proses pembelajaran suatu bahasa merupakan suatu hal sangat penting bagi seseorang yang membutuhkan kemampuan berbahasa asing. Dalam proses pembelajaran tentu saja diperlukan sarana yang dapat mempermudah individu tersebut untuk mempelajari lebih cepat dan akurat. Dalam pembelajaran suatu bahasa, hal yang paling penting ialah pengertian makna kata dan cara pengucapannya. Dewasa ini kamus Bahasa Indonesia dalam berbagai bahasa telah banyak beredar. Oleh karena itu, penulis ingin melengkapi sarana pembelajaran Bahasa Indonesia dengan sebuah aplikasi yang dapat mengucapkan kata-kata dalam karakteristik pengucapan Bahasa Indonesia yang tepat. Dengan adanya aplikasi ini maka peran pembimbing untuk melatih pengucapan tidak terlalu dibutuhkan lagi. Permasalahan utama pada kemampuan aplikasi ini ialah, Bahasa Indonesia memiliki cara pengucapan yang bervariasi pada fonem tertentu. Sebagai contoh, fonem /e/ memiliki lebih dari 1 macam pengucapan dan tidak memiliki syarat-syarat yang jelas mengenai cara pengucapan tersebut. Pada kata-kata tertentu, huruf [e] dibaca seperti [e] pada membran dan terkadang dibaca seperti [e] pada berkah. Pada kata yang baru dikenal, pengucapan yang tepat hanya dapat dikenali apabila individu yang.

(3) 63 mengucapkan tersebut telah memiliki pengalaman dalam kosakata Bahasa Indonesia. Bagi orang-orang yang bermaksud untuk mempelajari cara pengucapan tersebut tanpa bimbingan orang lain tentu hal ini menjadi sebuah kendala dalam proses pembelajaran. Permasalahan lain terdapat pada pengucapan kata yang bersifat homograf. Homograf yaitu lebih dari satu kata yang memiliki bentuk penulisan yang sama namun memiliki cara pengucapan yang berbeda. Salah satu kata yang bersifat homograf dalam Bahasa Indonesia ialah mental. Pada konteksnya sebagai suatu kata kerja, huruf [e] pada kata mental akan diucapkan dengan fonem /ə/ dan dalam konteksnya sebagai kata benda, huruf [e] pada kata mental akan diucapkan dengan fonem /e/. Pada aplikasi TTS biasa, pada homograf akan dipilih salah satu dari cara pengucapan yang ada tanpa melihat karakteristik dari kata tersebut. Tentu saja cara ini menghasilkan pengucapan yang salah apabila penentuan pengucapan tersebut tidak sesuai dengan konteks kalimatnya.. 3.2 Usulan Pemecahan Masalah. Pada masalah yang dihadapi di subbab sebelumnya, penulis menggunakan 2 macam metode yang dapat menyelesaikan masalah tersebut yaitu backpropagation dan n-gram. Backpropagation dimaksudkan untuk mencari pola penggenerasian fonem, sedangkan n-gram digunakan untuk mengenali pola pemilihan kategori sintaksis kata yang akan menentukan apakah suatu kata berupa kata benda atau kata kerja. Berikut ini penjelasan lebih lanjut mengenai setiap metode. Untuk memecahkan masalah pada pengenalan fonem, penulis menggunakan metode yang dapat menghasilkan suatu output berdasarkan pola-pola dan pengalaman terhadap input sebelumnya yaitu kemampuan jaringan syaraf tiruan dengan algoritma.

(4) 64 backpropagation untuk belajar dari pengalaman yang telah lalu. Untuk mendapatkan pola pengucapan yang tepat, penulis akan memasukkan data training yang bervariasi sehingga pada input berikutnya, jaringan saraf tiruan akan mengeluarkan fonem yang didasarkan pada pola yang telah ada. Pada masalah pemilihan pengucapan kata homograf yang tepat, berdasarkan metode yang digunakan, penulis dapat menentukan karakteristik sintaksis dari kata yang bersangkutan apakah berupa kata kerja, kata benda, atau kata keterangan. Penulis menggunakan metode N-gram yang bertujuan menentukan karakteristik sintaksis berdasarkan contoh-contoh kalimat yang sudah pernah dikenali sebelumnya. Penulis menggunakan metode ini karena suatu kata dapat dikenali kategori sintaksisnya berdasarkan 2 hal yaitu sifat sintaksis dari kata-kata di sekelilingnya, dan sifat gramatikal dari kata tersebut yaitu suatu kata hanya memiliki satu atau lebih sifat kategori sintaksis tertentu yang sudah pasti.. 3.3 Analisis Data yang Dibutuhkan. Dalam pembuatan BlueTTS ini, tujuan pemakaian aplikasi ini akan digunakan sebagai suatu alat bantu bagi para pengguna yang sedang mempelajari Bahasa Indonesia dan ingin mengetahui cara pengucapan kata-kata berbahasa Indonesia. Oleh karena itu, data yang penulis gunakan sebagai pola yang akan dimiliki oleh aplikasi ini terdiri dari 3380 kata yang umum digunakan dalam Bahasa Indonesia sehari-hari. Kata-kata tersebut diambil dan ditentukan fonem pengucapannya dengan bantuan Kamus Besar Bahasa Indonesia. Selain data berupa kata-kata berbahasa Indonesia, dibutuhkan pula kategori sintaksis yang dimiliki oleh kata tersebut, apakah berupa kata kerja, kata benda, atau.

(5) 65 kata keterangan. Untuk menentukan kategori sintaksis penulis menganalisis dengan nalar pribadi penulis karena Bahasa Indonesia merupakan bahasa sehari-hari penulis. Pada data yang diperlukan untuk dapat mengenali kategori sintaksis, penulis memasukkan berbagai macam variasi kalimat yang menggunakan homograf. Data yang dimasukkan hanya yang mengandung homograf karena pada kata-kata selain homograf, pengucapan kata tersebut sudah pasti dan tidak ada cara pengucapan yang lain. Homograf yang dimasukkan antara lain apel, mental, seri, serang,dan teras.. 3.4 Analisis dan Perancangan Modul. Secara garis besar, pembuatan BlueTTS terbagi dalam beberapa tahap utama pada pengolahan input sebelum penggenerasian suara. Tahap-tahap tersebut antara lain: 1. Normalisasi teks 2. Penentuan kontekstual 3. Pemisahan kata dasar 4. Penggenerasian fonem Normalisasi akan diperlukan untuk mengubah bentuk input yang bukan berupa huruf atau input yang ingin disempurnakan menjadi bentuk yang diinginkan. Setelah itu pada setiap kata akan ditentukan sifat sintaksis dari kata tersebut agar fonem yang diberikan merupakan fonem yang tepat. Fonem akan digunakan untuk menentukan bunyi yang akan diucapkan dalam setiap katanya. Sebagai contoh, input kata dengan huruf s, e, l, a, m, a, t, akan mengeluarkan fonem /s/, /ə/, /l/, /a/, /m/, /a/, /t/..

(6) 66. Gambar 3.2 Proses Pengolahan Input. 3.4.1. Normalisasi Teks Proses normalisasi teks merupakan tahap pertama sebelum input teks. dimasukkan ke dalam neural network. Normalisasi teks diperlukan karena fonem dalam Bahasa Indonesia hanya mewakili huruf atau rangkaian huruf, sedangkan input teks tidak selalu berisi huruf. Berikut ini beberapa contoh hal yang memerlukan normalisasi. a) Normalisasi Waktu Kemampuan sebuah TTS untuk bisa mengucapkan waktu dengan tepat cukup penting melihat bahwa pengucapan waktu dengan menggunakan format waktu yang berlaku yaitu hh:mm yang merupakan jam dan menit. Normalisasi waktu harus dilakukan sebelum normalisasi angka karena apabila angka pada.

(7) 67 waktu harus dilakukan sebelum normalisasi angka karena apabila angka pada waktu yang digunakan sudah diubah menjadi huruf, bentuknya sudah bukan merupakan format waktu. Pada awalnya akan dicek terlebih dahulu apakah input yang ada mengandung format angka, titik dua ( : ), dan angka. Apabila ketiganya ada maka fungsi ini akan merubah format waktu tersebut ke dalam bentuk penulisan huruf. Sebagai contoh, apabila didapatkan tulisan 08:30 maka akan diubah menjadi “jam delapan lewat tiga puluh menit”.. Pseudocode modul time2sentence buat array DataBil yang berisi kalimat satu sampai sebelas jika panggil cekformatwaktuInd(input_waktu) atau panggil cekformatwaktuIng(input_waktu) mulai jam = mengambil nilai jam dari input_waktu jika jam <= 11 mulai temp = penggabungan temp dengan DataBil(jam) selesai selain itu jika jam <= 19 mulai jam dikurang 10 temp = penggabungan temp dengan DataBil(jam) dan string 'belas' selesai selain itu mulai jam dikurang 20 jika jam = 0 mulai temp = penggabungan temp dengan string 'dua' dan string 'puluh' selesai selain itu mulai temp = penggabungan temp dengan string 'dua' ,string 'puluh' dan DataBil(jam) selesai selesai menit = mengambil nilai menit dari input_waktu.

(8) 68 jika menit > 0 mulai temp = penggabungan temp dengan string 'lewat' jika menit <= 11 mulai temp = penggabungan temp dengan DataBil(menit) selesai selain itu jika menit <= 19 mulai menit dikurang 10 temp = penggabungan temp dengan DataBil(menit) dan string 'belas' selesai selain itu mulai depan = pembulatan menit / 10 belakang = sisa hasil bagi menit dengan 10 jika belakang = 0 mulai temp = penggabungan temp dengan DataBil(depan) dan string 'puluh' selesai selain itu mulai temp = penggabungan temp dengan DataBil(depan) ,string 'puluh' dan DataBil(belakang) selesai selesai temp = penggabungan temp dengan string 'menit' selesai selesai kembalikan nilai temp modul cekformatwaktuInd inisialisasi error 1 dari 1 sampai panjang input_waktu mulai jika input_waktu < 48 atau > 57 dan bukan ':' mulai error = 0 selesai selesai jika error = 1 mulai jika panggil validasiHour(input_waktu) mulai kembali nilai true selesai selesai modul cekformatwaktuIng inisialisasi error 1 dari 1 sampai panjang input_waktu mulai jika input_waktu < 48 atau > 57 dan bukan ':' dan bukan ' ' dan tidak mengandung 'PM' atau 'AM' mulai.

(9) 69 error = 0 selesai selesai jika error = 1 mulai jika input_waktu mengandung 'PM' atau 'AM' mulai jika panggil validasiHour(input_waktu) mulai kembali nilai true selesai selesai selesai modul validasiHour dari 1 sampai panjang input_waktu mulai jika cekHour = false mulai jika input_waktu ketemu titik dua mulai cekHour = true selesai selain itu mulai tampung = input_waktu selesai selesai selain itu mulai sisa = input_waktu selesai selesai jika panjang tampung 2 atau 1 dan < 24 dan sisa tidak mengandung 'PM' dan 'AM' atau sisa mengandung 'PM' atau 'AM' dan nilai jam < 12 mulai jika panggil validasiMinute(sisa) = true mulai hasil = true selesai selesai modul validasiMinute dari 1 sampai panjang input_waktu mulai jika cekMenit = false mulai jika input_waktu = ':' atau ' ' mulai cekMenit = true selesai selain itu mulai tampung = input_waktu.

(10) 70 selesai selesai selain itu mulai sisa = input_waktu selesai selesai jika panjang tampung 2 atau 1 dan nilai menit < 60 mulai jika sisa = 'PM' atau 'AM' mulai hasil = true selesai selain itu jika sisa = 0 mulai jika panggil validasiSecond(sisa) mulai hasil = true selesai selesai selain itu mulai hasil = true selesai selesai modul validasiSecond dari 1 sampai panjang input_waktu mulai jika flag = false mulai jika input_waktu ':' atau ' ' mulai flag = true selesai selain itu mulai detik = input_waktu selesai selesai selain itu mulai sisa = input_waktu selesai selesai jika (panjang detik 2 atau 1 dan < 60) atau (panjang sisa = 2 dan 'AM' atau 'PM') mulai kembalikan nilai true selesai. b) Normalisasi Angka.

(11) 71 Normalisasi angka diperlukan hanya apabila pada kata yang dimasukkan terdapat karakter angka. Input teks berupa angka seperti “1234” tidak dapat digenerasi fonemnya sebelum dinormalisasi terlebih dahulu menjadi “seribu dua ratus tiga puluh empat”. Algoritma yang lebih kompleks diperlukan apabila penulisan angka tersebut mencapai jutaan atau milyaran. Pada awalnya sudah dipersiapkan representasi huruf dari setiap angka yaitu “satu”, “dua”, “tiga”, “empat”, “lima”, “enam”, “tujuh”, “delapan”, “sembilan”, dan “sepuluh”. Selain itu disiapkan pula representasi satuan yaitu “belasan”, “puluhan”, “ratusan”. Tiga satuan ini selalu berulang setiap tiga karakter. Satuan yang berikutnya yang muncul dalam setiap kelipatan tiga karakter antara lain “ribu”, “juta”, “milyar”, dan “trilyun”. Input berupa angka akan dilakukan iterasi setiap 3 karakter untuk mendapatkan satuan yang benar. Dalam setiap iterasi itu selain dilakukan pengubahan angka ke representasi angka, akan diselipkan pula representasi satuan yang tepat. Sebagai contoh pada input angka 123.456.789.012 maka akan dilakukan iterasi dari satuan terkecil yaitu yang paling kanan. Pada angka di atas, dua belas akan disebut terlebih dahulu, kemudian digabungkan dengan tujuh ratus delapan puluh sembilan. Pada putaran 3 karakter yang pertama, diselipkan satuan ribu, maka hasilnya tujuh ratus delapan puluh sembilan ribu dua belas. Proses berikutnya mengubah 456 menjadi empat ratus lima puluh enam dan diselipkan dengan satuan juta, sehingga menjadi empat ratus lima puluh enam juta tujuh ratus delapan puluh sembilan ribu dua belas. Proses terakhir yaitu mengubah 123.

(12) 72 menjadi seratus dua puluh tiga dan diselipkan dengan milyar. Setelah digabung maka menjadi seratus dua puluh tiga milyar empat ratus lima puluh enam juta tujuh ratus delapan puluh sembilan ribu dua belas.. Gambar 3.3 Proses Normalisasi Angka. Pseudocode prosedur nominal string_angka = input; %split_number memecah string_angka %menjadi bagian - bagian kecil dengan panjang maksimum %setiap bagian kecil sebesar tiga, fungsi ini juga %menempelkan satuan untuk setiap angka [hasil , satuan]= split_number(string_angka) dari i = 1 sampai dengan banyak_yang_telahdipecah(hasil) mulai %fungsi proses menerjemahkan untaian karakter angka %ke dalam kata, fungsi proses ini memiliki dua subproses %subproses pertama berguna untuk mengkonversi input menjadi %bilangan ratusan %subproses yang kedua berguna untuk mengkonversi input menjadi %bilangan puluhan proses ( hasil(i) ) selesai.

(13) 73. selesai. c) Proses Normalisasi Singkatan. Dr. Robert Imam. Pemisahan kata. Dr.. Normalisasi singkatan. doktor. Robert. Normalisasi singkatan. Robert. Imam. Normalisasi singkatan. Imam. Gambar 3.4 Proses Normalisasi Singkatan. Dalam Bahasa Indonesia, singkatan dalam pengucapan beberapa kata yang umum digunakan dalam kehidupan sehari-hari merupakan hal yang lazim dalam penulisan. Pada umumnya singkatan digunakan dalam penggunaan gelar atau kata penghubung. Meskipun beberapa singkatan dianggap bukan merupakan suatu bentuk yang baku dalam tata bahasa Indonesia akan tetapi singkatansingkatan tersebut banyak digunakan untuk mempermudah penulisan. Contoh yang terlihat jelas pada penyebutan gelar misalkan Dr. Robert Imam. Kata “Dr.” pada nama tersebut tidak dibaca dengan dua huruf terpisah yaitu d.

(14) 74 dan r melainkan dibaca menggunakan kepanjangan dari singkatan tersebut yaitu dokter. Pada proses normalisasi singkatan ini, pada awalnya teks akan dipisah-pisahkan tiap katanya, dan kemudian setiap kata tersebut akan dicocokkan di database apakah memiliki pasangan pada tabel singkatan. Apabila didapatkan kata yang berupa singkatan, maka kata tersebut akan diganti dengan kepanjangan dari singkatan yang bersangkutan.. Tabel 3.1 Daftar Singkatan bpk. dgn dr. Dr. Dra. Drg. Drh. Drs. etc. Ir. Ka. Kab. Nn. no. Ny. Red. ref. reg. rhs. tel. telp.. bapak dengan dokter doktor doktoranda dokter gigi dokter hewan doktorandus contoh insinyur kepala kabupaten nona nomor nyonya redaksi referensi register rahasia telepon telepon. Pseudocode modul singkatan dari i bernilai 1 sampai jumlah data singkatan mulai jika input termasuk dalam data singkatan mulai.

(15) 75. kembalikan kepanjangan dari singkatan tersebut break selain itu kembalikan nilai input selesai selesai. 3.4.2. Pengenalan Kontekstual. Pengenalan kontekstual dilakukan dengan mengasumsikan: 1. pelafalan suatu kata bergantung pada kategori sintaksisnya. 2. Kategori sintaksis bergantung pada kategori sintaksis kata sebelumnya Berdasarkan karateristik tersebut, pemodelan n-gram yang digunakan pada aplikasi BlueTTS berbentuk bigram. Berikut adalah contoh bigram yang dimaksud: Kata : mental ujang itu baja. 'mental'. 'adjektiva'. 'ujang'. 'nama'. 'itu'. 'pronomina'. 'baja'. 'nomina'. ‘.'. 'tbaca'. Dari tabel bigram yang dibangun berdasarkan contoh–contoh kalimat kemudian dilakukan perhitungan transisi dan emisi setiap kata •. Transisi adalah probabilitas suatu kata dengan mengingat kata sebelum yang menyertainya. •. Emisi adalah probabilitas kategori sintaksis dari suatu kata.

(16) 76 rumusan perhitungan:. T (ks i , ks j ) ≈. E (k i , ks j ) ≈. (ks i , ks j ) ks j. (perhitungan transisi). (ki , ks j ) ks j. (perhitungan emisi). catatan : ksj merupkan kategori sintaksis ke j ki merupakan kata ke i Contoh perhitungan transisi dan emisi dari sekumpulan data yang telah kita miliki Mental memiliki tiga kemungkinan emisi: verba, adjektiva, nomina Perhitungan emisi : (mental,verba). =. Banyak kata mental yang memiliki kategori sintaksis verba Jumlah verba. (mental,adjektiva) = Banyak kata mental yang memiliki kategori sintaksis adjektiva Jumlah adjektiva (mental,nomina) = Banyak kata mental yang memiliki kategori sintaksis nomina Jumlah nomina Perhitungan transisi : (verba,verba ). =. Banyak verba yang diikuti oleh verba Jumlah verba. (verba,adjektiva) = Banyak verba yang diikuti oleh adjektiva Jumlah adjektiva (verba,nomina). = Banyak verba yang diikuti oleh nomina Jumlah nomina.

(17) 77. Tabel 3.2 Tabel Transisi dan Emisi. Dengan adanya perhitungan transisi dan emisi tersebut (perhitungan dilakukan pada kumpulan kalimat yang telah kita buat) maka kita dapat melakukan penentuan kategori sintaksis yang berkesesuaian.

(18) 78. mental. Verba. Adj. Ujang. nama. itu. Pron. baja. Nomina. Nomina. Gambar 3.5 Graph kemungkinan kata Perhitungan tersebut dapat dilakukan dengan mencari jalur dengan probabilitas yang paling maksimum, probabilitas didapat dari perkalian emisi dan transisi pada setiap kata. Pseudocode modul getSintaksis load seluruh corpus data string_input = input berupa kalimat [morph_lex,kategori_sintaksis] = buat corpus data dan pasangan tagnya menjadi unik / tepat satu [emisi,transisi] = corpus_to_bigram(string_input,porh_lex,tag) corpus = normalisasi kalimat kategori sintaksis yang mungkin = cari kategori sintaksis yang sesuai dengan input use_bigram(corpus,emisi,transisi,kategori sintaksis yang mungkin,input kalimat,morph_lex,tag); modul corpus_to_bigram buat array dua dimensi bernama emisi; buat array dua dimensi bernama transisi; buat array satu dimensi bernama jumlah; set nilai emisi menjadi 0 set nilai transisi menjadi 0.

(19) 79 set nilai jumlah menjadi 0 dari i = 2 sampai dengan jumlah data string input mulai baris = cari data (i) pada kategori_sintaksis; kolom = cari data (i-1) pada kategori_sintaksis; transisi[baris][kolom] = transisi[baris][kolom] + 1; jumlah[kolom] = jumlah[kolom]+1; selesai jumlah_kategori_sintaksis = panjang(kategori_sintaksis) dari i = 1 sampai dengan jumlah kategori_sintaksis mulai dari j = 1 sampai dengan jumlah kategori_sintaksis mulai transisi[i][j] = transisi[i][j] / jumlah[j]; selesai selesai set nilai jumlah menjadi 0; dari i = 1 sampai dengan jumlah string input mulai baris = cari data (i) pada morph_lex; kolom = cari data (i) pada kategori sintaksis emisi[baris][kolom] = emisi[baris][kolom] + 1; jumlah[kolom] = jumlah[kolom]+1; selesai dari i = 1 sampai dengan jumlah morph_lex mulai dari j= 1 sampai dengan jumlah kategori_sintaksis mulai emisi[i][j]= emisi[i][j] / jumlah[j]; selesai selesai modul use_bigram insialisasi nilai v dengan –inf vOld = v; hitung v pertama dengan jumlah kemungkinan transisi untuk setiap kategori sintaksis pada kata pertama dari i = 2 sampai dengan jumlah kata - kata dalam kalimat mulai n_transisi_sebelum = n_transisi_sekarang pos_transisi_sebelum = pos_transisi_sekarang bersihkan nilai v dari j = 1 sampai dengan jumlah kemungkinan kategori sintaksis mulai cari nilai pos_transisi_sekarang set bestValue = - inf set bestPath = 0 dari k = 1 sampai dengan n_transisi_sebelum mulai value =.

(20) 80 kemungkinan transisi(pos_transisi_sekarang(k),pos_transisi_ sebelum(j)); jika value > bestValue maka bestValue = value; bestPath = k; selesai selesai v(j) = bestValue * kemungkinan emisi(posisi_kata,pos_transisi_sekarang(j)) path(j,i) = bestPath selesai vOld = v selesai cari index maksimum nilai v lakukan back-tract untuk mengambil jalur yang sudah disimpan. 3.4.3. Pemisahan Kata Dasar. Kosakata dalam Bahasa Indonesia kebanyakan menambahkan imbuhan pada awal atau akhir kata agar dapat digunakan sesuai dengan konteks kalimatnya. Satu kata dasar dalam Bahasa Indonesia dapat memiliki banyak makna dengan menggunakan imbuhan yang berbeda. Dalam kelanjutan pembuatan sistem BlueTTS ini penulis akan menggunakan metode neural di mana kata secara utuh menjadi input dari neural network tersebut. Oleh karena itu, keragaman kata yang sangat banyak apabila disertai dengan imbuhan dapat menjadi masalah. Pemisahan kata dasar dengan imbuhannya menjadi salah satu cara untuk meminimalkan jumlah kata yang akan digunakan. Dalam tugas akhir ini penulis telah memisahkan beberapa kemungkinan imbuhan awalan antara lain ber, ter, mem, men, meng, per, ke, peng, me, pen, pem, pe dan.

(21) 81 beberapa kemungkinan imbuhan akhiran yaitu kan dan an. Pada skripsi ini penulis hanya memasukkan imbuhan yang umum digunakan saja. Pada awalnya akan dicek terlebih dahulu, apakah terdapat imbuhan awalan pada awal kata, apabila terdapat awalan yang cocok, maka akan dipisahkan terlebih dahulu. Kemudian langkah berikutnya akan mengecek apakah terdapat imbuhan akhiran pada akhir kata. Apabila ditemukan imbuhan akhiran pada bagian belakang kata, maka akan dilakukan pemotongan terhadap imbuhan tersebut. Kemudian akan dicek kembali awalannya dan seterusnya. Pemotongan imbuhan hanya dilakukan apabila sisa dari pemotongan lebih dari 3 huruf. Sebagai contoh, kata memperbudakkan, pada pemisahan awalan, prefiks memakan dipisahkan dengan perbudakkan. Setelah itu kata tersebut akan diproses dalam pencarian akhiran sehingga sufiks –kan akan dipisahkan dan sisa kata menjadi perbudak. Setelah itu akan dilakukan pemotongan awalan lagi sehingga prefiks per- akan dipotong dan menyisakan kata dasar budak. Perulangan berhenti karena tidak ditemukan lagi adanya awalan dan akhiran yang cocok..

(22) 82. Kata berimbuhan. Pemotongan awalan. Kata berimbuhan. Pemotongan akhiran. Kata dasar / kata berimbuhan. Gambar 3.6 Proses Normalisasi Kata Dasar. pseudocode prosedur kataDasar jika isHomograph(input_kata) ~= 1 mulai prefix, sisa, flag = panggil cekAwalan(awalan, input_kata) jika flag = 1 mulai postfix, sisa, flag = panggil cekAkhiran(akhiran, sisa) jika flag = 1 mulai prefix1 sisa flag = cekAwalan(awalan,sisa) data = strvcat(prefix,prefix1,sisa,postfix) selesai selain itu mulai prefix1 sisa flag = cekAwalan(awalan,sisa) data = strvcat(prefix,prefix1,sisa) selesai selesai selain itu mulai postfix sisa flag = cekAkhiran(akhiran,sisa) jika flag = 1 mulai data = strvcat(prefix,sisa,postfix) selesai selain itu mulai data = strvcat(prefix,sisa) selesai.

(23) 83 selesai selesai selain itu mulai data = input_kata selesai prosedur cekAwalan dari 1 sampai jumlah baris awalan mulai cekmem = false jika input_kata mengandung awalan(a) mulai jika digit input_kata <= digit awalan mulai cekmem = true selesai selain itu mulai jika awalan(a) = 'mem' mulai jika digit input_kata berikutnya mengandung vokal mulai cekmem = true selesai selesai selesai jika cekmem = false mulai dari jumlah digit awalan(a) sampai jumlah digit input_kata - 1 mulai tampung(c) = input_kata(jumlah digit awalan(a) + c) c bertambah 1 selesai jika tampung = '' selain itu mulai jika jumlah digit tampung <= 3 selain itu mulai prefix = awalan(a) sisa = tampung flag = 1 break selesai selesai selesai selesai selesai prosedur cekAkhiran dari 1 sampai jumlah baris akhiran mulai.

(24) 84 jika kata mengandung akhiran(a) dan (jumlah digit kata dikurangi jumlah digit akhiran(a) + 1) = nilai paling besar dari index kata yang mengandung akhiran(a) mulai dari 1 sampai selisih dari jumlah digit input_kata dengan jumlah digit akhiran(a) mulai tampung(b) = input_kata(b) selesai jika tampung = '' mulai break selesai selain itu jika selisih jumlah digit input_kata dengan jumlah digit akhiran(a) <= 4 mulai break selesai selain itu mulai sisa = tampung postfix = akhiran(a) flag = 1 break selesai selesai selesai. 3.4.4. Penggenerasian Fonem. Dalam proses pengiriman input melalui tools speech synthesizer, dibutuhkan fonem-fonem yang akan digunakan. Oleh karena itu, setelah kata melewati proses normalisasi maka kata tersebut dapat diproses lebih lanjut dalam proses penggenerasian fonem. Dalam proses penggenerasian fonem, penulis menggunakan pendekatan neural network yaitu backpropagation agar dapat mengenali fonem apa saja yang digunakan oleh suatu kata. Dengan penggunaan backpropagation, maka proses pengenalan dapat terus belajar dari kata baru yang dimasukkan..

(25) 85. Gambar 3.7 Proses Penggenerasian Fonem. Dalam penggunaan metode backpropagation ini hal yang menjadi permasalahan ialah bagaimana menentukan node input dan output yang diinginkan sehingga bisa menjadi suatu pola. Representasi node input dan output harus memiliki pola tertentu dan bersifat konstan terhadap nilai input yang sama.. 3.4.5. Alfabet dan Fonem Bahasa Indonesia secara keseluruhan memiliki 26 jenis alfabet dan 29 jenis. fonem. Tidak semua alfabet dalam Bahasa Indonesia memiliki representasi fonem yang sama. Pada beberapa fonem, memiliki bentuk huruf yang sama namun berbeda pengucapan. Misalnya fonem e pada kakek dan ə pada lebah memiliki representasi huruf yang sama yaitu e. Berikut ini daftar alfabet dan fonem yang terdapat pada Bahasa Indonesia dapat dilihat pada tabel 3.2.. Tabel 3.3 Daftar Alfabet dan Fonem Alfabet A. Fonem N. /p/. /r/.

(26) 86 Alfabet A B C D E F G H I J K L M. Fonem N O P Q R S T U V W X Y Z. /p/ /b/ /t/ /d/ /k/ /g/ /c/ /j/ /f/ /s/ /z/ /h/ /m/ /n/ /ng/. /r/ /l/ /w/ /y/ /ny/ /a/ /ə/ /e/ /i/ /o/ /u/ /ai/ /oi/ /au/. Inti dari neural network ini adalah mencari pola pengenalan fonem di mana ketika kita masukkan suatu kata ke dalam neural network maka akan menghasilkan output berupa rangkaian fonem yang diharapkan. Agar dapat menghasilkan output yang akurat dibutuhkan jumlah training yang cukup banyak mengingat bahwa kombinasi dari alfabet dan kombinasi fonem memiliki jumlah yang sangat besar. Keuntungan dari penggunaan neural network di sini ialah mesin dapat mengenali fonem dari kata-kata yang baru dikenali.. 3.4.6. Inisialisasi Neural Network. Sebelum aplikasi dapat dijalankan, sebelumnya dibutuhkan inisialisasi jumlah dari kategori yang akan digunakan dan inisialisasi variabel neural network yang akan menyimpan nilai-nilai weight yang akan digunakan dalam proses training dan untuk mengenali input yang diberikan dalam proses pengenalan. Selain itu, variabel neural.

(27) 87 network juga digunakan untuk menentukan jenis transfer function (tansig, logsig, purelin) dan training function (trainlm, trainbfg, trainrp, traingd, dll.) yang akan digunakan dalam proses training.. pseudocode modul BlueTTS_init %digunakan untuk menginisialisasi input dan target serta neural %network yang akan digunakan inisialisasi jumlah node per huruf inisialisasi jumlah fonem inisialisasi jumlah panjang karakter input inisialisasi nama_file baca input dan target dari file nama_file dan masukkan sebagai data pattern dengan memanggil modul addPatternFromFile buat arsitektur neural network menggunakan perintah newff dengan memasukkan jumlah input , hidden layer dan hidden node, dan jumlah target mengesave input, target, dan variabel neural net ke dalam file. modul addPatternFromFile %digunakan untuk membaca seluruh isi file untuk dijadikan pattern %sebagai data training buka file looping selama file masih bisa dibaca mulai baca 1 baris pada file ambil kata pertama dari file sebagai input ambil kata kedua dari file sebagai kategori sintaksis ambil sisa kata dari file sebagai target fonem masukkan kata, kategori sintaksis, dan target fonem menjadi sebuah pattern dengan memanggil modul addPattern selesai kembalikan semua pattern.

(28) 88. modul addPattern %digunakan untuk merubah input dan target ke bentuk representasi node %dan menggabungkannya ke dalam sebuah pattern ubah input menjadi bentuk node tentukan sifat kategori sintaksis pada setiap input dan mengatur nilai daripada nodenya ubah target menjadi bentuk node kembalikan nilai node input dan node target. 3.4.7. Representasi Node Input. rangkaian huruf dan kategori sintaksis. representasi node input kategori alfabet. representasi node input kategori sintaksis. node pada input layer. Gambar 3.8 Proses Representasi Node pada Input Layer. Input dalam neural network ini berupa gabungan huruf dalam setiap kategorinya. Misalkan pada kata buku maka input pada neural network akan berisi kategori b, u, k, dan u. Setiap huruf harus bisa direpresentasikan dalam node neural network sehingga harus diubah menjadi representasi rangkaian node bernilai 1 dan 0. Dalam menentukan representasi node input, diperlukan suatu perhitungan terhadap alfabet yang menghasilkan nilai yang konstan. Dalam penelitian-penelitian sebelumnya banyak metode-metode untuk merepresentasikan alfabet dalam node-node yang bernilai antara 0-1. Contoh dari metode tersebut adalah menggunakan representasi nilai biner terhadap nilai ASCII dari karakter yang bersangkutan. Selain itu ada pula yang menggunakan nilai desimal untuk menentukan urutan alfabet dengan nilai antara 0-.

(29) 89 1 dengan jarak nilai 1/26 antar alfabet. Di tugas akhir ini penulis menggunakan metode yang merepresentasikan posisi alfabet dalam urutan alfabet.. Tabel 3.4 Daftar Input Node Alfabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z. Nilai Node 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1. Setiap kategori pada input node akan terdiri dari 27 node. Dua puluh enam node merupakan total dari alfabet Bahasa Indonesia dan 1 node berikutnya merupakan spasi atau pergantian kata yang berarti kondisi diam (silence). Dua puluh tujuh node tersebut akan bernilai 0 dan memiliki 1 node yang bernilai 1 di mana posisi node tersebut menunjukkan posisi huruf tersebut dalam alfabet. Misalkan huruf b direpresentasikan.

(30) 90 dengan 26 node yang bernilai 0 dan node ke-2 bernilai 1. Menyalanya node kedua menunjukkan bahwa input tersebut adalah alfabet yang berada pada node kedua yang berarti huruf b. Dilanjutkan dengan huruf berikutnya pada 27 node berikutnya. Jumlah kategori bisa bervariasi, namun untuk membatasi, penulis menggunakan 11 kategori yang berarti terdiri dari 297 node input. Selain 11 kategori tersebut, node input juga ditambahkan dengan 4 node yang menandakan 4 macam kategori sintaksis yang menyatakan karakteristik sintaksis dari kata homograf apakah kata kerja, kata benda, atau kata keterangan, ditambah pula dengan nilai default untuk kata-kata selain homograf. Empat node tersebut akan menyala salah satunya untuk menentukan termasuk kategori sintaksis yang manakah kata yang diberikan. Sebagai contoh, apel yang merupakan kata benda akan bernilai 1 pada node yang pertama dari 4 node tersebut dan apel yang merupakan kata kerja akan bernilai 1 pada node kedua dari 4 node tersebut. Dengan 11 kategori alfabet ditambah dengan 4 kategori sintaksis, maka total node pada layer input berjumlah 301 node..

(31) 91. kategori. b. indeks 1 0. 2 1 3 0 4..27 .... 28 u. 0. 29…47 0 48. 1. 49..53 .... k. 54..63. 0. 64. 1. 65. 0. 66..79 .... u. -. 80. 0. 81..91. 0. 92. 1. 93..105 ... .... .... weight. .... .... Input layer. .... Gambar 3.9 Representasi Node Input. Hidden layer.

(32) 92 pseudocode modul alphabet2node %berfungsi mengubah kata input menjadi ke dalam representasi node buat array inputVector sebesar 27 x jumlah kategori + jumlah jenis kategori sintaksis urutan kategori dimulai dari 0 dari i = 1 sampai panjang input kata mulai jika input(i) merupakan karakter 'a' – 'z' mulai %node pada urutan alfabet dalam kategori akan menyala inputVector(urutan kategori * 27 + ascii_input - 96) = 1 selesai selain itu jika input(i) merupakan karakter '_' mulai %node pada urutan terakhir dalam kategori akan menyala inputVector(urutan kategori * 27 + 27) = 1 selesai urutan kategori bertambah 1 selesai modul sintaksis2node %menentukan isi dari 4 node terakhir yang merupakan ciri sintaksis jika kategori sintaksis merupakan kata benda inputVector(jumlah karakter * 27 + node pertama) = 1 selain itu jika kategori sintaksis merupakan kata kerja inputVector(jumlah karakter * 27 + node kedua) = 1 selain itu jika kategori sintaksis merupakan kata keterangan inputVector(jumlah karakter * 27 + node ketiga) = 1 selain itu inputVector(jumlah karakter * 27 + node keempat) = 1 selesai kembalikan nilai inputVector.

(33) 93 3.4.8. Representasi Node Output. rangkaian fonem. representasi node output kategori fonem. node pada output layer. Gambar 3.10 Proses Representasi Node pada Output Layer. Dalam pengenalan fonem ini output yang diharapkan ialah rangkaian fonem Bahasa Indonesia yang telah terdaftar dalam database dari MBROLA. Daftar fonem yang terdaftar dapat dilihat pada tabel 3.4 beserta penulisan fonem dalam format yang dibutuhkan.. Tabel 3.5 Daftar Fonem Posisi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23. Fonem p b t d k g c j f s z h m n ng r l w y ny a e e. Contoh apa abang atap tadi akan gila cari jadi kafan kasar zebra hitam aman anda angka armada alamat bawa bahaya kenyang bapa petang medan. SAMPA p b t d k g tS dZ f s z h m n N r l w j nY V @ e. Node 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1.

(34) 94 24 25 26 27 28 29 30. i o u ai oi au _. bila mohon bukan santai amboi lampau silence. I Q U aI OI aU _. 0/1 0/1 0/1 0/1 0/1 0/1 0/1. Dalam representasi fonem ke dalam node pada output layer, penulis menggunakan metode yang sama dengan representasi input ke dalam node pada input layer. Total dari jumlah fonem ada 29 ditambah dengan kondisi diam, menjadi 30 macam. Output pada output layer akan terdiri dari 11 kategori yang masing-masing kategori memiliki 30 node. Kategori tersebut mewakili posisi fonem dari daftar yang telah ditentukan dan setiap kategori berisi 30 node yang bernilai 0 pada 29 nodenya dan menyala pada node dengan posisi yang sama dengan fonem yang diinginkan. Pada node yang menyala, penulis memberikan nilai 0,9 dan pada node yang mati, penulis memberikan nilai 0,1. Alasan daripada penggunaan nilai desimal ini karena hasil dari fungsi aktivasi yang akan dilalui tidak akan dapat bernilai bulat sehingga menggunakan nilai 0,1 dan 0,9 akan meningkatkan kecepatan proses training..

(35) 95 output layer. hidden layer. 0.9. 1. 0.1. 2. 0.1. 3. 0.1 …. fonem. p. 4..29. 0.1. 30. 0.1. 31..45. 0.9. 46. 0.1. 47..59. r. …. .... weight. 0.1. 60..80. 0.9. 81. 0.1. 82..89. V. …. Gambar 3.11 Representasi Node Output. Pseudocode modul phoneme2node %mengubah target fonem menjadi representasi node Ubah setiap karakter fonem menjadi nomor urut fonem dengan memanggil modul getPhonemeIndexes, masukkan ke variabel array indexes buat array targetVector bernilai 0.1 dengan ukuran 30*jumlah karakter lakukan perulangan i dari 1 sampai panjang karakter mulai targetVector ( urutan kategori * 30 + indexes(i) ) = 0.9 selesai.

(36) 96 3.4.9. Proses Training. Dalam proses training, penulis memasukkan data-data berupa kata-kata yang umum digunakan dalam Bahasa Indonesia dan melakukan proses backpropagation yang terdiri dari forward, backward, dan update weight hingga current error mencapai target error.. inisialisasi net, input, dan target. lakukan proses training. simpan nilai net yang berisi weight. Gambar 3.12 Tahapan Proses Training. Jumlah hidden layer yang digunakan dalam tugas akhir ini menggunakan 1 hidden layer dengan jumlah node yang sama dengan node input. Semua pattern akan dimasukkan ke dalam neural network hingga didapatkan suatu nilai weight yang cocok digunakan oleh semua pattern. Proses ini membutuhkan waktu yang cukup lama. Semakin banyak pattern yang dimasukkan maka proses pengenalan akan semakin baik, berhubung dalam Bahasa Indonesia terdapat 26 alfabet dengan jutaan kombinasi maka untuk mencapai hasil yang maksimal perlu dimasukkan pattern yang sangat banyak.. Pseudocode modul BlueTTS_train %digunakan untuk melakukan training inisialisasi jumlah epoch.

(37) 97. inisialisasi target error handle_file meload data dari file penyimpanan data neural net = handle_file.net; jumlah karakter = handle_file.n; apabila ada data yang berubah maka baca input dan target lagi dengan modul addPatternFromFile, jika tidak, baca input dan target dari handle_file lakukan training dengan menjalankan perintah train(net,input,target) save input, target, neural net, yang baru ke dalam file. 3.4.10 Pengenalan Input. Dalam pengenalan input, kata yang dimasukkan oleh pengguna dan telah dinormalisasi akan dimasukkan ke dalam input layer sesuai dengan proses representasi node input. Kemudian akan dilakukan proses forward dengan menggunakan weight yang sama dengan hasil training tadi. Kemudian proses forward tersebut akan menghasilkan nilai pada node output, hasil dari nilai-nilai inilah yang akan dikenali sebagai fonem daripada input tersebut.. node output. tentukan indeks nilai tertinggi pada setiap kategori fonem. kembalikan fonem dari daftar fonem. rangkaian fonem. Gambar 3.13 Proses Pemilihan Fonem dari Node Output Hasil pada node output tidak berupa angka yang bulat antara 0 dan 1 saja, melainkan dari ratusan node, nilainya akan bervariasi antara 0 – 1 berupa bilangan.

(38) 98 desimal. Oleh karena itu untuk menentukan fonem yang didapat, diperlukan proses filtering pada nilai-nilai pada node output.. output layer. input layer. hidden layer. 0.8. 1. 0.2. 2. 1. p. p. kategori input. r. a. .... fonem. .... weight. Gambar 3.14 Proses Pengenalan Data. 0.3. 3. 0.6 …. 4..30. 0.2. 31. 0.4. 32..46. 0.9. 47. 0.2 …. 48..60. 0.7. 61..81. 0.8. 82. 0.2 …. 83..90. r 1. 1. V.

(39) 99 Pada node output yang terdiri dari banyak kategori, sudah dapat dipastikan bahwa setiap kategori yang terdiri dari 30 node hanya boleh memiliki 1 node yang bernilai 1 dan sisanya harus bernilai 0. Oleh karena itu pada setiap kategori akan dilihat nilai yang tertinggi pada kategori tersebut. Apabila nilai tertinggi pada kategori tersebut bernilai lebih besar dari 0,5 maka akan dinaikkan menjadi 1 dan node-node lain akan diubah menjadi bernilai 0. Proses ini membuat nilai 1 hanya ada satu di setiap kategori. Kemudian dari posisi node yang bernilai 1 itu dapat ditentukan fonem yang bersangkutan.. Pseudocode modul node2phoneme %digunakan untuk mengembalikan representasi node ke dalam bentuk %fonem inisialisasi urutan kategori dengan nilai 1 inisialisasi array fonem ulang dari 1 sampai jumlah karakter mulai cari nilai maksimal dalam kategori yang aktif jika nilai maksimal > 0,5 mulai masukkan indeks nilai maksimal tersebut ke dalam array fonem sebagai nilai berikutnya selesai tambahkan nilai urutan kategori selesai kembalikan fonem yang dihasilkan dengan menggunakan modul getPhonemeByIndex(fonem) modul getPhonemeByIndex %mengembalikan fonem berdasarkan indeks pada daftar.

(40) 100 phoneme = inisialisasi daftar fonem ('p','b','t','d','k','g','tS','dZ','f','s','z','h','m','n','N','r','l', 'w','j','nY','V','@','e','I','Q','U','aI','OI','aU','_'); inisialisasi array fonemString dari 1 sampai panjang indeks fonem yang diterima mulai masukkan karakter fonem yang diambil dari indeks yang diberikan oleh parameter fonem sesuai daftar fonem, ke dalam fonemString selesai kembalikan nilai fonemString. 3.5. Penentuan Prosodi. Parameter yang dibutuhkan dalam file pho pada setiap barisnya berisi fonem, durasi, dan pitch pattern. Oleh karena itu sebelum file input dibuat, akan digenerasi terlebih dahulu durasi dan intonasi dari fonem yang telah dihasilkan dari proses neural network sebelumnya. Format penulisan parameter input yang dibutuhkan oleh MBROLA antara lain:. <fonem> <durasi> <pitch pattern>. Fonem didapat dari hasil neural network sebelumnya, berdasarkan huruf yang dimasukkan. Durasi merupakan lamanya pengucapan fonem yang bersangkutan. Pitch pattern merupakan rangkaian intonasi yang memberikan nada pada pengucapan fonem. Setiap input dapat terdiri dari rangkaian pitch pattern. Setiap pitch pattern memiliki dua nilai yaitu durasi pitch dan besarnya frekuensi.. V 75 26 125 53 124 79 123.

(41) 101. Pada contoh di atas dapat disimpulkan bahwa, input berisi fonem V, dengan durasi 75 ms dan memiliki 3 pitch pattern. Pitch pattern pertama yaitu 26 dan 125 yang berarti hingga mencapai 26 % dari durasi penuh, frekuensi nada bernilai 125 Hz, kemudian hingga mencapai 53 % dari durasi penuh, frekuensi nada akan menurun menjadi 124 Hz, dan hingga mencapai 79 % dari durasi penuh maka frekuensi akan menurun lagi hingga mencapai 123 Hz. Pada pembuatan aplikasi BlueTTS ini penentuan prosodi tidak menggunakan neural network sehingga sudah ditentukan secara pasti berapa nilai pitch pattern untuk setiap fonem berdasarkan posisi dan karakteristik dari fonem tersebut.. Pseudocode modul createProsody %buat prosody berdasarkan letak fonem Lakukan perulangan selama i lebih kecil dari panjang input Mulai jika input(i) merupakan tanda baca maka mulai tuliskan tanda diam pada string pho selain itu tuliskan fonem input(i) pada string pho selesai tentukan prosody yang akan ditulis berdasarkan posisi input(i) terhadap tipe tanda baca dan posisi pada kata dengan memanggil modul getProsody dan tuliskan pada string pho selesai kembalikan nilai string pho modul getProsody %mengambil nilai prosody yang sudah disiapkan lihat nilai parameter mulai jika parameter bernilai 1 %huruf depan vokal p = '80 0 95';.

(42) 102 jika parameter bernilai 2 %huruf belakang vokal p = '100 0 100'; jika parameter bernilai 3 %huruf tengah vokal p = '80 0 110'; jika parameter bernilai 4 %kalo 2 konsonan p = '100 0 100'; jika parameter bernilai 5 %huruf depan konsonan p = '80 0 95'; jika parameter bernilai 6 %huruf belakang konsonan p = '100 0 100'; jika parameter bernilai 7 %huruf tengah vokal p = '90 0 110'; jika parameter bernilai 8 %di belakang tanda koma p = '100 0 80 50 100'; jika parameter bernilai 9 %di belakang tanda titik p = '100 0 80'; jika parameter bernilai 10 %di belakang tanda tanya p = '100 0 130'; jika parameter bernilai 11 %di belakang tanda seru p = '90 0 130 50 100'; selesai kembalikan nilai p. 3.6. Penulisan File Input. Hasil dari proses pengenalan fonem dan penggenerasian durasi dan prosodi harus dituliskan dalam bentuk file berformat .pho agar dapat dibaca oleh speech synthesizer. Penulisan parameter terdiri dari fonem, durasi, dan prosodi. Contoh dari penulisan antara lain seperti di bawah ini.. … V 75 26 125 53 124 79 123 m 113 0 113 17 127 35 128 52 129 70 129.

(43) 103 _ 100 …. Karakter pertama merupakan fonem yang dikeluarkan, kemudian 1 angka berikutnya adalah durasi daripada pengucapan fonem tersebut. Setelah itu, sisa rangkaian angka yang tertulis merupakan rangkaian pitch pattern yang telah digenerasi sebelumnya.. 3.7. Penggenerasian Suara. Setelah file berformat pho telah dibuat maka akan digunakan tool speech synthesizer yang dapat menggenerasi suara berdasarkan file input yang diberikan. Pada tugas akhir ini penulis menggunakan tool MBROLA yang menerima file input berformat pho. Dengan menggunakan file mbrola.exe dan database Bahasa Indonesia yang dimiliki maka akan dijalankan rangkaian suara yang akan mengucapkan kalimat yang terdapat pada file input. Pemanggilan program dapat dijalankan dengan perintah:. mbrola id1 blueTalk.pho blueTalk.wav. mbrola merupakan tool speech synthesizer yang digunakan id1 merupakan database Bahasa Indonesia yang telah disediakan blueTalk.pho merupakan file input yang berisi parameter-parameter suara.

(44) 104 blueTalk.wav merupakan file berisi ucapan suara yang akan diciptakan. Setelah sintaks di atas dijalankan maka suara pengucapan teks akan berdasarkan fonem dan parameter-parameter suara yang diberikan dalam file input.. 3.8. Diagram Perancangan. BlueTTS dibuat dalam bentuk halaman-halaman form dan memiliki beberapa fungsi yang berbeda. Berikut ini berbagai diagram rancangan daripada aplikasi BlueTTS.. 3.8.1. Proses Kerja Aplikasi. Pada aplikasi ini user dapat melakukan berbagai hal pada form yang berbedabeda. Secara keseluruhan terdapat 4 halaman form yang digunakan untuk menjalankan atau mengkonfigurasi aplikasi..

(45) 105 a) Diagram transisi pada halaman utama.

(46) 106 Gambar 3.15 Diagram Transisi Pengucapan Teks b) Diagram Transisi Menu File. Gambar 3.16 Diagram Transisi Menu File. c) Diagram Transisi Menu View. Gambar 3.17 Diagram Transisi Menu View.

(47) 107 d) Diagram Transisi Menu Help. Gambar 3.18 Diagram Transisi Menu Help.

(48) 108 e) Diagram Transisi Form Training New Data. Gambar 3.19 Diagram Transisi Form Training New Data f) Diagram Transisi Form Manage Training Data.

(49) 109. Gambar 3.20 Diagram Transisi Form Manage Training Data.

(50) 110 g) Diagram Transisi Form Show Syntaxis Category. Gambar 3.21 Diagram Transisi Form Show Syntaxis Category.

(51) 111. 3.8.2. Perancangan Layar Aplikasi. a) Rancangan Layar Utama. Gambar 3.22 Rancangan Layar Utama. Form ini merupakan halaman utama, user dapat memasukkan kalimat lengkap dan kemudian mengklik tombol bicara, maka aplikasi BlueTTS akan mengeluarkan suara dengan membaca apa yang tertulis sesuai apa yang dimasukkan oleh user. Tombol reset digunakan untuk menghapus apa yang.

(52) 112 tertulis sebelumnya. Di bagian bawah terdapat kotak yang akan mengeluarkan analisis suara seiring suara yang sedang dikeluarkan. Selain itu user dapat menyimpan hasil suara ke dalam file wav sesuai nama file yang dituliskan di bagian bawah dengan meklik tombol simpan. Pada bagian atas terdapat menu untuk mengakses form-form yang lain.. b) Rancangan Layar Sintaksis. BlueTTS :: Layar Sintaksis View. File. Help. Layar Utama. Database Kata. BlueTTS Help. Setting Data Training. Sintaksis Kata. About. Exit. Masukkan kata di sini. Show Properties. Kategori Sintaksis setiap kata. Isi file pho berupa fonem. Sound Wave. Kembali ke layar utama. Gambar 3.23 Rancangan Layar Sintaksis. Form sintaksis digunakan untuk melihat kategori sintaksis dari setiap kata yang dimasukkan dalam kotak input. Selain ditampilkan kategori sintaksisnya, ditampilkan pula setiap fonem yang ditampilkan, dan hasil analisis suara secara.

(53) 113 keseluruhan. Untuk menampilkan data-data tersebut, user dapat mengklik tombol show properties. Tombol kembali ke layar utama dapat digunakan untuk membuka form layar utama. Pada bagian atas terdapat menu untuk mengakses form yang lain.. c) Rancangan Layar Konfigurasi Training. Gambar 3.24 Rancangan Layar Konfigurasi Training. Form konfigurasi training digunakan untuk melakukan training terhadap data yang sudah disiapkan. Training yang dilakukan akan melanjutkan training yang terdahulu dan hasil training akan selalu disimpan ke dalam file. Untuk melakukan training, user harus menekan tombol training. Selain melakukan.

(54) 114 training, user juga dapat menginisialisasi neural net baru dengan menentukan jumlah node dan hidden layer yang diinginkan setelah itu menekan tombol inisialisasi. Tombol kembali ke layar utama digunakan untuk berpindah ke form layar utama. Di bagian atas terdapat menu untuk menampilkan halaman-halaman form yang lain.. d) Rancangan Layar Database Kata. BlueTTS :: Database Kata. Kata Baru. Kata dalam database. Fonem dalam database. Daftar Fonem. Fonem Baru Default Fonem Insert. Kata yang diklik Fonem yang di klik Kata kerja Kata benda Kata sifat Update Cancel. Tulis ke file Tulis. Delete. Gambar 3.25 Rancangan Layar Database Kata. Exit.

(55) 115 Form database kata digunakan untuk menyiapkan daftar kata-kata berikut fonemnya yang akan digunakan dalam proses training. Pada halaman ini user dapat memasukkan kata baru dengan menekan tombol insert, dapat meng-update dan mendelete kata yang sudah pernah dimasukkan pula. Semua kata akan disimpan dalam database. Untuk dapat digunakan sebagai data training, kata-kata tersebut harus ditulis ke dalam sebuah file yang bernama input.txt. Untuk menulis semua kata tersebut ke dalam file, user dapat menekan tombol tulis..

(56)

Referensi

Dokumen terkait

Dari hasil survey tersebut diketahui bahwa rata-rata produktivitas tanaman karet tua yang dimiliki pekebun yang belum meremajakan dengan rata-rata umur tanaman 28,46 tahun

aplikasi dapat kembali ke menu Berdasarkan hasil pengujian dengan metode blackbox-testing pada tabel 1, maka dapat diambil kesimpulan bahwa perancangan aplikasi

Tanya: Apakah guru sudah berupaya untuk membangkitkan motivasi belajar melalui penghargaan, menciptakan lingkungan belajaar yang kondusif dan melakukan kegiatan

Ljubljansko vrtičkarstvo lahko tako umestimo v kategorijo mikrokmetovanja znotraj bivališč in okrog njih, v kategorijo mestnih vrtičkov, ki je najbolj razširjena in hkrati

Berdasarkan penelitian sebelumnya yang dilakukan oleh Huda (2009) di Puskesmas Ciputat tentang Gambaran Pengetahuan Sikap, dan Perilaku Ibu Terhadap Imunisasi Dasar

The notion of a simulation function is a very interesting tool in fixed point theory that makes it possible to merge and unify several existence fixed point theorems in a

Dari hasil analisis diperoleh rata-rata skor sebesar 2,73 berada pada interval skor 2,51 s/d 3,25 kategori “BAIK” Dengan demikian kepuasan masyarakat pengguna layanan pengadilan,

Berdasarkan pemahaman situasi dan adanya perubahan terhadap konsep sehat  – sakit serta makin layanya khasanah ilmu pengetahuan dan informasi tentang determinan kesehatan