Perancangan Sistem TTS Bahasa Indonesia
Setelah berkenalan dengan sistem TTS (Text-to-Speech), selanjutnya kita akan merancang sebuah sistem TTS bahasa Indonesia. Dalam kasus ini, kita akan membuat sebuah web based TTS.
Pada sistem TTS, seringkali dijumpai kesulitan dalam menentukan jeda pengucapan antar kata dalam sebuah kalimat. Saya mencoba untuk membuat TTS yang menentukan jeda berdasarkan konstituen kalimat. Konstituen kalimat terdiri dari Subjek, Predikat, Objek, Keterangan dan Pelengkap.
Sebagai gambaran, saya akan memberikan contoh
Saya akan pergi ke sekolah akan dibaca saya | akan pergi | ke sekolah
Pada contoh diatas :
saya berperan sebagai subjek,
akan pergi berperan sebagai predikat,
ke sekolah berperan sebagai pelengkap,
Dari pengenalan pada posting sebelumnya, kita sudah tau apa saja yang dibutuhkan. Yaitu pemrosesan bahasa alami untuk bahasa Indonesia dan pemrosesan sinyal digital. Pada kasus ini kita akan menggunakan MBROLA sebagai pemroses sinyal digital. Yang kita harus buat sekarang adalah pemrosesan bahasa alami untuk bahasa Indonesia.
Untuk pemrosesan bahasa alami, kita akan menggunakan Context Free Grammar (CFG) untuk menentukan grammar atau tata bahasa bahasa indonesia. Sesuai dengan posting mengenai Context Free Grammar kita akan menggunakan Lemon Parser Generator sebagai pembangkit parser.
Sebelum melangkah pada parser, kita juga membutuhkan lexer. Lexer akan melakukan scanning tiap kata dalam kalimat untuk menentukan tipe kata tersebut. Misalnya saja buku akan dideteksi sebagai kata benda, cantik akan dideteksi sebagai kata sifat, dan seterusnya. Hasil keluaran dari lexer, akan menjadi masukan bagi parser.
Parser akan melakukan analisa terhadap tata bahasa dari bahasa indonesia yang selanjutnya akan digunakan untuk mencari Subjek, Predikat, Objek, Keterangan, dan atau Pelengkap dari sebuah kalimat. Hasil parsing dari kalimat akan digunakan sebagai penentu jeda pengucapan kalimat tersebut seperti contoh di awal posting ini.
Setelah mendapatkan hasil analisa dari parser yang menunjukkan masing-masing konstituen kalimat, maka selanjutnya kita membutuhkan pembangkit kode fonetik. Pembangkit ini akan menentukan kode fonetik masing-masing huruf di dalam sebuah kata, dan kemudian memberikan jeda antar konstituen kalimat. (ingat kembali daftar kode fonetik bahasa Indonesia)
Sebagai contoh, kalimat aku akan pergi ke sekolah akan mempunyai kode fonetik sebagai berikut:
_ 100 V 90 25 135 50 113 25 200 k 80 0 133 U 90 25 135 50 113 25 200 _ 200 V 90 25 135 50 113 25 200 k 80 0 133 V 90 25 135 50 113 25 200 n 90 25 135 50 113 25 200 _ 50 p 80 0 133 @ 90 25 135 50 113 25 200 r 80 0 133 g 90 25 135 50 113 25 200 I 80 0 133 _ 200 k 90 25 135 50 113 25 200 @ 90 25 135 50 113 25 200 _ 50 s 80 0 133 @ 90 25 135 50 113 25 200 k 80 0 133 Q 90 25 135 50 113 25 200 l 80 0 133 V 90 25 135 50 113 25 200 h 80 0 133 _ 500
Pada contoh kode fonetik diatas, dapat dilihat jeda antar kata dalam kalimat adalah 50ms dan jeda antar konstituen kalimat adalah 200ms. Deretan angka setelah kode fonetik adalah informasi pitch. Bisa dibaca lebih lanjut di sini.
Kita akan beralih ke pemrosesan sinyal digital. Berbekal kode fonetik, kita akan membangkitkan suara menggunakan MBROLA. Untuk penggunaannya dapat dibaca dokumentasinya di sini.
Sehingga flowchart sistem secara keseluruhan dapat dilihat pada gambar dibawah ini:
Pada flowchart di atas, saya menggunakan lame untuk melakukan konversi ke MP3. MBROLA secara default membangkitkan berkas suara format WAV. Format MP3 saya pilih karena lebih mudah untuk dibagi, dan lebih kecil ukuran berkasnya
tulisan ini merupakan posting kedua mengenai Text-to-Speech. akan dilanjutkan dalam posting berikutnya
deptz :: May.26.2010 :: Uncategorized :: No Comments »

