7203030018

150
PROYEK AKHIR PEMANFAATAN GALATEA UNTUK PEMBANGUNAN KARAKTER HIDUP Sub: Speech Synthesis Module (SSM) TAUFIK WICAKSONO NRP. 7203.030.018 Dosen Pembimbing: SRITRUSTA SUKARIDHOTO, ST NIP. 132 300 372 Dr. TITON DUTONO M.Eng NIP. 131 651 258 JURUSAN TEKNIK TELEKOMUNIKASI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA SURABAYA 2006

Transcript of 7203030018

Page 1: 7203030018

PROYEK AKHIR

PEMANFAATAN GALATEA UNTUK

PEMBANGUNAN KARAKTER HIDUP Sub: Speech Synthesis Module (SSM)

TAUFIK WICAKSONO

NRP. 7203.030.018

Dosen Pembimbing: SRITRUSTA SUKARIDHOTO, ST

NIP. 132 300 372

Dr. TITON DUTONO M.Eng NIP. 131 651 258

JURUSAN TEKNIK TELEKOMUNIKASI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA

SURABAYA 2006

Page 2: 7203030018

PEMANFAATAN GALATEA UNTUK PEMBANGUNAN KARAKTER HIDUP

Sub: Speech Synthesis Module (SSM)

Oleh:

TAUFIK WICAKSONO 7203.030.018

Proyek Akhir ini Diajukan Sebagai Salah Satu Syarat Untuk

Memperoleh Gelar Ahli Madya (A.Md.)

di Politeknik Elektronika Negeri Surabaya

Institut Teknologi Sepuluh Nopember Surabaya

Disetujui oleh

Tim Penguji Proyek Akhir: Dosen Pembimbing: 1. Tri Budi Santoso, ST, MT 1. Sritrusta Sukaridhoto, ST NIP. 132.128.464 NIP. 132.300.372

2. Drs. Miftahul Huda, MT 2. Dr.Ir. Titon Dutono, M.Eng NIP. 132.055.257 NIP. 131.651.258

3. Reni Soelistijorini, B. Eng. MT NIP. 132.243.734

Mengetahui: Ketua Jurusan Telekomunikasi

Drs. Miftahul Huda, MT NIP. 132.055.257

Page 3: 7203030018

ABSTRAK

Teknologi Live Like Character adalah teknologi masa depan yang menggantikan cara interaksi manusia dengan komputer., yaitu dengan menggabungkan teknologi audio dan visual. Galatea merupakan teknologi yang memanfaatkan keunggulan tersebut. Dimana interaksi user dengan sistem dapat dilakukan dengan memberikan inputan dari keyboard dan suara. Namun teknologi speech synthesizer masih sebatas dapat digunakan untuk bahasa Jepang. Pada proyek akhir ini dijelaskan bagaimana mencapai sistem galatea yang dapat digunakan untuk bahasa Indonesia. Dengan menggunakan teknik Hidden Markov Model, yaitu suatu teknik yang digunakan untuk menghitung probabilitas suatu keadaan yang belum diketahui urutannya. Untuk membangun suatu sistem agar bisa mengeluarkan suara dengan logat bahasa Indonesia maka dibutuhkan suara sintesis dan databases suara yang besar. Pada proyek akhir ini telah dilakukan pembangun suara sintesis dengan karakteristik orang Indonesia menggunakan HMM-based Speech Synthesis System (HTS) yang merupakan penggabungan antara HTK dengan SPTK. Sehingga menghasilkan suara sintesis yang dapat digunakan di dalam Galatea. Kata Kunci − speech recognizer, speech synthesizer, facial-image synthesizer, dialog controller, communication manager, HMM, HTS, HTK, SPTK

Page 4: 7203030018

ABSTRACT

Technological Live Like Character is future technology replacing way of man interaction with computer. That is by merging audio technology and visual technology. Galatea is technology exploiting the excellence. Where interaction user with system can be done by giving input from keyboard and voice. But technological speech synthesizer still limited to Japanese applicable. At this end project is explained how reaching Galatea system applied for Indonesian Language. By using technique in Hidden Markov Model, that is an technique which applied for calculating probability of state which not been known by the sequence. To build a system so that can spend voice with Indonesian required by is synthesis voice and big voice databases. At this final project had be done for developing synthesis voice with characteristic Indonesia voice apply HMM-based Speech Synthesis System ( HTS) which is merger between HTK with SPTK. Result from this system is synthesis voice and can use for Galatea system. Key words − speech recognizer, speech synthesizer, facial-image synthesizer, dialog controller, communication manager, HMM, HTS, HTK, SPTK.

Page 5: 7203030018

KATA PENGANTAR

Puji syukur kehadirat Allah SWT atas segala karunia dan inayah NYA yang sangat besar sehingga penulis dapat menyelesaikan tugas akhir dengan judul :

PEMANFAATAN GALATEA UNTUK MEMBANGUN KARAKTER HIDUP

Sub Judul: Speech Synthesis Module (SSM) Buku tugas akhir ini disusun sebagai salah satu syarat akademik untuk memperoleh gelar ahli madya pada jurusan Teknik Telekomunikasi , Fakultas Politeknik Elektronika Negeri Suarabaya, Institut Teknologi Speuluh Nopember Surabaya. Untuk dapat memahami isi dari buku ini dengan mudah, hendaknya pembaca terlebih dahulu mengetahui latarbelakang, batasan masalah dan permasalahan yang diangkat. Dalam penyusunan buku tugas akhir ini penulis mengambil referensi dari beberapa sumber seperi teori-teori yang yang telah penulis peroleh dari perkuliahan, membaca literatur, serta bimbingan dari dosen pembimbing. Akhirnya penulis menyadari bahwa masih banyak kekurangan dan kelemahan dalam buku ini. Oleh karena itu, penulis mengharapkan saran, kritik, dan koreksi yang konstruktif untuk perkembangan lebih lanjut. Semoga buku tugas akhir ini dapat memberikan manfaat bagi pengembangan ilmu pengetahuan dan bagi semua pihak pada umumnya serta bagi penulis sendiri pada khususnya. Surabaya, Juli 2006 Penyusun

Page 6: 7203030018

UCAPAN TERIMA KASIH

Alhamdulillah. Kami panjatkan puji syukur kehadhirat Allah SWT atas segala rahmat dan hidayah-Nya sehingga kegiatan proyek akhir ini dengan judul “Pemanfaatan Galatea Untuk Pembangunan Karakter Hidup Sub: Speech Synthesis Module (SSM)” dapat diselesaikan dengan baik. Pada kesempatan ini penulis sampaikan terima kasih yang sebesar-besarnya kepada :

1. Allah SWT yang telah memeberikan rahmat dan hidayahnya sehingga proyek akhir ini dapat terselesaikan dengan baik.

2. Bapak dan Ibu saya yang selalu memberikan dukungan baik materi maupun moril dalam peyelesaian tuga akhir ini.

3. Bapak Sritrusta Sukaridhoto selaku pembimbing I yang telah memberikan pemahaman serta pencerahan dalam proses pengerjaan Proyek Akhir ini.

4. Bapak Titon Dutono, selaku Direktur Politeknik Elektronika Negeri Surabaya sekaligus sebagai dosen pembimbing yang senantiasa memberikan pencerahan dalam proses pengerjaan Proyek akhir.

5. Bapak Miftahul Huda selaku ketua jurusan Teknik Telekomunikasi Politeknik Elektronika Negeri Surabaya.

6. Buat Alief Fauzia Amalia yang selalu memberikan dukungan moral saat stress.

7. Teman – teman Goodle2006 yang selalu kompak dalam segala keadaan.

8. Seluruh teman – teman Telkom A angkatan 2003 yang semakin kompak.

9. Para sukarelawan yang bersedi mengisi polling untuk MOS. 10. Semua pihak yang tak dapat disebutkan satu – persatu yang telah

membantu dalam proses pengerjaan proyek akhir ini

Akhir kata, segala kritik dan saran sangat saya harapkan untuk pengembangan penelitian selanjutnya.

Surabaya, Juli 2006

Penyusun

Page 7: 7203030018

DAFTAR ISI

HALAMAN JUDUL …………………………..……..………. i LEMBAR PENGESAHAN …………………………...……… ii ABSTRAK …………………………………………………..... iii ABSTRACT …………………………………………………... iv KATA PENGANTAR ………………………………………... v UCAPAN TERIMA KASIH...................................................... vi DAFTAR ISI ………………………………………………….. vii DAFTAR GAMBAR.................................................................. x DAFTAR TABLE....................................................................... xi BAB 1 PENDAHULUAN ……..…………………………….. 1

1.1 LATAR BELAKANG …………………………... 1 1.2 PERUMUSAN MASALAH …………………….. 2 1.3 BATASAN MASALAH …………………............ 3 1.4 TUJUAN DAN MANFAAT…………………….. 3 1.5 METODOLOGI ……………………………......... 4 1.6 SISTEMATIKA PEMBAHASAN......................... 5

BAB 2 DASAR TEORI ……………………………………... 7 2.1 UMUM ………………………………….........… 7 2.2 PENGOLAHAN SINYAL WICARA................... 7

2.2.1 Sinyal Suara Manusia……………………. 7 2.2.2 Representasi Sinyal Ucapan........................ 9 2.2.3 Karakteristik Sinyal Ucapan....................... 11

2.2.3.1 Vokal………........................................... 12 2.2.3.2 Diftong………………………………… 13 2.2.3.3 Konsonan Nasal……………………….. 13 2.2.3.4 Konsonan Friktif……………………….. 14 2.2.3.5 Konsonan Stop………………………… 14

2.3 GALATEA TOOLKIT .……………………….... 15 2.4 SPEECH SYNTHESIS.......................................... 18

2.4.1 Teknologi Sintesa Suara………………….. 18 2.5 HMM-Based Speech Synthesis System................. 19

2.5.1 Proses Training............................................ 20 2.5.1.1 Pemodelan Spektrum……….………….. 20 2.5.1.2 F0 Modeling………….…….…………... 23

Page 8: 7203030018

2.5.1.3 Pemodelan Durasi……….……………... 24 2.5.1.4 Decision-tree Berbasis Context Clustering 25

2.5.2 Proses Sintesa…………………………….. 26

2.6 HIDDEN MARKOV MODEL…………………… 26 2.6.1 Pendahuluan……………………………….. 26 2.6.2 Observasi………………………………….. 27 2.6.3 Inisialisasi…………………………………. 29 2.6.4 Estimasi…………………………………… 30

2.7 HMM-TOOLKIT…………………………………. 33 2.7.1 Pendahuluan……………………………….. 33 2.7.2 Arsitektur Perangkat lunak HTK…….......... 34

2.8 Speech Signal Processing Toolkit (SPTK)….......... 35 2.8.1 SWAB…………………………………....... 35 2.8.2 X2X............................................................... 36 2.8.3 FRAME......................................................... 38 2.8.4 WINDOW..................................................... 39 2.8.5 PITCH........................................................... 40

BAB 3 PERENCANAAN DAN PEMBUATAN

3.1. INSTALASI DAN KONFIGURASI SISTEM........ 43 3.1.1 Installasi Sistem Operasi…………………... 43 3.1.2 Konfigurasi sound di linux............................ 45 3.1.3 Installasi Galatea........................................... 48 3.1.4 Software yang dibutuhkan............................. 48 3.1.5 Struktur Direktori di Dalam Galatea……..... 49 3.1.6 Installasi Face Synthesis Module (FSM)….. 51 3.1.7 Installasi Java……………………………… 52 3.1.8 Instalasi Morpheme analysis (morph)……... 53 3.1.9 Verifikasi pada Speech Synthesis (SSM)….. 54 3.1.10 Verifikasi pada Speech Recogniton (SRM).. 55 3.1.11 Task manager (TM) ………………………. 56 3.1.12 Ruby/TK………………………………….... 56 3.1.13 Galatea DM setup………………………….. 57 3.1.14 Installasi toolkit untuk merekam…………… 57 3.1.15 Installasi HTS……………………………… 59

3.2. PEMBUATAN DATABASE SUARA…………… 63 3.2.1 Pembuatan struktur direktori......................... 63

Page 9: 7203030018

3.2.2 Perekaman dan Pelabelan Suara.................... 63 3.2.2.1. HSLAB....................................................... 64 3.2.2.2. wavesurfer.................................................. 67

3.2.3 Ekstraksi Pitch……………………………... 69 3.2.4 Pendefinisian HMM………………………... 70 3.2.5 Pembangunan Databases Suara..................... 72 3.2.6 Proses Training pada Databases Suara.......... 75

3.2.6.1. Inisialisasi....................................... 76 3.2.6.2. Training...................................................... 79 3.2.6.3. Iterasi…………………………………….. 81 3.2.6.4. Sintesa Suara dalam HTS-demo................. 82

3.3. INTEGRASI KEDALAM SISTEM GALATEA..... 83 3.4. Pembangunan Text To Speech Indonesia................. 83

BAB IV PENGUJIAN DAN ANALISA SISTEM

4.1 PENDAHULUAN…………………………...……. 89 4.2 PENGUJIAN HASIL SINTESA SUARA………... 89

4.2.1 Analisa Pembangunan Databases Suara Indonesia………………………………. 89

4.3 Nilai Mean Opinion Score (MOS)………………... 97

BAB V PENUTUP 5.1 KESIMPULAN…………………………………… 99 5.2 SARAN…………………………………………… 99

DAFTAR PUSTAKA………......……………………………… 100 LAMPIRAN................................................................................. 101 RIWAYAT HIDUP

Page 10: 7203030018

DAFTAR GAMBAR

Gambar 2.1 Sinar X Penampang Alat-Alat Ucap Manusia …....... 8 Gambar 2.2 Model Sistem Produksi Ucapan Manusia ......……… 9 Gambar 2.3 Contoh Sinyal Ucapan “It’s time”………………….. 10 Gambar 2.4 Daftar dan Klasifikasi Fonem Inggris-Amerika......... 12 Gambar 2.5 Bentuk Sinyal Ucapan Vokal Bahasa Inggris............ 13 Gambar 2.6 Skema Galatea Project……………........................... 15 Gambar 2.7 Skema Synthesis Module……………....................... 16 Gambar 2.8 Sistem HMM-based speech synthesis….................... 20 Gambar 2.9 Grafik Mel dan Frekuensi.......................................... 21 Gambar 2.10 Struktur MLSA Filter............................................... 22 Gambar 2.11 Proses Modeling MSD-HMM.................................. 24 Gambar 2.12 Decision-tree Berbasis Context Clustering……….. 25 Gambar 2.13 Markov model.......................................................... 28 Gambar 2.14 Algoritma viterbi...................................................... 29 Gambar 2.15 Diagram alir untuk estimasi..................................... 30 Gambar 2.16 Contoh Proses Pembelajaran dan Pengenalan......... 32 Gambar 2.17 Arsitektur HTK........................................................ 34 Gambar 3.1 Konfigurasi Modconf................................................. 47 Gambar 3.2 Tampilan Wavesurfer................................................. 58 Gambar 3.3 Tampilan HSLAB…………………………………... 65 Gambar 3.4 Wavesurfer.................................................................. 66 Gambar 3.5 Proses Perekaman dan Pelabelan................................ 68 Gambar 3.6 Proses Training........................................................... 76 Gambar 3.7 Proses Inisialisasi....................................................... 76 Gambar 3.8 Proses TrainingMenggunakan Hrest.......................... 79 Gambar 3.9 Tampilan text to Speech Indonesia............................ 87 Gambar 4.1 Sinyal Suara................................................................ 92 Gambar 4.2 Sinyal Pitch................................................................. 93 Gambar 4.3 Bentuk Sinyal Mel-Cepstrum..................................... 96 Gambar 4.4 Spektrum FFT............................................................. 97 Gambar 4.5 Gambar Nilai Mean Opinion Score(MOS)................. 98

Page 11: 7203030018

DAFTAR TABLE

Tabel 2.1 Daftar Fonem Untuk American English........................ 11 Table 4.1 Table Nilai Mean Opinion Score(MOS)....................... 98

Page 12: 7203030018
Page 13: 7203030018

B A B I PENDAHULUAN

1.1 LATAR BELAKANG

Anthropomorphic Spoken Dialog Agent (ASDA) adalah suatu software toolkit untuk mengembangkan sebuah agen human-like spoken dialog. ASDA bertingkah laku seperti manusia dengan animasi wajah dan gesture, serta pembuatan percakapan dengan manusia yang merupakan generasi baru human-interface. Meskipun sejumlah besar sistem ASDA telah dikembangkan, komunikasi antara sistem ASDA dengan manusia masih jauh dari natural dan perkembangan sistem ASDA dengan kualitas tinggi masih sangat menarik. Sehingga untuk mengaktifkan dan memajukan penelitian dalam bidang ini, kami percaya bahwa sebuah pembangunan sistem ASDA yang mudah digunakan, mudah disesuaikan dan software toolkit yang gratis adalah sangat diperlukan. Sebagai contoh, hal ini sangat menyenangkan jika toolkit ini menyediakan karakter life-like agent yang tak terbatas, mempunyai wajah dan suara yang berbeda seperti manusia dalam dunia nyata.

Kami mengembangkan software toolkit ASDA menggunakan galatea dengan tujuan menyediakan sebuah platform untuk membangun generasi baru sistem ASDA. Adapun fitur-fitur dari toolkit ini adalah kemampuan tinggi dalam synthesis text to speech, fungsi dasar untuk mencapai speech recognition, mekanisme untuk lip synchronization antara audio speech dan lip image motion, arsitektur virtual machine untuk mencapai kejelasan dalam komunikasi antar modul.

Jika dibandingkan dengan toolkit lain seperti CSLU toolkit dan DARPA Communicator Program, toolkit ini masih dalam persiapan (awal). Meskipun demikian, toolkit kami tersusun rapi, sederhana, mudah dimengerti sehingga cocok untuk pengembangan sistem ASDA untuk tujuan riset dan tentu saja ini adalah toolkit dari Jepang yang pertama dari life-like agent. Salah satu fitur yang terkenal dari galatea adalah bahwa galatea menggunakan foto seseorang untuk mensintesis image wajah dari sebuah agen. Oleh karena itu, galatea dapat mensintesa agen yang mempunyai wajah yang berbeda dari orang-orang yang berbeda. Sekarang sistem ASDA yang mudah telah sukses dibangun dengan toolkit under UNIX/Linux dan Windows dan bagian dari toolkit

Page 14: 7203030018

ini telah dipublikasikan pada pertengahan tahun 2003.

Dalam Galatea, sintesis image wajah dan suara dapat diubah-ubah dengan mudah tergantung maksud dan aplikasi dari user toolkit. Perubahan ini diselesaikan dengan baik oleh model pengguna berdasarkan tindakan dimana parameter model dasar diarahkan atau ditentukan dengan sebuah data training yang diambil dari seseorang. Sehingga dari parameter model tersebut dapat diarahkan untuk mendapatkan kualitas ekspresi wajah dan suara yang dapat dikontrol dengan mudah.

Dasar dari system agen menggunakan galatea terdiri dari lima unit fungsional yang meliputi speech recognition, speech synthetizer, facial animation synthetizer, agent manager yang bekerja sebagai sebuah inter-module communication manager dan task (dialog) manager. Sebagai tambahan, galatea mempersiapkan prototyping tools untuk kemudahan pengkodean scenario dialog. Di dalam galatea toolkit, unit fungsional secara bebas dimodulkan. Peralatan input/output secara langsung diatur dalam modul. Agent Manager mengontrol komunikasi antar modul. Jika ingin menambah sebuah fungsi baru, implementasikan sebuah modul baru dengan fungsi baru dan modul baru tersebut terkoneksi dengan agent manager. Dialog manager mengkomunikasikan agent manager untuk mencapai dialog tasks berdasarkan database dari skenario dialog. Prototyping tool yang mendukung pembuatan database dari skenario dialog, bekerja secara bebas dari agent manager.

1.2 PERUMUSAN MASALAH

Permasalahan dalam proyek akhir ini adalah rancang bangun agent yang interaktif yaitu dengan menggabungkan beberapa modul yang berbeda karakteristik yaitu speech recognizer, speech synthesizer, facial-image synthesizer dan dialog cotroller, dimana setiap modul ini dimodelkan sebagai sebuah mesin virtual yang memiliki antar muka atau interface yang saling terhubung oleh communication manager.

Dalam sub judul ini adalah menghasilkan suara sintesa modul yang dapat menerjemahkan inputan atau perintah dari agent manager berupa teks dan merekam inputan tersebut. Speech Synthesis Module akan menghasilkan teks yang akan dirubah kebentuk gelombang suara. Dalam pembuatan module ini dibutuhkan sebuah database yang digunakan untuk penyimpanan teks yang telah dirubah kebentuk suara atau

Page 15: 7203030018

fonemnya. Sehingga pada module ini kita juga harus menyediakan teks untuk dimasukkan kedalam database tersebut. Untuk mencapai perubahan Speech Synthesis Module(SSM), modul tersebut tidak terbatas menerima teks tetapi mensintesa (memadukan) wicara dengan suara manusia secara jelas dalam bentuk yang spesifik. 1.3 BATASAN MASALAH

Permasalahan yang harus diselesaikan pada proyek akhir ini dibatasi pada hal-hal sebagai berikut:

• Dapat membangun module speech synthesizer yang dapat meghasilkan suara yang memiliki karakteristik orang Indonesia.

1.4 TUJUAN DAN MANFAAT

Tujuan dari proyek akhir ini adalah pembuatan teknologi life-like characters untuk mengubah dan mengembangkan interaksi antara manusia dan komputer. Life-like characters adalah suatu pola yang bertujuan mendukung kecenderungan manusia untuk berinteraksi dengan komputer sebagai aktor sosial. Sebuah karakteristik umum yang mendasari tampilan yang seperti hidup (logis) sebagai lawan bicara adalah model komputasi yang menyediakan fungsi secara efektif seperti sintesa emosi dan kepribadian serta mengimplementasikan tingkah laku manusia secara interaktif atau merepresentasikan ketrampilan.

Kami mengembangkan software toolkit ASDA menggunakan galatea dengan tujuan untuk dapat mempelajari speech processing dan image processing sehingga dapat dikembangkan untuk dijadikan berbagai aplikasi yang lain. 1.5 METODOLOGI

Pada metodologi ini ditunjukkan bagan dari Implementasi Anthropomorphic Spoken Dialog Agents (ASDA) menggunakan Galatea. Untuk mendapatkan modul SSM dalam Anthropomorphic Spoken Dialog Agents (ASDA) Menggunakan Galatea yang kita inginkan diantaranya kita harus melakukan langkah-langkah sebagai berikut:

Page 16: 7203030018

a. Pengumpulan Bahan dan Source

Pengumpulan bahan yakni mencari source yang akan digunakan untuk membangun Anthropomorphic Spoken Dialog Agents (ASDA). Pada project ini kita menggunakan GALATEA sebagai Open Source Software for Developing Anthropomorphic Spoken Dialog Agents (ASDA). Selain itu juga mencari panduan dalam proses installasinya. Pada sub judul SSM kita harus memfokuskan text-to-speech engine yang terdapat pada GALATEA.

b. Instalasi Source

Pada proses instalasi kita harus meperhatikan secara tepat bagaimana software original berjalan dan mecari module yang berhubungan dengan SSM dan terletak dimana saja sub modul yang kita butuhkan. Diataranya sub modul Text Analyzer, Waveform Generation Engine , Dictionary, dan Speech Output.

c. Penambahan Kata

Penambahan kosa kata yang akan digunakan dalam percakapan yang terjadi pada saat jual beli tiket. Kata didaftar dan dimasukkan kedalam skenario yang akan digunakan dalam percakapan dalam jual beli tiket.

d. Penambahan Karakteristik Suara

Penambahan karakteristik suara hasil sintesa suara dengan karakteristik suara manuasia. Sintesa suara dilakukan dengan mentraining sejumlah suara dengan metode HMM-based Speech Synthesis System (HTS). Hasil dari proses training yaitu jenis suara baru dengan karakteristik orang Indonesia yang kemudian dapat digunakan dalam GALATEA.

Page 17: 7203030018

e. Integrasi dan Pengujian Sistem

Hasil dari pembuatan dan pengeditan pada setiap sub modul yang terdapat SSM dapat dilakukan integrasi dengan sub modul atau modul yang lain dan kemudian dilakukan pengujian system. Pada tahap ini setiap modul dan sub modul harus dapat berjalan dengan baik. Apabila masih terjadi kesalahan maka akan kembali ke tahab sebelumnya.

f. Eksperiment dan Analisa Sistem

Sistem yang sudah dibangun dan telah terintegrasi dengan baik dapat dilakukan eksperimen diataranya dengan pengujian terhadap kata-kata tertentu. Kemudian kita dapat menganalisa terhadap sistem kita.

1.6 SISTEMATIKA PEMBAHASAN Buku laporan proyek akhir ini terdiri dari 5 (lima) bab, dimana masing-masing bab mempunyai kaitan satu sama lain, yaitu: BAB I. PENDAHULUAN

Akan diuraikan tentang latar belakang dan tujuan batasan masalah serta metodologi pembahasan masalah yang yang digunakan.

BAB II. TEORI PENUNJANG Teori yang akan digunakan dalam penyelasaian proyek akhir ini. Pada bab ini akan diuraikan semuanya tentang dasar yang manjadi landasan dalam pembuatan suara sintesa dan kemudian yang akan diapakai dalam paket galatea.

BAB III. PERENCANAAN DAN PEMBUATAN SUARA SINTESA Pada bab ini akan dibahas mengenai tahap tahap pembuatan dan proses kerja dari sistem.

BAB IV. PANGUJIAN DAN ANALISA SISTEM Pada bab ini akan dijelaskan tentang proses pengujian sistem yang telah dibuat dan hasil analisa dari hasil pengujian sistem tersebut, supaya diketahui hasil yang telah dicapai apakah sesuai dengan tujuan yang telah ditetapkan untuk dicapai.

Page 18: 7203030018

Halaman Ini Sengaja Dikosongkan

Page 19: 7203030018

B A B 2 DASAR TEORI

2.1 U M U M

Pada bab ini diberikan teori dasar yang melandasi permasalahan

dan penyelesaiannya yang diangkat dalam proyek akhir ini. Teori dasar yang digunakan untuk mendukung proyek akhir berjudul Pemanfaatan Galatea Untuk Pembangunan Karakter Hidup sub judul Speech Synthesis Module (SSM) diantaranya adalah: Pengolahan sinyal suara, Speech Synthesis, HMM-Based Speech Synthesis System (HTS), Hidden Markov Model Toolkit (HTK), Speech Signal Processing Toolkit (SPTK). 2.9 PENGOLAHAN SINYAL WICARA

2.2.1. Sinyal suara manusia

Ucapan manusia dihasilkan oleh suatu sistem produksi ucapan yang dibentuk oleh alat-alat ucap manusia. Proses tersebut dimulai dengan formulasi pesan dalam otak pembicara. Pesan tersebut akan diubah menjadi perintah-perintah yang diberikan kepada alat-alat ucap manusia, sehingga akhirnya dihasilkan ucapan yang sesuai dengan pesan yang ingin diucapkan. Gambar dibawah menunjukkan rongga mulut manusia sebagai alat-alat ucap manusia.

Gambar 2.1 memperlihatkan foto sinar X penampang alat-alat ucap manusia. Vocal tract pada gambar tersebut ditandai oleh garis putus-putus, dimulai dari vocal cords atau glottis, dan berakhir pada mulut. Vocal tract terdiri dari pharynx (koneksi antara esophagus dengan mulut) dan mulut. Panjang vocal tract pria pada umumnya sekitar 17 cm. Daerah pertemuan vocal tract ditentukan oleh lidah, bibir, rahang, dan bagian belakang langit-langit. Luasnya berkisar antara 20 cm2 sampai dengan mendekati nol. Nasal tract mulai dari bagian belakang langit-langit dan berakhir pada nostrils. Pada keadaan tertentu, suara nasal akan dikeluarkan melalui rongga ini.

7

Page 20: 7203030018

Gambar 2.1 Foto Sinar X Penampang Alat-Alat Ucap Manusia

Gambar 2.2 memperlihatkan model sistem produksi ucapan manusia yang disederhanakan. Pembentukan ucapan dimulai dengan adanya hembusan udara yang dihasilkan oleh paru-paru. Cara kerjanya mirip seperti piston atau pompa yang ditekan untuk menghasilkan tekanan udara. Pada saat vocal cord berada dalam keadaan tegang, aliran udara akan menyebabkan terjadinya vibrasi pada vocal cord dan menghasilkan bunyi ucapan yang disebut voiced speech sound. Pada saat vocal cord berada dalam keadaan lemas, aliran udara akan melalui daerah yang sempit pada vocal tract dan menyebabkan terjadinya turbulensi, sehingga menghasilkan suara yang dikenal sebagai unvoiced sound.

Page 21: 7203030018

Gambar 2.2. Model Sistem Produksi Ucapan Manusia

Ucapan dihasilkan sebagai rangkaian atau urutan komponen-komponen bunyi-bunyi pembentuknya. Setiap komponen bunyi yang berbeda dibentuk oleh perbedaan posisi, bentuk, serta ukuran dari alat-alat ucap manusia yang berubah-ubah selama terjadinya proses produksi ucapan.

2.2.2. Representasi Sinyal Ucapan

Sinyal ucapan merupakan sinyal yang berubah terhadap waktu dengan kecepatan perubahan yang relatif lambat. Jika diamati pada selang waktu yang pendek (antara 5 sampai dengan 100 mili detik), karakteristiknya praktis bersifat tetap; tetapi jika diamati pada selang waktu yang lebih panjang karakteristiknya terlihat berubah-

Page 22: 7203030018

ubah sesuai dengan kalimat yang sedang diucapkan. Gambar 2.3 memperlihatkan contoh sinyal ucapan dari suatu kalimat bahasa Inggris “It’s time” yang diucapkan oleh seorang pria. Setiap baris pada gambar tersebut memperlihatkan potongan sinyal selama 100 mili detik, sehingga seluruh gambar tersebut memperlihatkan sinyal ucapan sepanjang 500 mili detik.

Gambar 2.3. Contoh Sinyal Ucapan “It’s time”

Ada berbagai cara untuk mengklasifikasikan bagian-bagian atau komponen sinyal ucapan. Salah satu cara yang sederhana adalah dengan cara mengklasifikasikannya menjadi tiga keadaan yang berbeda, yaitu (1) silence (S), keadaan pada saat tidak ada ucapan yang diucapkan; (2) unvoiced (U), keadaan pada saat vocal cord tidak melakukan vibrasi, sehingga suara yang dihasilkan bersifat tidak periodic atau bersifat random; (3) voiced (V), keadaan pada saat terjadinya vibrasi pada vocal cord, sehingga menghasilkan suara yang bersifat kuasi periodik.

Page 23: 7203030018

2.2.3. Karakteristik Sinyal Ucapan

Unit bunyi terkecil yang dapat dibedakan oleh manusia disebut fonem. Suatu ucapan kata atau kalimat pada prinsipnya dapat dilihat sebagai urutan fonem. Himpunan fonem yang ada dalam suatu bahasa berbeda-beda. Setiap fonem disimbolkan dengan suatu simbol yang unik. Saat ini ada beberapa standar cara penamaan fonem yang berlaku , diantaranya adalah standar IPA (International Phonetic Alphabet), ARPABET, serta SAMPA. Tabel 2.1 memperlihatkan daftar fonem bahasa Inggris-Amerika serta representasinya dalam simbol-simbol IPA serta ARPABET.

Tabel 2.1 Daftar Fonem Untuk American English

Setiap fonem memiliki ciri-ciri yang berbeda. Gambar 2.4

memperlihatkan daftar fonem serta pengkalisifikasiannya untuk bahasa Inggris-Amerika.

Page 24: 7203030018

Gambar 2.4 Daftar dan Klasifikasi Fonem Bahasa Inggris-Amerika

2.2.3.1. Vokal

Sinyal ucapan vokal memiliki bentuk kuasi periodik seperti terlihat pada Gambar 2.5. Setiap vokal mempunyai komponen frekuensi tertentu yang membedakan karakter satu fonem vokal dengan fonem vokal lainnya. Fonem vokal Bahasa Inggris mencakup fonem-fonem /IY/, /IH/, /EH/, /AE/, /AA/, /ER/, /AH/, /AX/, /AO/, /UW/, /UH/, dan /OW/. Penelitian untuk mengidentifikasikan karakteristik fonem-fonem vokal Bahasa Indonesia pernah dilakukan dan dipublikasikan oleh Arry Akhmad Arman pada tahun 1999

Page 25: 7203030018

Gambar 2.5. Bentuk Sinyal Ucapan Vokal Bahasa Inggris

2.2.3.2. Diftong

Diftong pada prinsipnya adalah dua fonem vokal yang berurutan dan diucapkan tanpa jeda. Fonem diftong Bahasa Inggris mencakup /AY/, /OY/, /AW/, dan /EY/. Karakteristik diftong mirip dengan karakteristik fonem-fonem vokal pembentuknya disertasi bentuk transisinya

2.2.3.3. Konsonan Nasal

Konsonan nasal dibangkitkan dengan eksitasi glotal dan

vocal tract mengerut total pada beberapa titik tertentu sepanjang lintasan pengucapan. Bagian belakang langit-langit merendah, sehingga udara mengalir melalui nasal tract dengan suara yang dipancarkan melalui lubang hidung. Konsonan nasal Bahasa Inggris adalah /M/, /N/, dan /NX/.

Page 26: 7203030018

2.2.3.4. Konsonan Friktif

Konsonen frikatif pada prinsipnya dapat dibedakan menjadi frikatif unvoiced serta voiced. Fonem Bahasa Inggris yang termasuk frikatif unvoiced adalah /F/, /TH/, /S/, dan /SH/, sedangkan yang termasuk frikatif voiced adalah /V/, /Z/, dan /ZH/. Frikatif unvoiced dibentuk dengan suatu eksitasi terhadap vocal tract dengan suatu aliran udara yang tetap, sehingga menyebabkan turbulensi di daerah yang mengkerut dalam vocal tract. Frikatif voiced agak berbeda dengan frikatif unvoiced. Pada frikatif voiced, suara dihasilkan oleh dua sumber eksitasi. Sumber eksitasi lainnya adalah glotis.

2.2.3.5. Konsonan Stop

Seperti konsonan frikatif, konsonen stop dapat dibedakan

menjadi konsonan stop unvoiced serta voiced. Konsonan stop memiliki bentuk yang berbeda dengan konsonan-konsonan lainnya. Konsonan ini memperlihatkan pola transient dan tidak kontinyu. Konsonan ini dibentuk dengan cara memberikan tekanan pada kondisi pengerutan total di bagian rongga mulut tertentu, dan segera diikuti dengan pelemasan. Untuk fonem /B/ pengerutan terjadi di bibir, untuk fonem /D/ pengerutan terjadi di belakang gigi depan, sedangkan untuk fonem /G/ pengerutan terjadi di sekitar bagian belakang langit-langit. Selama perioda total pengerutan terjadi, tidak ada suara yang dikeluarkan dari mulut, sehingga fonem ini selalu mengandung bagian yang menyerupai silence. Fonem Bahasa Inggris yang termasuk konsonan stop unvoiced adalah /P/, /T/, dan /K/, sedangkan yang termasuk konsonan stop voiced adalah /B/, /D/, dan /G/.

Page 27: 7203030018

2.10 GALATEA TOOLKIT

Dasar dari system agen menggunakan galatea terdiri dari lima unit

fungsional yang meliputi speech recognition, speech synthetizer, facial animation synthetizer, agent manager yang bekerja sebagai sebuah inter-moule communicatin manager, task manager dan dialog manager. Sebagai tambahan, galatea mempersiapkan prototyping tools untuk kemudahan pengkodean scenario dialog. Gambar 2.6 menunjukkan arsitektur model dasar dari galatea toolkit. Di dalam galatea toolkit, unit fungsional secara bebas dimodulkan. Peralatan input/output secara langsung diatur dalam modul. Agent manager mengontrol komunikasi antar modul. Jika anda ingin menambah sebuah fungsi baru, anda implementasikan sebuah modul baru dengan fungsi baru dan modul baru tersebut terkoneksi dengan agent manager. Dialog manager mengkomunikasikan agent manager untuk mencapai dialog tasks berdasarkan database dari skenario dialog. Prototyping tool yang mendukung pembuatan database dari skenario dialog dan bekerja secara bebas dari agent manager.

Gambar 2.6. Skema Galatea Project

Page 28: 7203030018

Fitur-fitur dari Galatea untuk membangun sistem ASDA yang berbicara, mendengar dan bertingkah laku seperti manusia, suatu konfigurasi yang easy-to-customize. Dalam Galatea sintesa image wajah dan suara dapat diubah-ubah dengan mudah tergantung maksud dan aplikasi dari user toolkit. Perubahan ini diselesaikan dengan baik oleh model pengguna berdasarkan tindakan dimana parameter model dasar diarahkan atau ditentukan dengan sebuah data training yang diambil dari seseorang yang ada. Suatu kejadian sebuah parameter model diarahkan, kualitas ekspresi wajah dan suara dapat dikontrol dengan mudah.

Pemanfaatan Galatea Untuk Pembuatan Karakter Hidup Sub Judul : Speech Synthesis Modul memiliki 4 sub modul yang terdapat pada gambar 2.7. diantaranya Text Analyzer yang akan menganalisa teks Jepang untuk dicocokkan dengan database teks yaitu Chasen. Text analyzer juga menghasilkan informasi linguistic diantaranya pronoun, jenis aksen, fonem dan lainya. Waveform Generation Engine yang menghasilkan parameter suara yang berurutan dan menkonversinya menjadi synthechic speech waveform atau gelombang suara. Sedangkan pada sub module Speech Output akan menghasilkan synthechic speech waveform atau suara sintesa.

Gambar 2.7. Skema Synthesis Module

Untuk mencapai perubahan Speech Synthesis Module(SSM), modul tersebut tidak terbatas menerima teks Jepang termasuk juga huruf “Kanji” (Cina) dan huruf “Kana”, dan mensintesa wicara dengan suara

Page 29: 7203030018

manusia secara jelas dalam bentuk yang spesifik.

Waveform generation engine didalam SSM berdasarkan pada HMM-speech sythisizer yang menghasilkan model spektrum yang simultan, F0 dan lamanya dikelompokkan menjadi framework dari HMM (Hidden Markov Model). HMM adalah sebuah teknik untuk pengurutan waktu dalam parameter vector. HMM model menggenerate probability dalam parameter vector berdasarkan bagian dari perpindahan yang terjadi. HMM dapat digunakan untuk mengenali pola terutama untuk speech recognition dengan menyeleksi banyaknya probabilitas dalam parameter vector. HMM juga dapat menghasilkan time sequence dari feature vectors. Di dalam speech synthesis, HMM sequence menampilkan fonem secara berurutan didalam kalimat, dan menghasilkan time sequence dalam feature vector. HMM berdasarkan speech synthesis memiliki keuntungan dalam kontrol kuwalitas suara dalam gelombang suara. Teknik adaptasi speaker dalam HMM berbasis speech recognation dapat digunakan untuk percakapan. Seperti teknik yang dapat diguanakan secara mudah dalam berbagai tipe speaker di dalam speech synthesis system.

SSM modul juga menjalankan berbagai fungsi yang penting untuk menghasilkan mekanisme untuk sinkronisasi gerak bibir dengan suara, yang diberi nama “lip-sync”. Mekanisme ini berdasarkan pembagian setiap timing dan durasi informasi untuk fonem didalam suara.

Akhirnya, SSM dapat menyela suara yang dikeluarkan untuk mengatasi tukar menukar suara dalam dialog system. Ini juga penting untuk menampilkan dialog yang natural antar manusia dengan mesin. Ketika suara keluaran disela, SSM memberikan urutan fonem dalam kata, dimana setiap user mengharapkan mendengar dari agent manager.

Dalam study pustaka yang lain yaitu JEIDA Standard of Symbols for Japanese Text-to-Speech Synthesizers oleh TANAKA Kazuyo, AKABANE Makoto, MINOWA Toshimitsu, ITAHASHI Shuichi dalam papernya menampilkan simbol standart yang biasanya digunakan dalam Japanese text-to-speech synthesizer. Standart ini telah didiskusikan dalam the Speech Input/Output Systems Expert Committee of the Japan Electronic Industry Development Association (JEIDA). dan telah diumumkan oleh JEIDA sebagai standart JEIDA yang diberi nama "JEIDA-62-2000" pada maret 2000.

Text-to-speech (TTS) synthesizers telah banyak tersedia di kehidupan kita dalam bentuk aplikasi yang bervariasi. Dalam "JEIDA-

Page 30: 7203030018

62-2000" JEIDA committte telah mendeskripsikan bahwa format simbol dalam TTS engine membutuhkan sebuah inputan. TTS engine akan mensintesa suara dengan membaca setiap karakter secara berurutan dalam menulis standarisai simbol dan mendeskripsikan format. Dari hasil perundingan commite telah dipertimbangkan bahwa simbol harus memiki beberapa karakteristik diantaranya:

1. Simbol tidak bergantung pada suatu aplikasi atau plaform seperti

arsitektur hardware, operating system, bahasa pemrograman, kode karakter dan lainya.

2. Simbol harus mempunyai kemampuan untuk digunakan dalam banyak aplikasi.

2.11 SPEECH SYTHESIS

Sebuah text-to-speech system dibagi menjadi dua bagian yaitu front end dan back end. Pada bagian front end memiliki fungsi menerima inputan teks atau simbol. Sedangkan back end memiliki fungsi mengambil inputan simbol atau teks dan mengeluarkannya menjadi synthesized speech waveform. Sebuah speech synthesizer yang natural adalah seberapa banyak outputan suara yang dihasilkan menyerupai suara manusia dan seberapa mudah untuk dimengerti.

2.11.1 Teknologi Sintesa Suara

Ada dua macam teknologi yang digunakan untuk menghasilkan suara sintesis yaitu: concatenative synthesis dan formant synthesis. Concatenative synthesis Concatenative synthesis berdasarkan sebuah rangkaian sekmen suara yang terekam. Pada umumnya Concatenative synthesis memberikan sebuah suara sythetis yang natural. Bagaimanapun variasi natural dari suara dan teknik otomatis untuk mensegmentasi sebuah gelombang kadang kala menghasilkan output yang mengalami pengurangan dari natural.

Page 31: 7203030018

Formant synthesis Sintese forman tidak menggunakan suara manusia pada saat runtime. Sebagai gantinya, suara sintesa dihasilkan menggunakan satu model akustik. Parameter-parameter seperti frekuensi dasar, suara, dan level noise bervariasi dari waktu ke waktu untuk membuat satu bentuk gelombang dari suara buatan. Metode ini adalah disebut rule-based synthesis. Metode sintesa yang lain: • Articulatory Synthesis adalah metode yang sering digunakan

untuk akademik hingga sekarang, ini berdasarkan computational models dari saluran suara manusia dan proses-proses artikulasi yang terjadi.

• HMM-based Synthesis adalah metode sintesa berdasarkan Hidden Markov Model(HMMs). Dalam sistem ini frekuensi spektrum suara(vocal tract), frekuensi dasar (vocal source), dan durasi (prosody) adalah model simultan dari HMMs, Gelombang suara dihasilkan dari HMMs berdasarkan Maximum likelihood.

2.12 HMM-Based Speech Synthesis System (HTS)

Banyak sistem sintesa suara dapat digunakan untuk mensintesa suara dengan kualitas yang tinggi, tetapi mereka tidak dapat mensintesa suara dengan beberapa karakteristik suara seperti speaker individual, style berbicara, emosi, dan lain-lain. Untuk mendapatkan karakteristik di dalam sistem sintesa suara dibutuhkan data dalam jumlah yang besar, yang digunakan dalam membangun sistem sintesa suara yang digunakan untuk menghasilkan berbagai macam karakteristik suara. Gambar 2.8. menunjukkan gambar dari proses training dan sintesa yang dilakukan oleh HTS. Dalam proses training spektrum dan parameter emosi sample suara diekstrak dari database suara dan dimodelkan dengan fungsi HMM. Fungsi HMM yaitu mensintesa suara kemudian spektrum dan parameter emosi akan diturunkan dari HMM.

Di dalam sistem HMM-based speech synthesis terdapat dua proses utama yaitu proses training dan proses sintesa yang dapat dijelaskan dalam gambar berikut:

Page 32: 7203030018

Gambar 2.8. Sistem HMM-based speech synthesis 2.12.1 Proses Training

Dalam HTS vector ouput HMM mengandung bagian dari spectrum dan bagian dari excitation. Dalam hal ini bagian excitation mengandung log frekuensi dasar (log F0), delta dan delta-delta koefisien. HMMs memiliki bagian durasi density untuk model sementara dalam struktur suara. Hasil dari HTS model tidak hanya parameter spectrum tetapi juga F0 dan durasi dalam frame HMM. 2.12.1.1 Pemodelan Spektrum

Untuk mengontrol sintesa filter oleh HMM, fungsi dari sistem harus di definisikan dengan keluaran vector HMM yaitu koefisien mel-ceptral. Untuk mendapatkan koefisien mel-ceptral maka kita harus menggunakan teknik analisa mel-ceptral yang mana suara akan disintesa ulang menggunakan filter MLSA (Mel Log Spectrum Approximation).

Page 33: 7203030018

Analisa Mel Ceptrum adalah teknik analisa menggunakan cepstrum sumbu non linier yang mengikuti skala dari mel untuk menghasilkan mel cepstrum. Mel cepstrum berasal dari mel dan cepstrum. Mel berasal dari kata melodi yaitu untuk mengindikasi skala dalam pitch. Referensi point dari skala dan frekuensi normal yaitu 1000 tone, 40 dB diatas threshold suara yang dapat didengar, dengan pitch 1000 mel, lebih tinggi dari 500Hz maka akan menghasilkan 4 oktaf dalam skala frekuensi diatas 500 Hz terdiri dari 2 oktaf dalam skala mel. Untuk menkonversi f frekuensi ke m mel dapat digunakan persamaan:

⎟⎠⎞⎜

⎝⎛ += 7001log01048.1127 fm e

(2.1)

Dan inverse:

⎟⎠⎞⎜

⎝⎛ −= 1700 01048.1127

mef (2.2)

Gambar 2.9. Grafik Mel dan Frekuensi

Cepstrum atau pronounce adalah hasil dari Fourier Transform (FT) dari spektrum suatu sinyal. Cepstrum dalam paper Bogert tahun 1963 didefinisikan:

Page 34: 7203030018

• Verbal : ceptrum adalah hasil Fourier Transform (FT) dari log tanpa phase dari FT

• Matematika : cepstrum dari signal = FT(log(FT(the signal))+j2πm) dimana m adalah fungsi log.

• Algoritma : signal → FT → log → phase unwrapping → FT → cepstrum

Terdapat komplek cepstrum dan real cepstrum. Real cepstrum

menggunakan logaritma fungsi untuk mendapatkan nilai real. Sementara algoritma komplek digunakan untuk mendapatkan nilai komplek. Komplek cepstrum adalah informasi tentang magnitude dan phase dari spektrum. Sedangkan real cepstrum hanya menggunakan informasi magnitude dari spektrum.

Proses coding yang digunakan dalam HMMs yaitu teknik analisa mel-cepstral dengan menggunakan filter Mel Log Spectral Approximation(MLSA). Penggunaan analisa mel-cepstral yaitu untuk menghilangkan pengaruh noise shipping dan postfiltering sehingga menghasilkan suara dengan kulitas yang tinggi. Dibawah ini adalah struktur dari MLSA filter.

=

=

−+

+≅= L

l

llL

L

l

llL

zFA

zFAzFzD

1,

1,

)(1

)(1)(exp)( (2.3)

Gambar 2.10. Struktur MLSA Filter

Page 35: 7203030018

Fitur dari MLSA filter yaitu:

1. Keakurasian : Maksimum spectral error 0.24db 2. Stabil

2.12.1.2 F0 Modeling

Fundamental Frequency (F0) atau pitch adalah bagian terkecil dari sinyal. Satu periode pitch mempresentasikan periode sinyal secara penuh. Tedapat banyak algoritma untuk mendapatkan F0 dari suatu sinyal salah satunya yaitu HMMs. Didalam HMMs dikategorikan menjadi diskrit dan continuous. Meskipun demikian kita tidak dapat mengaplikasikan keduanya untuk menganalisa nilai continuous dan simbol diskrit. Begitu pula dengan penggunaan algoritma HMMs kedalam proses pemodelan dari pola frekuensi dasar (F0). Kita tidak dapat menggunakan kedua cara tersebut dalam pemodelan F0 karena nilai F0 tidak didefinisikan di dalam daerah unvoice atau daerah yang memiliki sinyal suara yang lemah.

Oleh karena itu penggunaan diskrit konvensional dan continuous tidak dapat diaplikasikan secara bersaman untuk pemodelan pola F0. Untuk pemodelan menggunakan pengamatan continuous dan diskrit kita dapat menggunakan HMMbased on multi-space probability distribution (MSD-HMM). MSD-HMM meliputi HMM diskrit dan continuous mixture HMM, dan lebih lanjut dengan menggunakan MSD-HMM dapat melakukan observasi vektor secara kontinue dengan menggunakan variable dimensi termasuk observasi zero-dimensional misalnya simbol diskret. Hasil dari MSD-HMM dapat membuat pola model F0 tanpa asumsi heuristic. Dibawah ini adalah proses modeling spektrum bersama, F0 dan durasi dengan menggunakan algoritma MSD-HMM.

Page 36: 7203030018

Gambar 2.11. Proses Modeling spektrum , F0 dan durasi dengan MSD-HMM

2.12.1.3 Pemodelan Durasi

Durasi dalam setiap HMM dimodelkan dengan multivariate gaussian distribution. Dimensi dari durasi sama dengan banyaknya status dari HMM, dan demensi n-th dari status jangka waktu sama dengan n-th dari status HMMs. Status durasi yang dimodelkan dengan distribusi continue, memiliki keuntungan yaitu:

Kecepatan dalam bicara dari synthetic speech dapat difariasikan dengan mudah.

Tidak ada kebutuhan untuk batasan-batasan label manakala model awal tersedia karena jangka waktu status diperkirakan di dalam training embedded tentang fonem HMMs. Adapun usulan untuk digunakan teknik ini dalam HMMs dan

status durasi secara simultan atau bersamaan, meskipun demikian teknik ini membutuhkan database yang besar dan beban komputasi yang besar.

Page 37: 7203030018

2.12.1.4 Decision-tree Berbasis Context Clustering

Terdapat banyak faktor kontekstual diantaranya identitas fonem, hubungan dengan emosi, faktor lokasi yang merupakan emosi dari spektrum, pola F0 dan durasi. Untuk menangkap semua efek ini, kita menggunakan context-dependent HMMs. Bagaimanapun faktor kontekstual menjadi meningkat, kombinasi juga meningkat secara eksponen. Oleh karena itu model parameter tidak dapat ditraining secara akurat apabila memiliki data training yang terbatas. Meskipun demikian tidak mungkin dapat menyiapkan database suara yang mana termasuk semua kombinasi dari faktor kontektual. Untuk mengatasi masalah ini dapat menggunakan Decision-tree berbasis Context Clustering. Teknik ini digunakan untuk distribusi spektrum, F0, dan durasi dalam cara yang sama seperti HMM-based speech recognition.

Algoritma Decision-tree berbasis Context Clustering telah diperluas untuk MSD-HMMs. Setiap spektrum, F0, dan durasi berpengaruh dalam setiap faktor kontektual. Maka faktor tersebut di cluster secara sendiri-sendiri yang dapat dilihat pada gambar 2.12. Status durasi dari setiap HMM dimodelkan dengan n-demensional Gaussian, dan context-depentdent n-dementional Gaussian adalah hasil cluster dari decision tree. Untuk catatan bagian dari spektrum dan F0 untuk ouput vektor dimodelkan dengan multivariate Gaussian distributions dan multi-space probability distributions secara berturut-turut.

Gambar 2.12. Decision-tree Berbasis Context Clustering

Page 38: 7203030018

2.12.2 Proses Sintesa

Di dalam proses sintesa dari HTS, pertama-tama sebuah teks akan disintesa dan dikonversi menjadi context-based label sequence. Kedua, berdasarkan urutan label kalimat HMM disusun dengan mengurutkan context dependent HMMs. Durasi dari kalimat HMM adalah faktor yang ditentukan supaya dapat memaksimalkan output kemungkinan dari durasi, dan kemudian urutan dari koefisien dari mel-cepstral dan nilai log F0 termasuk kondisi voiced/unvoiced untuk HMM ditentukan sedemikian hingga kemungkinan output dari HMM adalah dimaksimalkan menggunakan algoritma speech parameter generation.

Fitur utama dalam sistem ini adalah menggunakan fitur dinamik dengan cara memasukkan koefisien dinamik kedalam vektor feature, urutan parameter suara dihasilkan didalam proses sintesa dibuat agar realistik. Seperti yang didefinisikan dengan parameter statistik dari HMMs. Akhirnya, bentuk gelombang suara disatukan secara langsung dari koefisien mel-cepstral dan nilai F0 dengan menggunakan filter MLSA. 2.13 Hidden Markov Model (HMM)

2.13.1 Pendahuluan

Prinsip umum Hidden Markov Model adalah memodelkan simbol kedalam sebuah mesin finite state, sehingga diketahui simbol apa yang dapat mewakili sebuah parameter vektor dari sebuah kata dimasukkan kedalam mesin, dan diestimasi berulang–ulang hingga dihasilkan parameter vektor atau observasi ot dengan mean dan kovarian yang konvergen untuk setiap statenya. Pada implementasinya sistem pengenalan suara berbasis hidden markov model dibagi menjadi beberapa bagian sebagai berikut : 1. Data preparasi : pembentukan parameter vector (observasi) 2. Training : inisialisasi dan estimasi parameter vector 3. Testing : pengenalan

Page 39: 7203030018

2.13.2 Observasi

Pemisahan kata menjadi simbol yang dilafalkan (phone) menghasilkan rangkaian observasi untuk setiap kejadian yang mungkin pada saat transisi antar state. Aggap suara sebagai sebuah rangkaian vektor suara atau observasi, yang didefinisikan sebagai berikut:

(2.4) Dimana ot adalah vektor suara yang diobservasi pada saat t.

Observasi pada dasarnya menentukan nilai dari persamaan berikut

(2.5) Dimana wi adalah pengucapan yang ke-i, probabilitas ini tidak

dapat dihitung secara langsung tetapi dapat dihitung dengan menggunakan aturan Bayes

(2.6)

Maka, prioritas kemungkinan P(wi) sangat tergantung pada P(O | wi ).

Dalam pengenalan suara berbasis hmm, diasumsikan bahwa rangkaian vektor observasi berkorepondensi dengan masing masing word yang dihasilkan oleh markov model. Markov model adalah mesin finite state yang mengalami perubahan state sekali setiap satuan waktu t pada saat state j dimasuki, vektor suara ot dihasilkan berdasarkan nilai kemungkinan bj(ot). Selanjutnya transisi antara state i ke state j juga merupakan probabilitas diskrit aij. Gambar di bawah menunjukkan contoh dari proses ini dimana lima model state berupa rangakaian state X = 1,2,3,4,5,6 untuk membangun urutan o1 sampai o6.

Page 40: 7203030018

Gambar 2.13. Markov Model

Untuk membangun rangkaian observasi O dengan jumlah state 6.

probabilitas diskrit untuk transisi dari state i ke state j ditentukan oleh aij sedangkan bj(ot) adalah probabilitas yang membentuk observasi pada saat t (ot) untuk state j

Probabilitas O dibangun oleh model M yang melalui seluruh urutan state X dihitung sabagai hasil perkalian antara kemungkinan transisi dan kemungkinan hasil. Jadi untuk rangkaian state X pada gambar di atas

(2.7)

Meskipun demikian hanya rangkaian observasi O yang diketahui

dan rangkaian state X yang mendasari adalah tersembunyi. Itu mengapa ini disebut hidden markov model.

(2.8)

Page 41: 7203030018

2.13.3 Inisialiasi Inisialisasi dapat dilakukan dengan menggunakan algoritma viterbi

untuk menemukan jalur terbaik dalam sebuah matrik dimana dimensi vertikal merepresentasikan state-state hmm dan dimensi horisontal merepresentasikan frame suara. Masing masing titik pada gambar dibawah menunjukkan kemungkinan terhadap frame saat itu dan daerah antar titik menunjukkan kemungkinan transisi.

Gambar 2.14. Algoritma viterbi

Untuk mencari urutan state setiap observasi pada frame suara

diamana a35 menunjukkan kemungkinan transisi dari state 3 ke state 5 dan b3(o4) adalah probabilitas pembentukan observasi o3 pada state 3

Kemungkian masing masing jalur dihitung dengan menjumlah kemungkinan transisi dan kemungkinan keluaran sepanjang path. Pada waktu t masing masing bagian path diketahui untuk semua state i. dapat dihitung dengan persamaan di bawah

(2.9) Konsep path ini sangat berguna untuk suara kontinyu pada

umumnya.

Page 42: 7203030018

2.13.4 Estimasi Proses estimasi dilakukan dengan menggunakan metode Baum-

Welch Re-estimation. Formula Baum-Welch re-estimasi untuk mean dan kovarian pada masing masing state HMM adalah :

dan

Estimasi dilakukan terhadap mean dan varian HMM yang mana

distribusi keluaran masing masing state adalah komponen gausian, yang didefinisikan sebagai berikut:

(2.12) Parameter vector akan diestimasi dengan menggunakan algoritma

foreward-backward hingga diperoleh nilai probabilitas P(O|M) terbesar berdasarkan observasi pada masing – masing state. Perhitungan algoritma Baum-Welch dilakukan berdasarkan diagram alir berikut :

Gambar 2.15. Diagram alir untuk estimasi

(2.10)

(2.11)

Page 43: 7203030018

Estimasi dilakukan terhadap parameter vektor pada initial HMM dengan menggunakan metode forward atau backward hingga diperoleh parameter vektor yang konvergen (tidak dapat diestimasi lagi). Kriteria update adalah nilai probabiltias observasi terhadap model P(O|M) lebih tinggi dari nilai iterasi sebelumnya.

Nilai kemungkinan foreward untuk beberapa model M dan

N state didefinisikan sebagai kemungkinan ini dapat dihitung berdasarkan rumus :

(2.13) sedangkan nilai kemungkinan backward untuk model M dan N

state didefinisikan sebagai dan dapat dihitung dengan persamaan :

(2.14)

berdasarkan persamaan maka didapat persamaan untuk menentukan nilai probabilitas Lj(t sebagai berikut :

(2.15) dimana P = P(O|M).

Algoritma untuk membentuk re-estimasi parameter HMM dengan Baum-Welch re-estimasi adalah sebagai berikut : 1. Untuk setiap vektor parameter/matrik, alokasikan storage untuk

pembilang dan penyebut formula Baum-Welch sebagai akumulator.

Page 44: 7203030018

2. Hitung kemungkinan foreward dan backward untuk semua state j

pada waktu t.

3. Untuk setiap state j dan waktu t, gunakan probabiltas LJ(t) dan vektor observasi saat ini ot untuk merubah acumulator pada state itu.

4. Gunakan nilai acumulator terakhir untuk menghitung nilai parameter yang baru.

5. Jika nilai P = P(O|M) iterasi saat ini kurang dari iterasi sebelumnya maka berhenti jika tidak ulangi langkah diatas dengan menggunakan nilai parameter yang baru.

Berikut contoh proses pembelajaran dan pengenalan untuk rangkaian observasi.

Gambar 2.16. Contoh Proses Pembelajaran dan Pengenalan

Pada awalnya HMM dibelajari untuk memodelkan beberapa contoh

kata dalam hal ini adalah “one, two, three”. Hasil dari pembelajaran adalah model yang telah diestimasi(M). Kemudian HMM digunakan untuk mengenali kata/observasi (O) berdasarkan hasil pembelajaran tersebut. P(O|M) adalah kemungkinan rangkaian observasi O terhadap model M.

Page 45: 7203030018

2.14 HMM toolkit

2.14.1 Pendahuluan Sistem pengenalan suara pada umumnya mengasumsikan bahwa

sinyal suara merupakan realisasi dari beberapa kode pesan yang berupa satu atau beberapa urutan simbol. Untuk mendapatkan simbol – simbol itu, sinyal suara pertama kali diubah menjadi urutan vektor parameter diskrit dengan space yang sama. Vektor parameter diskrit ini diasumsikan membentuk representasi yang tepat terhadap sinyal suara dengan selang waktu selama kurang lebih 10 ms untuk satu vektornya, karena sinyal suara dapat dianggap stasioner. Walaupun tidak sepenuhnya benar, tetapi hal itu adalah tafsiran yang rasional.

Dasar dari pengenalan adalah pemetaan antara rangkaian vektor suara dan rangkaian simbol yang diinginkan. Dua hal yang menjadi masalah yaitu :

1. Pemetaan dari simbol menjadi suara tidak satu per satu karena perbedaan simbol yang mendasar dapat mempengaruhi bunyi suara yang hampir sama.

2. Batasan antar simbol tidak dapat diidentifikasikan secara langsung pada sinyal suara. Oleh karena itu adalah tidak mungkin menganggap sinyal suara sebagai rangkaian gabungan pola – pola statis.

Masalah kedua dapat diatasi dengan membagi sinyal menjadi simbol yang dikenali terpisah (word isolated recognition). Secara umum permasalahan yang terjadi pada sistem pengenalan suara seperti di atas dapat diselesaikan dengan menggunakan metode hidden markov model.

Hidden Markov Model Toolkit (HTK) adalah tool atau perangkat lunak yang mudah dignakan untuk membangun dan memanipulasi Hidden Markov Model. HTK pada dasarnya digunakan untuk penelitian mengenai pengenalan suara meskipun juga digunakan untuk sejumlah aplikasi yang lain termasuk penelitian dalam suara sintetis, pengenalan karakter, dan pengurutan DNA. HTK terdiri dari kumpulan beberapa modul librabry dan tool dalam bahasa C. Perangkat–perangkat tersebut memberikan fasilitas yang handal untuk speech analysis, HMM training, testing dan results analisis. Perangkat lunak ini mendukung HMM baik yang menggunakan continuous density mixture gaussians atau discrete

Page 46: 7203030018

distributions dan juga bisa digunakan untuk membangun sistem HMM yang komplek. Dalam buku ini akan disinggung secara singkat mengenai arsitektur HTK dan perangkat-perangkat yang terlibat pada masing masing tahap.

HTK terbaru adalah HTK-3.2.1.tar.gz yang dapat didownload secara gratis pada : http://htk.eng.cam.ac.uk/

2.14.2 Arsitektur perangkat lunak HTK HTK dibangun dari modul modul sebagaimana yang dapat dilihat

seperti pada gambar di bawah ini :

Gambar 2.17. Arsitektur HTK

Input / output dan interaksi dengan sistem operasi ditangani oleh modul library HSHELL dan semua manajemen memori di kontrol oleh HMM. Perhitungan matematika di ditangani oleh HMATH dan operasi pemrosesan sinyal yang dibutuhkan untuk analisa sinyal suara terdapat pada modul HSIGHP. Semua tipe file yang berhubungan dengan

Page 47: 7203030018

perhitungan HTK didefinisikan pada modul interface. HLABEL menyediakan interface untuk melabeli file, HLM untuk model bahasa, HNET untuk network (jaringan) dan lattice (pola-pola), HDICT untuk dictionaries (pembuatan kamus), HVQ untuk VQ codebooks (kode Kuantisasi Vektor) dan HMODEL untuk definisi HMM.

Semua sinyal masukan dan keluaran pada level waveform adalah via HWAVE dan pada level parameter adalah via HPARM. HWAVE dan HLABEL mendukung multiple file format yang mengijinkan data diimport dari sistem yang lain. Input audio secara langsung (direct audio input) didukung oleh modul HAUDIO dan grafik interaktif yang sederhana di sediakan oleh HGRAF. HUTIL menyediakan sejumlah fasilitas routin untuk manipulasi HMM dimana HTRAIN dan HFB sangat mendukung macam – macam perangkat pembelajaran HTK. HADAPT mendukung berbagai perangkat adaptasi HTK. Terakhir HREC berisi fungsi utama untuk proses pengenalan.

2.15 Speech Signal Processing Toolkit (SPTK)

Speech Signal Processing Toolkit (SPTK) dibangun dan telah digunakan untuk kelompok penelitian dari Prof. Satoshi Imai(di Chiba Institute of Technology) dan Prof. Takao Kobayashi (Lulusan dari School of Science and Engineering, Tokyo Institute of Technology) at P&I laboratory. Fasilitas utama yang dimiliki oleh Speech Signal Processing Toolkit (SPTK) tidak hanya speech analisis standart dan teknik synthesis (LPC analysis, PARCOR analysis, LSP analysis, PARCOR synthesis filter, LSP synthesis filter, and vector quantization techniques) tetapi juga speech analysis dan synthesis techniques yang dibangun oleh kelompok penelitian dapat digunakan secara mudah.

SPTK berisi tool-tool yang dapat digunakan untuk pengolahan sinyal, diantaranya SPTK dapat melakukan proses windowing, ekstraksi pitch, dan dapat mendapatkan koefisien Mel-Cepstral. Adapun perintah-perintah yang sering digunakan dalam mensintesa suara. 2.15.1 SWAB NAMA

swab – menukar byte dalam unit

Page 48: 7203030018

SIPNOSIS

swab [ –S S1 ] [ –s S2 ] [ –E E1 ] [ –e E2 ] [ +type ] [ infile ]

DESKRIPSI Perintah swab akan merubah byte dari little endia (Intel, DEC,

etc) ke big endian (Sun, HP, etc) dan vice versa (byte swap). Jika input file tidak ditentukan kemudian data membaca dari input standart. Range swap akan ditentukan dengan option –S, -E atau –s, -e.

Format data input dan output akan ditentukan dengan +type OPTIONS

–S S1 awal alamat byte [0] –s S2 tart data number [0] –E E1 end byte address [EOF] –e E2 akhir alamat byte [0] +type tipe data input dan output [s]

s short (2bytes) l long (4bytes) f float (4bytes) d double (8bytes)

EXAMPLE

Pada contoh dibawah tipe byte dari data.f dalam format float akan dirubah menjadi tipe data.swab:

swab +f data.f > data.swab

2.15.2 X2X NAMA x2x – merubah tipe data DESKRIPSI

Perintah x2x akan membaca dari input standart dan mengconvert tipe data dan mengeluarkanya ke output standart. Tipe data input ditentukan dengan option +type1 dan ouput data ditentukan dengan option +type2.

Page 49: 7203030018

OPTIONS

+type1 input data type [f] +type2 output data type [type1]

Kedua option type1 dan type2 dapat ditentukan dengan option di bawah c char (1byte) C unsigned char (1byte) s short (2bytes) S unsigned short (2bytes) i int (4bytes) I unsigned int (4bytes) l long (4bytes) L unsigned long (4bytes) f float (4bytes) d double (8bytes) a ASCII Tipe data dikonvert dari t1(type1) ke t2(type2). Jika t2 tidak ditentukan kemudian tidak ada operasi yang diambil maka file output akan sama dengan file input.

+a A jumlah kolom. Setiap baris dimasukkan setelah setiap block A mendapatkan nilai.

-r untuk menspesifkan ketika input desimal maka akan disubtitusi ke interger. Jika ini tidak ditentukan dan proses pengurutan selesai maka akan didapatkan nilai interger tertinggi akan lebih kecil dari pada nilai input. Jika option ditentukan kemudian nilai desimal dimulai dengan nomer sama atau lebih besar dari 5 kemudian input akan diurutkan.

%format specify output format similar to printf(), if type2 isASCII.

EXAMPLE

Pada contoh di bawah data dikonvert dari format ASCII yaitu data.asc ke formta data float yaitu data.f

x2x +af < data.asc > data.f

Page 50: 7203030018

2.15.3 FRAME NAMA

frame – mengekstrak frame SIPNOSIS

frame [ –l L ] [ –n ] [ –p P ] [ +type ] [ infile ]

DESKRIPSI Perintah frame digunakkan untuk membaca data dari input file yang telah ditentukkan dan kemudian ekstrak frame dengan periode P dan panjang L. Jika input data adalah x(0), x(1),....,x(T) kemudian output data adalah 0 , 0 , . . . , x(0) , . . . , x(L/2) x(P − L/2) , x(P − L/2 + 1) , . . . , x(P) , . . . , x(P + L/2) x(2P − L/2) , x(2P − L/2 + 1) , . . . , x(2P) , . . . , x(2P + L/2)

OPTIONS

–l L panjang frame [256] –p P periode frame [100] –n option ini digunakan ketikan x(0) sebagai

center point di dalam frame pertama dan kita ingin membuat x(0) sebagai point pertama dalam frame pertama [FALSE]

+t tipe data input dan output [f] c char (1byte) s short (2bytes) i int (4bytes) l long (4bytes) f float (4bytes) d double (8bytes)

EXAMPLE

Di dalam contoh di bawah, data dalam format float yaitu data.f, periode frame yaitu 80, window blackman dan penggunaan linear prediction analysis(lpc). Dan data ditulis dalam format lpc yaitu data.lpc: frame -p 80 < data.f | window | lpc > data.lpc

Page 51: 7203030018

2.15.4 WINDOW NAME

window – data windowing SIPNOSIS

window [ –l L1 ] [ –L L2] [ –n N ] [ –w W ] [ infile ]

DESKRIPSI Perintah input real yang berurutan dari input standart, dan apabila menggunakan perintah window maka akan menggunakan fungsi dari windowing dengan kata lain jika urutan input adalah:

x(0), x(1), . . . , x(L1 − 1) dan fungsi dari windowing adalah:

w(0), w(1), . . ., w(L1 − 1) menghasilkan output:

x(0) · w(0), x(1) · w(1), . . . , x(L1 − 1) · w(L1 − 1) Jika panjang output L2 adalah lebih besar dari L1, kemudian akan ditambahkan 0s pada output dan menghasilkan:

Input dan output data berupa format float.

OPTIONS –l L1 window length of input (L ≤ 2048) [256] –L L2 output length [L1] –n N type of normalization

0 no normalization [1]

Page 52: 7203030018

1 normalization so that ∑=

=

=1

0

2 1)(L

n

nw

2 normalization so that∑=

=

=1

01)(

L

nnw

–w W type of window [0] 0 Blackman 1 Hamming 2 Hanning 3 Bartlett 4 rectangular

EXAMPLE Pada contoh di bawah akan menampilkan kelayar gelombang sinus dengan periode fungsi 20 setelah widowing dengan tipe window Blackman: sin -p 20 | window | fdrw | xgr

2.15.5 PITCH NAMA

pitch – ekstraksi pitch

SIPNOSIS pitch [ –s S ] [ –l L ] [ –t T ] [ –L Lo ] [ –H Hi ] [ –e E ] [ –i I ] [ –j J ] [ –d D ] [ infile ]

DESKRIPSI

Perintah ini mengekstarak pitch p(t) menggunakan metode cepstrum dan mengirimkanya ke output standart. Diasumsikan input telah dilakukan proses windowing dengan panjang urutah L adalah

x(0), x(1), . . . , x(L − 1) Input dan output data adalah dalam format float Untuk membedakan antara ada suara dan tidak ada suara, penilaian yang tidak memihak dari metode log spektrum adalah

Page 53: 7203030018

untuk mengevaluasi (S/10 × 25) cepstrum order. Kemudian dari koefisien, magnitude dari log spektrum ˆgi(Ωk) dievaluasi. Akhirnya nilai mean iv untuk setiap band akan dikalkulasi.

Dimana ukuran FFT yaitu N adalah bilangan kuadrat lebih besar daripada L. Jika suara speech adalah voiced (vi > T), daripada koefisien FFT cepstrum c(m) ditranformasikan kedalam c(m) × m, dan peak frekuensi antara Lo (Hz) and Hi (Hz) adalah pitch. Jika suara speech unvoiced (vi < T) kemudian dioutputkan 0.

OPTIONS

–s S frekuensi sampling (kHz) [10] –l L panjang frame data input [400] –t T voiced/unvoiced threshold [6.0] –L Lo minimum fundamental frequency untuk

mendapatkan (Hz) [60] –H Hi maximum fundamental frequency untuk

mendapatkan (Hz) [240] –e E nilai terkecil yang dimasukkan untuk

menghitung kalkulasi dari log power spectrum [0.0]

Biasanya option tidak ditentukan. Mereka berhubugan dengan penilaian yang tidak memihak pada metode log spectrum –i I minimum jumlah iterasi [2] –j J minimum jumlah iterasi [30] –d D kondisi akhir [0.1]

EXAMPLE Data suara dengan sampling rate 10kHz dalam format float yaitu data.f, kemudian output berupa data pitch yaitu data.pitch. frame -l 400 < data.f | window -l 400 | pitch -l 400 > data.pitch

256,2(),(14

1 17

4

NnN

kgin

v k

n

nkki ==ΩΩ= ∑

=

π

Page 54: 7203030018

Halaman Ini Sengaja Dikosongkan

Page 55: 7203030018

BAB III PERENCANAAN DAN PEMBUATAN

Seperti yang telah di jelaskan pada bab sebelumnya, pada bab

ini akan di jelaskan tentang perencanaan dan langkah pembuatan suara sintesa serta apa saja yang telah dilakukan untuk membangun database sebuah suara sintesa berbasis bahasa Indonesia.

3.1. INSTALASI DAN KONFIGURASI SISTEM

Pada proyek akhir ini sistem operasi yang dipakai adalah sistem operasi Debian GNU/Linux sarge dengan kernel 2.6, dan software yang dipakai untuk menganalisis speech adalah HTK yang dapat didownload secara gratis di situs HTK kemudian didownload juga paket Galatea dari situs resminya. Untuk dapat menjalankan software tersebut dengan baik maka perlu melakukan beberapa konfigurasi agar software nantinya dapat berjalan dengan baik. 3.1.1. Instalasi Sistem Operasi

Adapun Langkah-langkah instalasi sebagai berikut : Booting dari CD dengan mengeset bios booting awal pada CD

rom Pada menu input ketikkan kernel linux yang akan di pakai,

untuk kernel 2.6 ketikkan linux26 Pilihan bahasa, untuk bahasa yang standar pilih american

english. Pilihan negara, pilih other, asia kemudian indonesia. Pilihan keyboard, untuk keyboard yang di gunakan adalah dari

amerika, maka pilih american english. Automatic detect hardware, network (dhcp), klien akan

mendapatkan IP dari server secara otomatis. Memasukkan hostname, debian (optional). Memasukkan domain name: eepis-its.edu Metode partisi, entire disk, untuk memudahkan manajemen

hardisk pilih partisi secara manual. Finish partisi dan write changes to disk, pilih yes. Instaling debian base system.

43

Page 56: 7203030018

Install GRUB boot loader, pilih yes. Setelah instaling complet,ambil CD installer, pilih continue. Komputer akan booting ulang. Tampilan " Welcome to your new Debian System!" pilih no. Konfigurasi waktu, pilih konfigurasi menual untuk wilayah asia

pilih no. Pilih asia/ Jakarta ( java & sumatra ). Konfigurasi password

root password (password untuk super user root) re-enter password (pengulangan password root) nama user / full name (user lain selain root) nama user account user password (password user) re-enter password (pengulangan password user) Konfigurasi apt, untuk instalasi sistem dari CD, masukkan CD

Debian dan pilih CDROM tekan ok. perlu di ketahui letak direktori CD-ROM berada pada file /dev/cdrom. Tunggu beberapa saat. !

Tampilan scan untuk CD Debian Yang lain, pilih no Tampilan pilihan tentang informasi HTTP proxy kosongi, pilih ok.

Tampilan connect security.debian.org CTRL-C untuk cancel Muncul peringatan untuk access security, pilih ok Debian Software Debian Selection

Pilihan untuk memilih Paket yang akan diinstal kosongi, pilih ok (instalasi paket di lakukan secara manual saja)

konfigurasi EXIM: Configuring Exim v4 (exim4- Config) general typre of mail configuration no configuration at this time, pilih ok

Menu konfirmasi untuk Exim v4 pilih yes Menu untuk mempertanyakan tujuan mail (root and post mail recipent) ketik sesuai dengan user pilih ok

Tunggu untuk reloding exim4 configuration files Tampilan Thank you for choosing debian ok. Kemudian masuk pada login ketik root dan masukkan

password untuk root

Page 57: 7203030018

3.1.2. Konfigurasi sound di linux

Hal-hal yang perlu dilakukan untuk mengkonfigurasi sistem suara maka ada beberapa paket yang harus diinstal pada sistem operasi. paket-paket ini yang nantinya akan digunakan sebagai driver untuk menjalankan soundcard

Kemudian langkah selanjutnya adalah merekompilasi source yang telah diinstall, gunanya adalah untuk mencocokkan driver yang sesuai dengan soundcard yang sekarang. Hal ini diperlukan karena driver yang disertakan dalam paket alsa yang standar adalah driver yang standard sehingga sering kali kita temui konfigurasi soundcard yang janggal dimana kesalahan yang paling banyak terjadi yang diakibatkan oleh driver yang standar tersebut adalah letak posisi output yang terbalik-balik misalnya output seharusnya untuk speaker menjadi miliknya microphone dan sebagainya.

Cara menghindari salah konfigurasi adalah paket alsa harus di compile ulang. Untuk dapat merekompilasi alsa-source maka dibutuhkan header atau source dari kernel yang dipakai lengkap dengan versi kernel dan arsitekturnya. Disini kernel yang dipakai adalah kernel versi 2.6.8-2-386. Kemudian paket modconf , modconf ini gunanya adalah untuk mengaktifkan modul/ driver hasil kompilasi nantinya.

Selanjutnya adalah mulai merekompilasi kernel untuk sound. Buka directory posisi alsa-source yang telah diinstal yaitu pada directory /usr/src dan ekstrak file alsa-driver.tar

#apt-get install alsa-base alsa-utils alsa-oss alsa-source

# su Password:_ #apt-get install kernel-headers-2.6.8-2-386

Page 58: 7203030018

Dari proses ini akan dihasilkan directory modules/alsa-driver pada /usr/src, kemudian masuk ke directory /usr/src/modules/alsa-driver.

Pada langkah diatas dapat dijelaskan KSRC=/usr/src/kernel-headers-2.6.8-2-386 menunjukkan letak source kernel header yang dipakai pada saat merekompilasi sehingga nanti module yang dihasilkan sesuai dengan versi kernel. Kemudian KVERS =2.6.8-2-386 adalah menunjukkan versi kernel yang digunakan untuk merekompilasi, debian/rules binary_modules disini adalah aturan/ urutan kompilasi yang telah disertakan oleh alsa-source untuk memudahkan user dalam mengkompilasi dan binary_modules adalah outputan yang nantinya akan dihasilkan oleh proses. outputan ini berdasarkan output yang dihasilkan oleh perintah make-kpkg. Dari proses ini akan menghasilkan outputan berupa debian paket yang berekstensi deb. Pada directory /usr/src/modules/ dengan nama paket alsa-modules-2.6.8-2-386_xxxx.deb, kemudian instal module tersebut dan jalankan modconf

# cd /usr/src # tar xvvf alsa-source alsa-driver.tar

# cd /usr/src/modules/alsa-driver # KSRC=/usr/src/kernel-headers-2.6.8-2-386

KVERS=2.6.8-2-386 debian/rules

# dpkg –i alsa-modules-2.6.8-2-386-XXXXX.deb # modconf

Page 59: 7203030018

Gambar 3.1 Konfigurasi Modconf

Aktifkan modul update untuk alsa, dalam hal ini yang akan dipakai dalam aplikasi adalah modul alsa-oss.

Langkah selanjutnya adalah mengetes soundcard. Untuk menjalankan soundcard dapat dilakukan dengan menjalankan program pemutar multimedia misalnya XMMS atau sejenisnya. Apabila aplikasi tersebut sudah dapat berjalan dengan baik berarti instalasi soundcard sudah berhasil. Kemudian lakukan reboot komputer dan ulangi lagi dengan menjalankan program multimedia. Apabila program tidak bisa berjalan coba dengan perintah alsaconf.

# alsaconf

Page 60: 7203030018

Kemudian tambahkan baris dibawah kedalam /etc/modules

Kemudian reboot kembali, lalu periksa pada directory /dev apakah sudah ada file dsp dengan cara.

Sampai di sini berarti proses instalasi soundcard sudah selesai. 3.1.3. Installasi GALATEA

• Spesifikasi Hardware dan Software yang dibutuhkan Galatea o Hardware yang di butuhkan

Galatea Dialog Manager telah dikembangkan dan di operasikan dengan spesifikasi Hardware Sebagai berikut: CPU: Pentium 4 2,6GHz ( spec minimal Pentium 3 1GHz) RAM: 1 GB ( spec minimal 512MB) Video: NVIDIA GeForce4 + NVIDIA Driver (OpenGL support) Sound: Creative SoundBlaster Live

3.1.4. Software yang di butuhkan

• Debian stable

o http://www.debian.org/ o http://kebo.vlsm.org/

• Driver NVIDIA o http://www.nvidia.com/

# ls /dev/dsp /dev/dsp

Snd-mixer-oss Snd-pcm-oss Snd-seq-device

Page 61: 7203030018

• GALATEA o http://prdownloads.sourceforge.jp/galatea/15674/galatea-

v3.0a.tar.gz o http://prdownloads.sourceforge.jp/galatea/17998/gdm-bin-

051215.tar.gz • Glut 3.7 • Java (j2sdk 1.4.2_05) taruh pada direktori /usr/local/bin/java • Chasen-2.3.3 : diinstal pada direktori /usr/local/chasen-2.3.3/

dengan prosedur yang akan dijelaskan selanjutnya. Setiap modul memiliki prosedur installasi yang berbeda-beda.

Untuk top direktori sebaiknya galatea diletakkan dalam direktori /home/demo untuk galatea-v3.0a.tar.gz dan gdm-bin-051215.tar.gz pada direktori /data/istc. gdm merupakan versi binary dari galatea-v3.0a sehingga lebih mudah dalam proses instalasi maupun penggunaannya. Di bawah ini adalah proses instalasi untuk galatea-v3.0a

3.1.5. Struktur Direktori di Dalam Galatea

• DM/ o Document (berisi Dokumentasi Galatea) o galatea (file executable) o tests (berisi contoh file percakapan)

vxml/ (contoh percakapan dalam format VXML)

php/ (contoh percakapan dalam format PHP)

o lib/ ( file yang dibutuhkan untuk mengexsekusi Galatea Dialog Manager)

o Modules/ (Kumpulan Modul) am.conf (file konfigurasi Agent

Manager) gdm.conf (file konfigurasi Galatea

Dialog Manager) AM-MCL.rb MON.rb

Page 62: 7203030018

PAR.rb SIM.rb SND.rb ….

• AM/ o 0.README o AM-MCL.pl o AgentManager.pl o DummyModule.pl o GalateaAM_CommandSet.pdf o GalateaAM_Manual.pdf o fsm.init

• FSM/ o INSTALL_LINUX.txt o INSTALL_WIN.txt o License.txt o README.txt o bin./

fsm (file executable) o command.pdf o data/ o ….

• SSM/ o RUN (file executable) o gtalk (galatea_talk) o Makefile o README o ssm.conf (file konfigurasi module SSM) o ….

• morph/ o 00README o chaone-1.1.0-src.tgz o chaone-1.1.0.jar o chasen-2.3.3

Makefile README …..

o darts-0.2

Page 63: 7203030018

Makefile INSTALL README …..

o unidic-1.1.0 Makefile README

• speakers o female01

duration.pdf lf0.pdf mcep.pdf tree-dur.inf tree-lf0.inf tree-mcep.inf

o male01 duration.pdf lf0.pdf mcep.pdf tree-dur.inf tree-lf0.inf tree-mcep.inf

o male02 duration.pdf lf0.pdf mcep.pdf tree-dur.inf tree-lf0.inf tree-mcep.inf

3.1.6. Instalasi Face Synthesis Module (FSM)

Paket yang dibutuhkan oleh Face Synthesis Module (FSM) yaitu glut dan glut-devel maka dalam debian kita dapat melakukan proses penginstalan dengan perintah sebagai berikut:

Page 64: 7203030018

Kemudian kita dapat mengeksekusi file binary dalam

FSM dengan:

Apabila tidak terjadi error maka akan menampilkan

agent berupa wajah seorang wanita atau pria. Kemudian kita dapat mengendalikan agent dengan menggunakan mouse dan keyboard.

Operasi Mouse: Click kiri menggerakkan agent pada sumbu X, Y Click tengah memindahkan agent Click kanan membesarkan atau mengecilkan agent Operasi Keyboard: Tombol “r” atau “R” : Mereset agent ke tampilan semula Tombol “f” atau “F” : Mode fullscreen Tombol “Esc” : Menghentikan modul

3.1.7. Instalasi Java

Untuk Linux paket Java dapat didownload dari http://java.sun.com/ disini menggunakan j2sdk-1_4_2_05 dengan proses installasi sebagai berikut:

Untuk penunjukkan direktori java diletakkan dalam direktori /usr/local/bin/java Kemudian kita buat link dengan cara:

$ cd FSM/bin $ ./fsm

# apt-get install glut glut-devel

Page 65: 7203030018

$ pwd /home/demo/galatea-v3.0/morph $ cd chasen-2.3.3 $./configure --prefix=/usr/local/chasen-2.3.3 $ make su make install exit $ cd ..

3.1.8. Instalasi Morpheme analysis (morph)

Proses instalasi dart dan chasen dibutuhkan dalam Galatea. Dart merupakan Double-Array yang merupakan template simple untuk C++ sedangkan chasen merupakan sebuah sistem analisa yang digunakan untuk mengenali teks Jepang. Untuk proses instalasi sebagai berikut.

1. darts-0.2

2. chasen-2.3.3

$ pwd /home/demo/galatea-v3.0/morph $ cd darts-0.2 $ ./configure $ make $ make check $ su make install exit $ cd ..

$ chmod 755 j2sdk-1_4_2_05-linux-i586.bin $ ./j2sdk-1_4_2_05-linux-i586.bin $ cd /usr/local # ln - s /usr/java/j2sdk1.4.2_05 j2sdk

Page 66: 7203030018

3. unidic-1.1.0

3.1.9. Verifikasi pada Speech Synthesis (SSM)

Galatea dibangun dan dicoba menggunakan lingkungan Jepang sehingga komputer kita harus dibuat agar berbasis Jepang atau dapat mengenali tulisan Jepang dengan menjalankan perintah dibawah ini:

Apabila script RUN dijalankan maka akan menjalankan speech synthesis dengan perintah:

Kofigurasi yang harus ditambahkan pada ssm.conf dan chasenrc adalah

$ cd DM/SSM $ perl RUN

$ export LANG=ja_JP.eucJP $ export LC_ALL=ja_JP.eucJP

$ pwd /home/demo/galatea-v3.0/morph $ cd unidic-1.1.0 $ ./configure --with-mkchadic=../chasen-2.3.3/mkchadic \ --with-chasen-config=../chasen-2.3.3/chasen-config \ --with-exclude-dic=fillers.dic $ make

Page 67: 7203030018

Pada ssm.conf

Pada chasenrc

3.1.10. Verifikasi pada Speech Recogniton (SRM)

Operasi verifikasi selesai pada speech recognition apabila telah menjalankan perintah

Berikan inputan pada microphone, seperti “uwagi wo shiro ni shite kudasai” kemudian coba verifikasi apa yang di kenali oleh SRM. Apabila ingin mengganti grammar maka jalankan perintah:

Apabila dalam proses diatas tidak ada error maka proses verifikasi selesai. Mengcompile kembali modul julian

Set Grammar = GramXML/renraku/renraku.xml

$ cd /home/demo/galatea-v3.0 $./configure $perl ./SRM_Main.pl set Run = INIT set Run = START

(GRAMMAR ../morph/unidic-1.1.0)

# path name of 'chasen' CHASEN: /usr/local/chasen-2.3.3/bin/chasen

# configuration file for 'chasen' CHASEN-RC: ./chasenrc # command of running 'chaone'

Page 68: 7203030018

3.1.11. Task manager (TM)

TM dapat digunakan untuk integrasi modul-modul yang ada di Galatea yaitu FSM, SSM dan SRM, sedangkan Galatea DM tidak menggunakan TM. Untuk mencoba apakah modul TM berjalan maka lakukan perintah dibawah ini:

Apabila tidak terjadi kesalahan maka modul Task Manager (TM) dapat berjalan dengan baik.

3.1.12. Ruby/TK

Dalam Galatea membutuhkan Ruby/Tk untuk menjalankan modul dalam Galatea DM. Maka kita harus melakukan installasi Ruby/Tk dengan menjalankan perintah:

Untuk mencoba apakah kita berhasil melakukan instalasi Ruby/TK maka jalankan perintah.

$ apt-get install ruby1.8 libtcltk-ruby1.8

$ cd /home/demo/galatea-v3.0 $ cd TM $ ./demo_Repeat.sh $ ./demo_Appoint.sh $ ./demo Renraku.sh

$tar xzvf julius-3.3p3-Galatea.tar.gz $ cd julius-3.3p3-Galatea $ ./configure --enable-julian $ make $cp julius/julian adinrec/adinrec adintool/adintool gramtools/generate/generate gramtools/accept_check/accept_check

/ / /

Page 69: 7203030018

Apabila keluar “ok” maka proses installasi Ruby/TK berhasil

3.1.13. Galatea DM setup

Periksa audio volume

File executable dari Galatea DM adalah ‘galatea’ maka untuk menjalankannya lakukan perintah dibawah ini.

Tunggulah sampai muncul dialog. Ini membutuhkan waktu 15 detik sampai window untuk FSM muncul dan 30 detik untuk dialog muncul. Waktu yang dibutuhkan tergantung dari performa komputer. Untuk menghentikan proses lakukan Ctrl-C kemudian jalankan perintah:

3.1.14. Instalasi toolkit untuk merekam

Tool yang akan digunakan untuk melakukan perekaman adalah wavesurfer, yang merupakan tool yang berbasis tcl/tk, Alasan menggunakan wavesurfer karena mudah penggunaanya juga tersedia dalam platform Linux dan Windows Untuk installlasi wavesurfer pastikan terlebih dahulu paket tcl/tk terinstall, untuk memeriksa apakah paket tcl/tk sudah

$ ./fin

$ cd galatea-v3.0 $ cd DM $ ./galatea tests/weather.vxml

$ cd DM $ ./setup_amixer

$ ruby -r tcltk -e "p 'ok'"

Page 70: 7203030018

terinstall dapat digunakan perintah sebagai berikut:

Pada hasil diatas terlihat bahwa paket tcl/tk sudah

terinstall, selanjutnya tinggal menginstall paket wavesurfer

Setelah proses instalasi wavesurfer selesai kemudian

jalankan wavesurfer, ketikkan perintak dibawah pada terminal console:

Maka akan muncul tampilan wavesurfer seperti

gambar dibawah:

Gambar 3.2 Tampilan Wavesurfer

# wavesurfer

#dpkg –l | grep tcl ii libtcltk-ruby1 1.6.8-12sarge1 Tcl/Tk interface for Ruby 1.6.x ii libtcltk-ruby1 1.8.2-7sarge2 Tcl/Tk interface for Ruby 1.8 ii tcl8.3 8.3.5-4 Tcl (the Tool Command Language) v8.3 - run-t ii tcl8.4 8.4.9-1 Tcl (the Tool

Command Language) v8.4 - run-t

#apt-get install wavesurfer

Page 71: 7203030018

3.1.15. Installasi HMM-based Speech Synthesis System (HTS)

HMM-based Speech Synthesis System (HTS) telah dikembangkan oleh HTS group yang di pimpin Keiichi Tokuda. HTS merupakan modifikasi dari HTK bersama dengan SPTK dan patch HMM-based Speech Synthesis System (HTS) untuk HTK. Modifikasi yang dilakukan didalam HTK adalah sebagai berikut: • Context clustering berdasarkan pada kriteria minimum

description length (MDL). • Stream-dependent context clustering. • Distribusi Probabilitas Multi-space sebagai bagian dari

probabilitas output untuk pemodelan pitch. • Bagian dari permodelan durasi dan clustering. HTS membutuhkan SPTK dan HTK

Instalasi dari SPTK dapat dilihat dari file “README” dari SPTK 1. Download "SPTK-3.0.tar.gz" dari http://kt-

lab.ics.nitech.ac.jp/~tokuda/SPTK/ dan ekstrak dalam direktori Hardisk

2. Masuk kedalam direktori “src” 3. Baca komentar di dalam “Makefile” dan rubah berberapa

konfigurasi apabila diperlukan. 4. Untuk menginstal lakukan:

Download HTK Download "HTK-3.2.1.tar.gz" dari http://htk.eng.cam.ac.uk/ dan ekstrak kedalam direktori /usr/. Dengan perintah

# make # make install

Page 72: 7203030018

Setelah proses ekstraksi selesai langkah selanjutnya adalah mengkompilasi source yang telah kita extrak. pertama pindahkan terlebih dahulu kedalam direktori tempat file source HTK diekstrak kemudian jalankan perintah configure, utuk menjalankan perintah tersebut harus dilakukan sebagai root.

Pada proses ini file executable di simpan dalam direktori /bin, dan langsung dapat digunakan untuk proses analisis.

Instalasi HTS 1. Download "HTS-1.1.1_for_HTK-3.2.1.tar.gz" dari

http://hts.ics.nitech.ac.jp/ dan ekstrak dalam direktori 2. Copy "HTS-1.1.1/HTS-1.1.1_for_HTK-3.2.1.patch"

kedalam ".../HTK-3.2.1/htk" pindah ke “HTK-3.2.1/htk” dan lakukan:

3. Berdasarkan file “README” dari HTK maka lakukan penambahan konfigurasi pada "HTK-3.2.1/htk/HTKLib/Makefile" dan "HTK-3.2.1/htk/HTKTools/Makefile" yaitu:

# patch –p1 < HTS-1.1.1_for_HTK3.2.1.patch

# su Password:_ #HTK-3.2 # ./configure -–prefix=/usr .. .. .. # make all .. .. .. # make install

# tar xzvf HTK-3.2.1.tar.gz

Page 73: 7203030018

Instalasi dari synthesis engine Instalasi dari HTS-demo

HTS-demo membutuhkan Festival Speech Synthesis system, SPTK, dan HTS.

Instalasi festival 1. Download "festival-1.4.3-release.tar.gz" dari

http://www.festvox.org/ dan ekstrak kedalam direktori hardisk.

2. Berdasarkan “README” dan “INSTALL” dari festival lakukan instalasi festival kedalam mesin.

Apabila menggunakan distribusi Linux Debian maka lakukan:

Instalasi dari HTS-demo_CMU-ARCTIC-AWB dan HTS-demo_NIT-ATR503-M001 untuk database suara Jepang 1. Download "HTS-demo_CMU-ARCTIC-AWB.tar.gz" dari

http://hts.ics.nitech.ac.jp/ dan ekstrak kedalam direktori hardisk.

2. Baca komentar dari “Makefile” dan tambahkan konfigurasi untuk:

3. Untuk melakukan proses training pada HTS-demo_CMU-

ARCTIC-AWB lakukan:

# make

$ SPTKDIR = /usr/local/SPTK/bin $ FESTIVALDIR = /usr/bin

# apt-get install festival

$ CPU = linux $ HTKCC = gcc $ HTKCF = -g -ansi -DOSS_AUDIO $ HTKLF = -g -L/usr/X11R6/lib $ HBIN = /usr/local

Page 74: 7203030018

Instalasi HTS-demo

1. Download "HTS-demo.tar.gz" from http://hts.ics.nitech.ac.jp/ dan ekstrak pada direktori hardisk.

2. Baca komentar pada “Makefile” dan lakukan penambahan konfigurasi yaitu:

3. Build HTS-demo dengan:

Masuk kedalam direktori “hts_engine” dan lakukan:

Test Jalankan script training. Maka akan HMM akan melakukan sintesa pada sample suara dari HMM

# perl scripts/Training_cmu_us_arctic_awb.pl atau

# perl scripts/Training_nit_jp_ATR503_m001.pl

# ./configure # make

$CURRENTDIR = `pwd` $SPTKBINDIR = /usr/local/SPTK/bin $HTSBINDIR = /usr/local/bin.linux $DATADIR=/home/taufik/project/HTS-demo_CMU-ARCTIC-AWB $ NAME = awb $ DATASET = cmu_us_arctic

# make

Page 75: 7203030018

3.2. PEMBUATAN DATABASE SUARA

3.2.1. Pembuatan struktur direktori

Sampai pada saat ini proses instalasi dan konfigurasi sistem

yang akan dipakai telah selesai dilakukan. Kemudian langkah selanjutnya yang perlu dilakukan dalam pembuatan database speech synthesis berbasis HTS adalah harus memenuhi parameter yang berada dalam direktori dibawah ini:

/cmp/ : Data yang dibutuhkan untuk training HMM

dihasilkan dari proses training suara. /f0/ : Fundamental pattern atau pitch yang diekstrak

dengan metode ESPS dengan kondisi periode frame 5ms, float, littel endian.

/label/ : Berisi label dari file suara. /list/ : Daftar model dan data. /log_f0/ : Logaritma untuk pitch. /mcep/ : Mel Ceptrum series. /question/ : Pertanyaan untuk context clustering berdasarkan

decision tree. /raw/ : Data suara yang memiliki sampling frekuesi 16

KHz dengan type data littel endian. /script/ : Kumpulan script. /win/ : Window faktor.

3.2.2. Perekaman dan Pelabelan Suara

Setelah struktur direktori kita buat maka proses selanjutnya

adalah proses perekaman. Pada proses perekaman ini dapat digunakan tool bawaan HTK yaitu HSLab atau menggunakan tool eksternal misalnya di sini adalah menggunakan wavesurfer. Semua kata hasil rekaman harus ditempatkan pada direktori /raw/, sehingga kedua tool tersebut harus dijalankan pada direktori /raw/

Page 76: 7203030018

3.2.2.1. HSLAB

HSLab adalah tool yang disertakan HTK yang digunakan

sbeagai tool standar yang digunakan untuk merekam dengan file output yang sesuai dengan format yang dibutuhkan oleh HTK tool. Untuk merekam menggunakan HSLAB maka pertama harus diketahui parameter yang terdapat pada HSLAB, maka untuk mengetahui parameter apa saja yang terdapat pada HSLAB, gunakan perintah HSLab tanpa parameter maka akan ditampilkan help dari HSLab dalam paremeter ini ditampilkan argumen-argumen yang dapat diberikan pada HSLab.

HSLab dapat merekam waveform sekaligus melabelinya., untuk memulai merekam sinyal speech sekaligus melabelinya dapat digunakan perintah sebagai berikut :

Untuk menentukan namafile disini sebaiknya disesuaikan

dengan kata yang direkam, misalnya yang direkam adalah kata “satu” kemudian diberi index dengan jumlah kata yang direkam jadi perintah yang dipakai adalah :

HSLab akan menampilkan Graphical User Interface yang

dapat digunakan untuk merekam sinyal dan sekaligus melabelinya, GUI yang ditampilkan adalah sebagai berikut

# HSLab <namafile.wav>

# HSLab satu1.wav

Page 77: 7203030018

Gambar 3.3 Tampilan HSLAB Proses perekaman dapat dimulai dengan mengklik “Rec” dan

ucapkan kata yang hendak direkam kemudian tekan “Stop” untuk mengakhiri. Proses ini secara otomatis akan membuat sebuah file buffer selain file utama. File buffer ini bernama satu1_1.wav setelah perekaman selesai kemudian langkah selanjutnya adalah melabeli file yang telah direkam.

Proses pelabelan kata dapat dilakukan dengan tool yang sama. Untuk melabeli kata yang telah direkam adalah dengan menekan “Mark” kemudian pilih bagian yang akan dilabeli, setelah bagian yang ingin dilabeli terpilih ditandai dengan bagian yang di pilih tersebut di blok hitam, lalu klik “Labelas” dan ketikkan nama label untuk sinyal yang direkam. Misal kata yang direkam adalah “satu “ maka labelnya adalah “satu” dengan diawali dan di akhiri dengan dengan short silence (sil), kemudian dengan catatan disini yang dibuat adalah database untuk database work apabila yang dibuat adalah database untuk speech

Page 78: 7203030018

synthesis adalah database fonem maka perlu ditambahkan data lagi yaitu pause (pau). Hal yang perlu diperhatikan dalam melabeli kata adalah antara label satu dengan label yang lain tidak boleh saling overlapping namun diperbolehkan untuk memberi sedikit jarak antara label satu dengan label yang lain.

Gambar 3.4 Wavesurfer

Apabila proses melabeli sudah selesai maka selanjutnya adalah menyimpan hasil label dan file wav yang telah direkam yaitu dengan mengklik “save” kemudian pada direktori yang sama dengan direktori file akan dibuat file yang bernama satu1_1.lab file ini adalah filr label yang telah dibuat tadi. Kemudian yang teakhir adalah tekan “Quit” untuk mengakhiri dan melakukan perekaman kata yang selanjutnya. File yang didapat dari hadil perekaman ini kemudian dinamai dengan nama seperti yang telah disebutkan pada paragraf sebelumnya, tujuannya adalah untuk mempermudah dalam mengoperasikan file tersebut nantinya. Berikut ini adalah contoh isi dari label file :

0 7575000 sil 7575000 8950000 s 8950000 10300000 e 10300000 11150000 l 11150000 12700000 a

Page 79: 7203030018

12700000 13675000 m 13675000 14600000 a 14600000 15550000 t 15550000 18875000 pau 18875000 19350000 p 19350000 20750000 a 20750000 21525000 pau 21525000 22475000 g 22475000 23800000 i 23800000 24550000 sil Angka-angka diatas menunjukkan panjang daerah yang

dilabeli, dimana yang ditulis adalah awal dari label dan akhir dari label, file label ini dapat di ubah secara manual dengan teks editor.

3.2.2.2. Wavesurfer

Perekaman sinyal suara dengan wavesurfer pada dasarnya tidak

beda jauh dengan perekaman mengunakan HSLab, bahkan penggunaan wavesurfer lebih mudah daripada perekaman menggunakan HSLab. Untuk melakukan perekaman menggunakan wavesurfer kita tidak perlu mengakhiri window yang sedang aktiv untuk melakukan perekaman yang selanjutnya, sehingga akan menghemat banyak waktu untuk melakukan perkaman, mengingat banyaknya data yang akan direkam. Untuk memulai merekam langkahnya adalah sebagai berikut:

Setelah muncul GUI dari wavesurfer pilih File-New, kemudian akan muncul pilihan “Choose Configuration”. Terdapat banyak konfigurasi yang disupport oleh wavesurfer diantaranya adalah “Htk Transcription” , pilih “htk transcription” kemudian klik “OK”, maka wavesurfer akan membuka jendela yang baru dengan sebuah grafik fungsi waktu terhadap frekuensi disini akan ditampilkan spektogram dari suara yang direkam sehingga memudahkan utnuk menentukan mana yang level suara dan mana yang level noise, dan satu baris lagi yang bertuliskan .lab, di sini adalah tempat untuk melabeli sinyal speech yang telah direkam.

# HSLab wavesurfer

Page 80: 7203030018

Gambar 3.5 Proses Perekaman dan Pelabelan

Cara merekam suara dengan wavesurfer adalah dengan klik tombol bulat merah, kemudian mulai merekam. Setelah proses merekam selesai kemudian tekan tombol kotak yang berada disebelah tombol merah. Selama proses perekaman dalam grafik spectogram akan tampak level dari suara yang diucapkan. Dari spektogram inilah yang kita gunakan untuk melabeli.

Langkah untuk melabeli sinyal adalah dengan memilih area yang akan dilabeli dengan klik kiri dan ditahan sepanjang area yang akan dilabeli, kemudian apabila area yang akan dilabeli telah terpilih selanjutnya adalah dengan klik-kanan tahan dan pilih “insert label” maka pada daerah yang terpilih akan muncul cursor untuk menginputkan label. Semua file hasil rekaman beserta labelnya kemudian disimpan sesuai dengan nama file pada HSLab, dengan cara mengklik kanan pada baris lab dan pilih “Save all Transcription” pada wavesurfer dapat ditentukan dimana letak file hasil rekaman beserta dengan labelnya. Setelah semua proses menyimpan file selesai kemudian dilanjutkan dengan merekam kata yang selanjutnya.

Page 81: 7203030018

Ababila data suara disimpan dalam format wav maka data tersebut harus dirubah kedalam format raw atau wav tanpa header. Untuk merubahnya digunakan program wav2raw yang dilampirkan dalam lampiran. wav2raw.sh ditulis menggunkan bahasa pemrograman snack untuk mengkonversi wav ke raw. Berikut adalah script dari wav2raw:

Dari script di atas dapat menjelaskan bahwa data suara akan

disampling dengan frekuensi 16000Hz dengan channel suara mono dan tipe encoding Lin16. Skript tersebut dapat diletakkan dimana file *.wav berada sehingga script akan mengkonversi file suara dengan tipe wave menjadi raw. 3.2.3. Ekstraksi Pitch

Pitch adalah bagian terkecil dari sinyal suara yang dapat mempresentasikan periode sinyal secara penuh. Untuk penjelasan pitch dapat dilihat dalam bab sebelumnya. Untuk mendapatkan pitch dari sinyal suara maka kita harus melakukan ekstraksi pitch terhadap file suara kita. Banyak metode yang digunakan dalam melakukan ekstraksi

#!/bin/sh # the next line restarts using wish \ exec wish8.4 "$0" "$@" package require snack snack::sound s foreach file [glob *.wav] s read $file s convert -frequency 16000 -channels mono -format Lin16 s write [file rootname $file].raw exit

Page 82: 7203030018

pitch diantaranya menggunakan metode ESPS yang terdapat dalam wavesurver, tapi dalam proyek ini digunakan SPTK untuk mendapatkan pitch dari file suara. Sedangkan tipe data pitch adalah float. Untuk perintah yang digunakan adalah sebagai berikut:

Dari script dapat dijelaskan bahwa panjang frame yaitu 640

point atau 40 ms, periode 80 point atau 5 ms dengan tipe window yang digunakan adalah blackman. Script diatas telah dimasukkan kedalam perintah make_f0 sehingga dapat digunakan perintah sebagai berikut untuk lebih mudah:

Dengan menggunakan perintah di atas maka pitch akan diekstrak dari file *.raw yang terdapat di direktori raw/ kemudian hasil file F0 secara otomatis masuk ke dalam direktori f0/ 3.2.4. Pendefinisian HMM

Sebelum data yang diperoleh dapat digunakan untuk

pengenalan feature yang telah diperoleh harus dimodelkan terlebih dahulu kedalam bentuk Hidden Markov Model (HMM), karena Speech Syntesis engine hanya dapat memproses data yang telah direpresentasikan. Untuk dapat membuat model dari bahasa yang akan dipakai dalam Speech Syntesis engine maka dibutuhkan master model yang akan di isi dengan parameter dari feature yang telah diperoleh. Master ini disebut dengan prototype yang ditempatkan pada folder model/proto. Prototype ini berisi tentang matrix banyaknya state, kemudian panjang vektor, dan jenis encoding yang digunakan dalam ekstraksi fitur dan juga sebuah matrix diagonal yang menggambarkan distribusi gaussian.

$ make_f0 raw/*.raw

x2x +sf raw/$fname.raw | frame -l 640 -p 80 | window -l 640 | pitch -s 16 -l 640 -t 4.5 -L 60 -H 170 > f0/$fname.f0

Page 83: 7203030018

Prototype digunakan sebagai wadah untuk menampung hasil analisis, dimana susunan prototipe ini disesuaiken dengan jenis encoding, step, dan vector size sebesar 60 dari tipe permodelan MSDINFO. MSDINFO menunjukkan tipe pemodelan menggunakan multi-space probability distribution (MSD) yang telah dijelaskan pada bab sebelumnya. Untuk parameter MSDINFO menunjukan apababila “1” maka stream dimodelkan dengan MSD sedangkan apabila bernilai “0” maka stream tidak dimodelkan dengan MSD.

Contoh prorotype dapat dilihat pada contoh dibawah:

Pada daftar diatas dapat kita lihat sebuah prototipe dengan jenis

encoding MSDINFO dengan jumlah state adalah 7 dengan vecsize adalah 60 dimana di sini sesuai dengan jenis encoding yang dipakai. Buat prototipe untuk setiap kata yang terdapat dalam label dalam hal ini adalah label pada file .lab sehingga didapatkan file sebanyak kata itu pula, yang perlu diperhatikan adalah untuk kata yang sama hanya diperlukan satu prototipe, walaupun dalam file label yang berbeda.

Setelah didapatkan prototype dari seluruh label maka seluruh prototype ini kemudian disimpan dalam direktori proto untuk kemudian dilakukan proses training untuk mendapatkan parameter dari MSDINFO.

~o <VecSize> 60 <USER> <MSDINFO> 4 0 1 1 1 <StreamInfo> 4 57 1 1 1 <BeginHMM> <NumStates> 7 <State> 2 <Stream> 1 <Mean> 57 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 <Variance> 57 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.0 1.0 1.0 1.0 1.0

Page 84: 7203030018

3.2.5. Pembangunan Databases Suara

Dalam pembuatan database suara diperlukan database suara yang bersar dan tingkat pengolahan yang sulit. Dengan adanya sistem HTS maka akan dimudahkan dalam proses mentraining data suara untuk mendapatkan parameter-parameter yang kita inginkan. Parameter tersebut antara lain yaitu Mel-Cepstra, F0, LogF0, koefisien Delta dan lain-lain. Parameter tersebut yang nantinya dapat digunakan untuk membangun sebuah database suara yang mandiri. Dalam mendapatkan parameter di atas dapat menggunakkan HTS yang merupakan gabungan dari HTK dan SPTK. Untuk memulai proses training dengan dengan menggunakan HTS maka terdapat beberapa langkah yang perlu dilakukan. Langkah tersebut telah masuk di dalam script mkdata.pl untuk membangun database suara. Adapun langkah yang harus dilakukan dalam proses training tersebut pertama yaitu pembuatan direktrori seperti: $basedir = "/home/taufik/project/HTS-demo_NIT-

ATR503-M001-ori"; $SPTKdir = "/usr/local/SPTK/bin"; $rawdir = "$basedir/raw"; $mcepdir = "$basedir/mcep"; $f0dir = "$basedir/f0"; $lf0dir = "$basedir/log_f0"; $windir = "$basedir/win"; $cmpdir = "$basedir/cmp"; $scpdir = "$basedir/scripts"; $labdir = "$basedir/labels/fullcontext/m001";

Menentukan konfigurasi dalam mensintesa suara. Konfigurasi yang digunakan untuk mensitesa suara adalah sebagai berikut: $sampfreq = 16000; $framelength = 0.025; $frameshift = 0.005; $windowtype = 0; $normtype = 1; $FFTLength = 512; $freqwarp = 0.42; $mceporder = 18;

Page 85: 7203030018

Pada konfigurasi di atas ditunjukkan suara akan disintesa menggunakan frekuensi sampling sebesar 16KHz, panjang frame untuk window yaitu 25ms, pergesaran frame sebesar 5 ms dan type window yang digunakan adalah blackman untuk nilai 0, hamming untuk nilai 1 dan hanning untuk nilai 2. Untuk normalisasi dari window yaitu menggunakan power untuk nilai 1, nilai 0 untuk tidak ada normalisasi dan 2 untuk normalisasi window menggunakan magnitude. FFT Length menunjukkan panjang FFT (Fast Fourier Transform) yang digunakan dalam analisa suara. Sedangkan frekuensi wrapping yaitu 0.42 untuk mel 18 order untuk analisa mel. Semua konfigurasi di atas digunakan untuk mensintesa suara untuk menghasilkan suara yang diinginkan. Setelah menentukan konfigurasi dari proses sintesa suara maka proses sintesa dapat dilakukan. Proses sintesa dilakukan dengan proses sebagai berikut: 1. Analisa Mel-Cepstral

Proses analisa suara dilakuakan dengan analisa Mel-Cepstral. Proses analisa tersebut dalam proses sintesa ini menggunakan SPTK untuk mensintesa suara. Apabila data suara bersifat Big Endian maka data tersebut harus di rubah terlebih dahulu menjadi Little Endian dengan perintah swab kemudian data dirubah menjadi tipe data.float:

Sedangkan apabila data sudah berupa Little Endian maka data hanya perlu dirubah data data.short (16 bit, 16 KHz) menjadi data.float (float, 16 KHz) menggunakan peritah:

Setelah data bertipe data.float maka dapat dilakukan proses sintesa suara untuk mendapatkan Mel-Cepstral. Perintah yang digunakan adalah sebagai berikut:

$ swab +s $data | x2x +sf |

$ x2x +sf $data

Page 86: 7203030018

Pada proses sintesa di atas sinyal suara terlebih dahulu di frame dengan panjang frame 25 ms dengan pergeseran frame setiap 5 ms. Setelah data di frame kemudian dilakukan proses windowing dengan menggunakan tipe window blackman dan di FFT dengan panjang FFT 512. Kemudian dilakukan analisa Mel-Cepstral menggunakan perintah mcep. Hasil dari Mel-Cepstral dimasukkan ke dalam direktori /mcep.

2. Konversi F0 menjadi log F0

Proses konversi F0 atau pitch menjadi logF0 berfungsi untuk membedakan antara ada suara dengan tidak ada suara. Pada HTK terdapat standar apabila F0 tidak bersuara atau bernilai 0 maka akan sama dengan -1.0E10. Sedangkan ada suara akan bernilai sama. Pada proses sintesa dalam sistem ini dilakukan oleh script freq2lfreq.pl

3. Penambahan Koefisien Delta

Penambahan koefisien delta diberikan ke dalam file Mel-Cepstral dan logF0. scipt yang digunakan untuk penambahan koefisien delta yaitu delta.pl

4. Penggabungan Mel-Cepstral dengan LogF0

Proses penggabungan Mel-Cepstral dengan LogF0 menggunakan perintah.

$SPTKdir/frame +f -l $frame_length -p $frame_shift | "."$SPTKdir/window -l $frame_length -L $FFTLength -w $windowtype -n $normtype | ". "$SPTKdir/mcep -a $freqwarp -m $mceporder -l $FFTLength > cepdir/$base.mcep "

Page 87: 7203030018

5. Membuat Header HTK

Proses pembuatan Header HTK dilakukan dengan melakukan proses pengalian frekuensi dalam pergeseran frame sebanyak 107 dan dimasukan kedalam file tmp.head. Juga penambahan 9 byte yang merupakan bagian parameter dari HTK. Proses yang dilakukan adalah sebagai berikut

6. Membandingkan Header HTK dengan Future Vector

Proses perbandingan dilakukan dengan perintah:

Proses training di atas digunakan di dalam proses mentraining suatu database suara. Semua perintah di atas telah digabungkan menjadi satu dalam sebuah script yaitu mkdata.pl.

3.2.6. Proses Training pada Databases Suara oleh HTS-demo

Proses training dimaksudkan agar sistem yang dibuat dapat mengenali suatu input yang bervariasi. Untuk dapat mencapainya maka sistem perlu dikenalkan terlebih dahulu dengan apa yang akan dikenali nantinya. Hal inilah yang disebut dengan training

$system "cat $cmpdir/tmp.head $cmpdir/tmp.cmp > $cmpdir/$base.cmp";

$system "echo $size ".($frameshift * 10000000)." | $SPTKdir/x2x +al > $cmpdir/tmp.head"; $system "echo $byte 9 | $SPTKdir/x2x +as >> $cmpdir/tmp.head";

$merge +f -s 0 -l ".($nlf0win*$lf0dim)." -L ".($nmcepwin*$mcepdim)." $cmpdir/tmp.mcep < $cmpdir/tmp.lf0 > $cmpdir/tmp.cmp

Page 88: 7203030018

Gambar 3.6 Proses Training

3.2.6.1. Inisialisasi

Sebelum memulai proses untuk training, HMM paremeter perlu diinisialisasi dengan data yang akan ditraining dengan tujuan pada saat training sistem dapat melakukan presisi pada saat pengambilan parameter dengan cepat. Pada proses training ini HTK mempunyai dua algoritma yang berbeda yaitu dengan Hinit dan HcompV. Untuk mengetahui perbedaan masing masing algoritma tersebut dapat dilihat pada bab yang sebelumnya

Berikut ini adalah gambar bagan inisialisasi dengan Hinit:

Gambar 3.7 Proses Inisialisasi

Page 89: 7203030018

• HInit Hinit menginisialisasi HMM berdasarkan durasi waktu

yang berdasarkan Algoritma Viterbi. Untuk menginisialisasi HMM dengan Hinit dapat digunakan perintah dibawah ini

Dimana masing-masing paremater dapat diterangkan

sebagai berikut: NamaHmm adalah nama dari HMM yang akan di inisialisasi.

Pada sistem ini nama dari HMM yang akan di inisialisasi adalah sesuai dengan kata yang ada pada label file.

PrototipeFile adalah prototipe dari masing-masing kata yang terdapat pada label.

Trainlist.txt adalah daftar seluruh file yang terdapat dalam direktori /data/train/mfcc

DirektoriLabel adalah tempat dimana file label (.lab) disimpan pada sistem ini file tersebut di simpan dalam direktori /data/train/lab

Label menunjukan nama lebel yang akan di training, dalam hal ini label harus sesuai kata yang terdapat dalam file label.

Model/hmm0 adalah direktori yang digunakan untuk menyimpan file output hasil inisialisasi.

Proses diatas harus dilakukan untuk masing-masing model yang akan dibuat dalam hal ini adalah banyaknya kata atau fonem yang terdapat pada semua label file. Pada proses ini HMM file output dari Hinit mempunyai nama yang sama dengan nama prototype.

• HCompV

HcompV digunakan untuk melakukan algortima dengan operasi “flat initialisation” dari sebuah model. Setiap state dari HMM

# HInit -A -D –T 1 -S trainlist.txt -M model/hmm0 \ -H model/proto/PrototipeFile -l label –L FolderLabel NamaHmm

Page 90: 7203030018

menghasilkan mean dan vektor varian yang sama, maksudya adalah setiap file mfcc dihitung secara global. Perintah yang digunakan adalah:

Keterangan mengacu pada keterangan untuk Hinit.

model/hmm0flat : output direktory untuk HCompV nama direktori dibedakan dengan Hinit agar hasil output tidak saling menimpa. HcompV tidak digunakan pada sistem ini karena inisialisasi telah dilakukan oleh Hinit. Proses yang membutuhkan HcompV pada proses ini adalah untuk menghasilkan file yang disebut dengan vFloors, vFloors adalah global variance yang didapat dari seluruh variance vektor yang dikalikan dengan sebuah faktor, vFloors ini dihasilkan selama proses inisialisasi model. Faktor yang digunakan untuk mengalikan pada vFloors ini juga dapat di set dengan memberikan argumen –f. Berikut ini adalah contoh vFloors yang dihasilkan selama proses inisialisasi:

~v varFloor1 <Variance> 57 4.062771e-02 8.432141e-03 2.219912e-03 1.268867e-03 9.345911e-04 9.211157e-04 4.000101e-04 8.045032e-04 3.565023e-04 3.902182e-04 5.002482e-04 2.877577e-04 5.090860e-04 2.230171e-04 2.677526e-04 2.048724e-04 1.933222e-04 1.523964e-04 2.137904e-04 6.024624e-04 1.817874e-04 1.038832e-04 7.135089e-05 5.336984e-05 6.325145e-05 5.653314e-05 4.639329e-05 4.602350e-05 4.828721e-05 3.740432e-05

# HcompV –T 1 -S trainlist.txt -M model/hmm0flat -H model/proto/PrototipeFile -l label –L FolderLabel NamaHmm

Page 91: 7203030018

Nilai yang disimpan pada varFloor1 disebut dengan Variance floor macro dapat digunakan nanti pada pada saat estimasi vektor varian. Pada sistem ini HcompV akan digunakan sekali untuk menghasilkan sebuah file vFloors yang akan digunakan untuk melakukan reestimasi pada proses training. Output tempat untuk vFloors di sini adalah pada direktori yang sama dengan output dari inisialisasi yaitu pada folder /model/hmm0flat. 3.2.6.2. Training

Setelah semua data di inisialisasi maka proses selanjutnya

adalah proses training dimana proses training ini adalah mereestimasi nilai parameter yang paling optimal yang diperoleh dari proses inisialisasi. Proses reestimasi ini melibatkan macro yang terdapat pada vFloors sebagai acuan. Parameter yang di reestimasi adalah probabilitas transisi dan serta mean dan varian dari vektor dari setiap observasi. Proses training ini dilakukan berulang – ulang sampai didapatkan parameter model yang paling optimal .

Training di sini dilakukan dengan tool Hrest. Berikut adalah bagan alur HRest:

Gambar 3.8 Proses Training Menggunakan Hrest

Page 92: 7203030018

Untuk memulai training model lakukan perintah dibawah ini :

Dari perintah diatas, masing-masing parameternya dapat

dijelaskan sebagai berikut NamaHmm adalah nama dari HMM yang akan di

inisialisasi. Pada sistem ini nama dari HMM yang akan di inisialisasi adalah sesuai dengan kata yang ada pada labelfile

Model/hmmi adalah model input yang akan di reestimasi dengan vFloors

vFloors adalah macro yang dipakai pada proses reestimasi dimana macro ini adalah file yang dihasilkan selama proses inisialisasi.

Model/hmmi-1/hmmfile adalah file output dari proses reestimasi yang dijalankan, nama file dari hmfile disini adalah sesuai dengan nama model yang di reestimasi.

Trainlist.txt adalah daftar seluruh file yang terdapat dalam direktori /data/train/mfcc

DirektoriLabel adalah tempat dimana file label (.lab) disimpan. Pada sistem ini file tersebut di simpan dalam direktori /data/train/lab

Label menunjukan nama lebel yang akan di training, dalam hal ini label harus sesuai kata yang terdapat dalam file label.

Proses reestimasi ini harus diulangi beberapa kali pada setiap

model, gunanya adalah untuk proses training HMM. pada sistem ini banyaknya reestimasi dilakukan sebanyak 1 kali. Pada proses reestimasi ini juga dihasilkan suatu file yang bernama macro, macro inilah yang digunakan untuk proses reestimasi HMM yang selanjutnya. Terdapat sedikit perbedaan antara file macro dengan file vFloors, file macro di

# HRest -A -D -T 1 -S trainlist.txt -M model/hmmi -H vFloors \ -H model/hmmi-1/hmmfile -l label -L DriektoriLabel NamaHMM

Page 93: 7203030018

sini adalah file vFloors yang telah diberi header mengenai jenis encoding yang dipakai dan juga ukuran vector dai HMM yang direestimasi. Sehingga dalam pembuatan file macro ini perlu diperhatikan strukturnya untuk menghindari kesalahan pada saat reestimasi.

Setelah proses reestimasi dihasilkan beberapa model yang disimpan dalam direktori hmm0, hmm0flat, hmm1, hmm2, hmm3 dimana masing-masing direktori ini telah kita buat sebelumnya dalam direktori model.

3.2.6.3. Iterasi

Didalam proses training yang dilakukan oleh HTS terdapat iterasi atau pengulangan yang dilakukan oleh HERest. HERest adalah program yang digunakan untuk melakukan restimation parameter dalam HMM atau liner transform, menggunakan embedded training version dengan algoritma Baum-Welch. Data training mengandung satu atau lebih pengucapan dimana rekaman memiliki file label standart. Penggabunggan model akan disintesa secara efektif dengan menjalin hubungan antar fonem yang dihasilkan oleh rekaman. Setiap model fonem memiliki kesamaan akumulasi yang dihasilkan oleh HRest tetapi dalam HERest akan dilakukan dilakukan proses secara simultan dengan menggunakan standart Baum-Welch dalam setiap ucapan menggunakan gabungan dalam model.

Untuk memulai training model lakukan perintah dibawah ini :

Dalam proses iterasi yang dilakukan oleh HTS yaitu sebanyak

5 kali iterasi untuk setiap model

1. HHed

HHed merupakan editor untuk HMM yang memiliki fungsi mengatur definisi HMM dan outputan modifikasi yang baru ke dalam

# HERest -r -C config -S trainList -I labs -H dir1/hmacs -M dir2 hmmList

Page 94: 7203030018

direktori baru. Dijalankan dengan perintah sebagai berikut:

Dimana cmds.hed adalah script yang mengandung daftar perintah. Setiap perintah ditulis dipisahkan oleh garis dan dimulai dengan 2 kata sebagai nama perintah. Hasil dari mengeksekusi perintah diatas adalah membaca daftar HMM dalam hmmlist dan mendefinisikannya sebagai file MMF1, MMF2, dan seterusnya. Hasil operasi yang diedit didefinisikan dengan cmd.hed dan hasil dari sistem dikeluarkan kedalam direktori newdir. Dengan tool ini maka HTK dapat digunakan untuk meniru struktur input dan ouput dari direktori.

2. HMGenS

HMGenS merupakan tool dari HTK yang berfungsi untuk menghasilkan parameter suara seperti spektrum dan F0 dari HMMs berdasarkan pada kemungkinan ukuran maksimum pada batasan window yang dinamis. Perintah tersebut dapat dijalankan dengan perintah:

File synthesis.conf merupakan file konfigurasi untuk proses sintesa. Sedangkan file nit_jp_ATR503_m001_qst001.gen adalah file yang berisi daftar kumpulan data untuk parameter yang dihasilkan proses sintesa.

3.2.7. Sintesa Suara dalam HTS-demo

Proses sintesa gelombang suara menjadi suara sintesa dilakukan oleh SPTK dengan menganalisa periode speech dan membaca koefisien

$ HMGenS -A -C /home/taufik/project/HTS-demo/configs/synthesis.conf -D -T 1 -f 0.005 /home/taufik/project/HTS- demo/gen/scp/nit_jp_ATR503_m001_qst001.gen

$ HHEd -H MMF1 -H MMF2 ... -M newdir cmds.hed

Page 95: 7203030018

cepstrum dari mel-cepstrum dengan menggunakan perintah di bawah ini:

Pada perintah di atas excite –p digunakan untuk membuat file pitch untuk mendapatkan periode dimana ada suara dan tidak ada suara. excite juga untuk mendapatkan M-sequence. Untuk perintah mlsadf adalah MLSA filter untuk speech synthesis. Perintah diatas akan membaca koefisien mel-cepstrum dari mcfile. Output dari MLSA filter memiliki tipe data float yang kemudian dirubah ke tipe data short dengan menggunakan perintah x2x +fs.

3.3. INTEGRASI KE DALAM SISTEM GALATEA Hasil proses sintesa suara yang dilakukan oleh HTS-demo akan

menghasilkan suara sintetis yang kemudian dapat digunakan dalam GALATEA. Adapun file hasil sintesa suara tersebut adalah sebagai berikut:

duration.pdf lf0.pdf mcep.pdf tree-dur.inf tree-lf0.inf tree-mcep.inf

Dari file diatas menjadi sebuah karakteristik suara baru yang dapat digunakan dalam galatea. File tersebut dimasukkan ke dalam direktori /speaker yang terdapat dalam GALATEA yang kemudian dapat digunakan oleh SSM.

3.4. Pembangunan Text To Speech Indonesia

Pada proyek akhir ini menggunakan bahasa pemrograman perl-tk yang bekerja di sistem operasi linux. Pemrograman perl-tk ini bekerja

# excite -p $period $gendir/$base.pit | mlsadf -m $mceporder -p $period -a $warp $file | x2x +fs > $gendir/$base.raw

Page 96: 7203030018

under perl sehingga kita dapat menggabungkan atau mengintegrasikan tampilan dengan program agent manager yang telah dibuat dengan bahasa pemrograman perl. Langkah awal yang dilakukan adalah membuat main window dengan ukuran yang sesuai. Posisi dari main window dapat diatur selain itu juga bisa diberi judul. Potongan program dibawah merupakan proses pembuatan main window. #!/usr/bin/perl use Tk; $mw = new MainWindow; $mw->minsize(qw(507 685)); $mw->geometry("+0+0"); $mw->configure(-title=>"Tampilan Gui");

Pengeksekusian program diatas akan menghasilkan main window memenuhi setengah layar dengan posisi tepat di pojok kiri. Tampilan window diberi judul ”Tampilan Gui”.

Di dalam main window dibuat frame - frame untuk meletakkan tombol. Tiap tombol diletakkan pada frame yang berbeda – beda unutk memudahkan pengaturan. Potongan program dibawah merupakan proses untuk membuat frame pada main window.

$main_frame = $mw -> Frame() -> pack(-fill=>'x'); $frame1 = $main_frame -> Frame(-background=>'blue')->pack(-fill=>'x'); $frame2 = $main_frame -> Frame()->pack(); $frame3 = $main_frame -> Frame()->pack(); $frame4 = $main_frame -> Frame()->pack(); $frame5 = $main_frame -> Frame()->pack();

Pada program diatas dibuat frame utama dan disimpan pada variabel $main_frame sedangkan frame – frame yang lain dibuat diatas frame utama.

Page 97: 7203030018

Terdapat beberapa jenis tombol yang digunakan, pada tampilan yang telah dibuat penulis menggunakan tombol Button dan MenuButton. Potongan program dibawah merupakan proses untuk membuat tombol pada tampilan program gui-v2.pl

Tombol – tombol tersebut ketika ditekan akan mengeksekusi program yang dituju.

Pada proyek akhir ini penulis membuat 2 tampilan window. Tampilan pertama adalah gui-v2 yang digunakan melakukan test ke tiap modul sedangkan tampilan yang kedua adalah operator-v4 yang digunakan untuk operator tiket pada museum. Potongan program di bawah merupakan proses yang dilakukan untuk membuat tampilan dasar pada operator tiket #!/usr/bin/perl use Tk; $main=MainWindow->new; $main->minsize(qw(507 685)); $main->configure(-title=>"Operator Tiket", -background=>'white');

$file = $frame1->Menubutton(-text=>' File ', -background=>'blue', -foreground=>'white')->pack(-side=>'left'); $ekspresi = $frame1->Menubutton(-text=>' Expresi ', -background=>'blue', -foreground=>'white')->pack(-side=>'left'); $tes_modul = $frame1->Menubutton(-text=>' Test Modul ', -background=>'blue', -foreground=>'white')->pack(-side=>'left'); $wajah = $frame1->Menubutton(-text=>' Wajah ', -background=>'blue', -foreground=>'white')->pack(-side=>'left');

Page 98: 7203030018

$main -> geometry("+0+0"); $atas = $main->Frame(-background=>'white')->pack(); $atas ->Button(-text=>" Pengaturan ", -command =>\&option) -> pack(-side=>'top', -pady=>9, -padx=>8); $atas -> Button(-text=>" Pemesanan Tiket ", -command =>\&tiket) -> pack(-side=>'top',-pady=>9,-padx=>8); $atas -> Button(-text=>" Informasi ", -command =>subexit;) -> pack(-side=>'top',-pady=>9,-padx=>8); $atas -> Button(-text=>" Selesai ", -command =>\&keluar) -> pack(-side=>'top',-pady=>9,-padx=>8);

Gambar dibawah merupakan tampilan gui dari text to speech

bahasa Indonesia yang telah dibuat. Pada tampilan gui terdapat beberapa tombol menu. Tombol ini akan menampilkan submenu ketika ditekan.

Page 99: 7203030018

Gambar 3.7 Tampilan text to Speech Indonesia

Page 100: 7203030018

Halaman Ini Sengaja Dikosongkan

Page 101: 7203030018

BAB IV PENGUJIAN DAN ANALISA SISTEM

4.4 PENDAHULUAN

Setelah dilakukan perencanaan dan pembuatan sistem sehingga terbentuk suatu sistem yang lengkap. Tahap selanjutnya adalah pengujian terhadap seluruh sistem yang telah dibuat. Pengujian ini dilakukan untuk mengetahui apakah sistem sudah dapat berjalan dengan baik dan mencari kekurangan yang perlu diperbaiki dan dilakukan perbaikan yanga dapat meningkatkan kualitas dari sistem yang telah dibuat.

4.5 PENGUJIAN HASIL SINTESA SUARA

Pengujian proyek akhir ini yaitu dengan melakukan pengujian terhadap sintesa suara yang dihasilkan oleh HTS-demo. Maka dalam pengujian dan analisa terlebih dahulu akan dijelaskan proses yang dilakukan oleh HTS-demo. Kemudian dilakukan analisa terhadap hasil sintesa suara yang dihasilkan.

Metode yang digunakan untuk menganalisa dan menguji pembangunan database suara kemudian database suara akan ditraining untuk menjadi suara sintesa.

4.5.1 Analisa Pembangunan Databases Suara Indonesia

Pembangunan database suara memerlukan database suara yang besar. Pada percobaan ini mengacu pada database suara yang berisi suara orang Jepang yaitu HTS-demo_NIT-ATR503-M001. Dalam percobaan ini dilakukan perekaman suara sebanyak 20 sample suara. Berikut adalah daftar kalimat yang digunakan dalam proses perekaman:

1. Selamat Pagi 2. Foto Cakep 3. Makan Siang 4. Sore yang Cerah

89

Page 102: 7203030018

5. Malam Senen 6. Waktu Makan 7. Pembuatan Buku 8. Pemain Figuran 9. Sedang Bermain 10. Wanita Idaman 11. Saya ingin memesan tiket tujuan Surabaya dan Jakarta. 12. Pesawat telah mendarat di bandara Semarang pada hari

Selasa pagi 13. Tujuan keberangkatan pesawat Buraq dari Bandung adalah

Solo. 14. Saya terbang naik Mandala hari Rabu tanggal tiga belas

Maret dua ribu enam. 15. Harga tiket kelas ekonomi dari padang dengan batavia

adalah delapan ratus lima puluh ribu rupiah. 16. Jadwal keberangkatan Mandala, hari Senin, Selasa dan

Rabu. 17. Terima kasih atas tiket Merpati ke Surabaya 18. Untuk keamanan selama terbang, Anda harus memakai

sabuk pengaman. 19. Bulan Januari, februari, september, oktober, november, dan

Desember tiket mahal. 20. Maaf anda belum memesan tiket untuk semarang.

Setelah dilakukan proses perekaman kemudian dilanjutkan dengan proses pelabelan. Teknik pelabelan yang digunakan adalah teknik pelabelan fonem. Hasil dari proses pelabelan disimpan dalam bentuk *.lab yang terdapat dalam direktory /label/monophone/m001/. Contoh hasil dari proses pelabelan dari kalimat ”Selamat Pagi”.

0 7575000 sil 7575000 8950000 s 8950000 10300000 e 10300000 11150000 l 11150000 12700000 a 12700000 13675000 m

Page 103: 7203030018

13675000 14600000 a 14600000 15550000 t 15550000 18875000 pau 18875000 19350000 p 19350000 20750000 a 20750000 21525000 pau 21525000 22475000 g 22475000 23800000 i 23800000 24550000 sil Pada hasil pelabelan di atas proses pelabelan di awali dan di akhiri dengan sil yang menandakan awal adanya suara dan akhir suara. Pada pelabelan fonem setiap huruf harus mendapatkan label. Apabila terjadi tenggang waktu antara satu huruf dengan huruf yang lain maka harus diberi label pau atau pause. Angka pada setiap label menunjukkan waktu mulai ada suara sampai tidak ada suara atau yang disebut dengan timing. Proses pelabelan di atas disebut juga proses pelabelan monophone. Dalam HTS-demo terdapat dua pelabelan yaitu monophone dan fullcontext. Proses pelabelan monophone dilakukan secara manual seperti di atas, sedangkan pelabelan fullcontext disebut juga pelabelan otomatis. Proses pelabelan yang digunakan adalah proses pelabelan monophone. Pada percobaan ini sampel suara dapat dianalisa menggunakan SPTK yaitu dengan melakukan perintah.

Dengan menggunakan gwave yang memiliki fungsi untuk membaca inputan dari file suara kemudian di keluarkan secara berurutan menggunakan perintah xgr.

$gwave +s nit_jp_ATR503_m001_a01.raw | xgr

Page 104: 7203030018

Gambar 4.1 Sinyal Suara

Pada gambar di atas menunjukkan mulai adanya sinyal suara berada pada 12480 dan berakhir pada 38400. Setelah suara diberi

Page 105: 7203030018

label, langkah selanjutnya yaitu mengekstrak pitch dari file suara tersebut, dengan menggunakan perintah di bawah:

Dari perintah di atas akan dilakukan ekstraksi pitch terhadap file suara. Untuk menganalisa dapat menggunakan tool bantuan dari SPTK untuk menampilkan hasil ekstraksi tersebut. Perintah yang digunakan adalah sebagai berikut:

Maka akan menghasilkan tampilan sebagai berikut:

Gambar 4.2 Sinyal Pitch Sebelum dan Sesudah Proses Training

Dari gambar di atas sinyal pitch ditampilkan dalam dengan Y = 250, Width = 15 Cm, High = 4 Cm, dan X =596.

x2x +sf raw/$fname.raw | frame -l 640 -p 80 | window -l 640 | pitch -s 16 -l 640 -t 4.5 -L 60 -H 170 > f0/$fname.f0

$ fdrw -y 0 250 -W 1.5 -H 0.4 < nit_jp_ATR503_m001_a01.f0 | xgr

Page 106: 7203030018

Setelah parameter terpenuhi maka dapat dilakukan proses pembangunan basis data suara terhadap sample suara, label, dan pitch. Dalam proses pembangunan basis data suara yang dijelaskan pada bab 3. Berikut adalah proses pembangunan basis data suara. Dengan melakukan perintah.

sed 's:CURRENTDIR:'`pwd`':g' `pwd`/labels/mono.mlf | \ sed 's:SPEAKER:'m001':g' | \ sed 's:DATASET:'nit_jp_ATR503':g' > `pwd`/labels/mono_m001.mlf sed 's:CURRENTDIR:'`pwd`':g' `pwd`/labels/full.mlf | \ sed 's:SPEAKER:'m001':g' | \ sed 's:DATASET:'nit_jp_ATR503':g' > `pwd`/labels/full_m001.mlf sed 's:CURRENTDIR:'`pwd`':g' `pwd`/scripts/mkdata.in | \ sed 's:SPTKDIR:'/usr/local/SPTK/bin':g' | \ sed 's:MCEPORDER:'18':g' | \ sed 's:BYTESWAP:'0':g' | \ sed 's:SPEAKER:'m001':g' > `pwd`/scripts/mkdata.pl perl `pwd`/scripts/mkdata.pl make training data nit_jp_ATR503_m001_a01.cmp from nit_jp_ATR503_m001_a01.raw make training data nit_jp_ATR503_m001_a02.cmp from nit_jp_ATR503_m001_a02.raw make training data nit_jp_ATR503_m001_a03.cmp from nit_jp_ATR503_m001_a03.raw make training data …………. make training data nit_jp_ATR503_m001_a19.cmp from nit_jp_ATR503_m001_a19.raw make training data nit_jp_ATR503_m001_a20.cmp from nit_jp_ATR503_m001_a20.raw cat `pwd`/labels/fullcontext/m001/*.lab | \ sort -u > `pwd`/lists/full_m001.list sort -u `pwd`/lists/full_m001.list \

$ make

Page 107: 7203030018

`pwd`/labels/fullcontext/gen/*.lab \ > `pwd`/lists/full_m001_all.list sed -e "s/[0-9]*//g" `pwd`/labels/monophone/m001/*.lab | \ sed -e "s/ *//g" | sort -u > `pwd`/lists/mono_m001.list ls `pwd`/cmp/nit_jp_ATR503_m001*.cmp > `pwd`/lists/data_nit_jp_ATR503_m001.scp Proses pembangunan basis data suara akan menghasilkan file *.cmp pada folder /cmp yang merupakan hasil dari proses pembelajaran dari sample suara. Selain itu juga menghasilkan file dari analisa Mel-Cepstral yang terletak pada folder /mcep. Proses analisa Mel-Cepstral bertujuan untuk menghilangkan pengaruh noise shipping dan postfiltering sehingga menghasilkan suara dengan kulitas yang tinggi. Data hasil analisa Mel-Cepstral dapat dilihat dalam direktori /mcep. Untuk menganalisanya dapat menggunakan tool dari SPTK yaitu:

Perintah di atas bertujuan untuk manmpilakan bentuk mel-cepstrum dengan urutan analisa sebesar 20, frekuensi warping 0.42, FFT 512, frame yang diambil dari frame ke 10 sampai frame ke 135, dengan besar frekuensi sampling 16 kHz.

$ bcut -n 20 -s 10 -e 135 < nit_jp_ATR503_m001_a01.mcep | mgc2sp -m 20 -a 0.42 -g 0 -l 512 | grlogsp -l 512 -x 8 | xgr

Page 108: 7203030018

Gambar 4.3 Spektrum Suara Sebelum dan Sesudah Proses

Training Hasil dari proses training yang dilakukan oleh HTS-demo dapat membuat kualitas spektrum dan pitch menjadi lebih bagus. Hal ini disebabkan dalam HTS-demo menggunakan MLSA filter yang dapat menghilangkan pengaruh noise shipping dan postfiltering sehingga dapat menghasilkan kuwalitas suara yang tinggi.

$ bcut -n 20 -s 65 -e 65 < nit_jp_ATR503_m001_a01.mcep | mgc2sp -m 20 -a 0.42 -g 0 -l 512 | glogsp -l 512 -x 8 | xgr

Page 109: 7203030018

Gambar 4.4 Spektrum FFT

Dari hasil pengamatan menggunakan FFT dapat ditunjukkan bahwa suara manusia berada pada range frekuensi 2.5 KHz sampai dengan 3 KHz. Untuk data suara pada HTS-demo_NIT-ATR503-M001 telah melalui proses training sehingga menghasilkan file cmp, mcep, dan log_f0. Setelah berhasil mentraining suara yang terdapat didalam HTS-demo_NIT-ATR503-M001 kemudian kita dapat melakukan proses sintesa menggunakan HTS-demo.

4.6 Nilai Mean Opinion Score (MOS)

Dengan memperdengarkan suara yang dikeluarkan oleh Galatea dan melakukan survey, maka didapat nilai MOS sebagai berikut:

Page 110: 7203030018

Table 4.1 Table Nilai Mean Opinion Score(MOS) No KALIMAT MOS 1 Selamat Datang di Museum Bank Indonesia 3,45 2 Silahkan Memesan Karcis, Jumlah Karcis? 2,95 3 Satu 3,8 4 Harga Karcis Lima Ribu, Tiket Keluar 2,75 5 Menambah Karcis Lagi? 3,05 6 Tidak, Silahkan Masuk Ke Museum 3,3

KORELASI TINGKAT KEALAMIAN DAN KEJELASAN SUARA YANG DIUCAPKAN SISTEM

00.5

11.5

22.5

33.5

4

1 2 3 4 5 6

KALIMAT

MO

S

MOS

Gambar 4.5 Gambar Nilai Mean Opinion Score(MOS)

Hasil survey yang dilakukan terhadap 20 responden untuk mengetahui hubungan tingkat kejelasan dari suara yang dikeluarkan oleh GALATEA menunjukkan nilai suara yang dikeluarkan oleh GALATEA berada pada nilai 3,216667 atau dalam nilai MOS berarti Fair atau menunjukkan suara dari GALATEA dapat dimengerti oleh responden. Meski banyak responden yang mengerti tapi sistem ini masih belum sempurna untuk digunakan di Indonesia.

Page 111: 7203030018

BAB V KESIMPULAN DAN SARAN

5.1. KESIMPULAN

1. Pembangunan suara sintesa membutuhkan basis data suara yang besar. Suara untuk basis data suara Jepang sebanyak 503 sample suara dengan sistem pelabelan fonem. Basis data suara tersebut ditraining oleh software HTS-demo yang merupakan gabungan dari HTK dan SPTK.

2. Hasil dari proses training dari HTS-demo yaitu suara sintesis yang dapat digunakan di dalam GALATEA. Suara sintesis tersebut terdiri atas file duration.pdf, lf0.pdf, mcep.pdf, tree-dur.inf, tree-lf0.inf, dan tree-mcep.inf. File tersebut adalah file hasil training dan clustering terhadap basis data suara.

3. Hasil dari proses training yang dilakukan oleh HTS-demo menunjukkan kulitas spektrum dan pitch yang bagus disebabkan penggunaan MLSA filter.

4. Dalam proses training menggunakan HTS-demo tipe encoding yang digunakan adalah MSDINFO atau multi-space probability distribution (MSD). Penggunaan MSD karena dapat digunakan untuk menganalisa sinyal continues maupun sinyal diskrit

5.2. SARAN

1. Dalam proses perekaman suara diharapkan dilakukan di dalam ruangan kedap udara yang memiliki noise sekecil mungkin.

2. Membangun suara sintesa dibutuhkan database suara yang besar, sehingga proses pengambilan sample suara akan membutuhkan waktu yang harus di perhitungkan.

99

Page 112: 7203030018

DAFTAR PUSTAKA [1]. Shin-Ichi Kawamoto Et al, Open-Source Software for Developing Anthropomorphic Dialog Spoken Agent, PRICAI2002-Agent-FINAL.pdf, The University of Tokyo, 2002. [2]. Helmut Prendinger and Mitsuru Ishizuka, Introducing the Cast for Social Computing:Life-like Characters,Hellmut-LLC-book-Intro.pdf, Department of Information and Communication Engineering Graduate School of Information Science and Technology University of Tokyo,2002 [3]. Shigeki Sagayama ,Takuya Nishimoto, Anthropomorphic Agent as an Integrating Platform of Audio-Visual Information, Sagayama2003COE09.pdf, The University of Tokyo, 2003 [4]. Microsoft Corporation, Cambridge University Engineering Department, HTK Book (2001-2005). htkbook.pdf [5]. Reference Manual for Speech Signal Processing Toolkit Ver. 3.0, SPTKref_e-3.0.pdf [6]. Keiichi Tokuda, Takayoshi Yoshimura, Takashi Masuko, Takao Kobayashi, Tadashi Kitamura, ``Speech parameter generation algorithms for HMM-based speech synthesis,'' Proceedings of IEEE International Conference on Acoustics, Speech, and Signal Processing, Istanbul, Turkey, vol.3, pp.1315-1318, June 2000, tokuda_icassp2000.pdf [7]. Keiichi Tokuda, Takashi Mausko, Noboru Miyazaki, Takao Kobayashi, ``Multi-space probability distribution HMM,'' IEICE Trans. Information and Systems, vol.E85-D, no.3, pp.455-464, Mar. 2002, tokuda_ieice_e85-d_3_455-464_2002.pdf [8]. Takayoshi Yoshimura, Keiichi Tokuda, Takashi Masuko, Takao Kobayashi and Tadashi Kitamura, ``Simultaneous modeling of spectrum, pitch and duration in HMM-based speech synthesis,'' Proceedings of European Conference on Speech Communication and Technology, Budapest, Hungary, vol.5, pp.2347-2350, Sep. 1999. yoshimura_eurospeech1999.pdf [9]. Keiichi Tokuda, Heiga Zen, Alan W. Black, ``An HMM-based speech synthesis system applied to English,'' 2002 IEEE Speech Synthesis Workshop, Santa Monica, California, Sep. 11-13, 2002. tokuda_TTSworkshop2002.pdf

100

Page 113: 7203030018

LAMPIRAN

1. mkdata.pl DIGUNAKAN UNTUK MENTRAINING SAMPLE SUARA BERBASIS HTS

#!/usr/bin/perl # -------------------------------------------- # # The HMM-Based Speech Synthesis System (HTS): version 1.1.1 # # HTS Working Group # Department of Computer Science # Nagoya Institute of Technology # and # Interdisciplinary Graduate School of Science and Engineering # # Tokyo Institute of Technology # # Copyright (c) 2001-2003 # All Rights Reserved. # # # # Permission is hereby granted, free of charge, to use and # # distribute this software and its documentation without # # restriction, including without limitation the rights to use, # # copy, modify, merge, publish, distribute, sublicense, and/or # # sell copies of this work, and to permit persons to whom this # # work is furnished to do so, subject to the following conditions: # # # # 1. The code must retain the above copyright notice, this list #

101

Page 114: 7203030018

# of conditions and the following disclaimer. # # # # 2. Any modifications must be clearly marked as such. # # # # NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF TECHNOLOGY, # # HTS WORKING GROUP, AND THE CONTRIBUTORS TO THIS WORK DISCLAIM # # ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL # # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT # # SHALL NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF # # TECHNOLOGY, HTS WORKING GROUP, NOR THE CONTRIBUTORS BE LIABLE # # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY # # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS # # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # # PERFORMANCE OF THIS SOFTWARE. # # # #------------------------------------------ # # mkdata.pl : make training data for HMM-based speech synthesis # # # 2003/12/26 by Heiga Zen #

Page 115: 7203030018

$|=1; use File::Basename; # Endian switch $byteswap = 0; # directory ============================== $basedir = "/home/taufik/project/HTS-demo_NIT-ATR503-M001-ori"; $SPTKdir = "/usr/local/SPTK/bin"; $rawdir = "$basedir/raw"; $mcepdir = "$basedir/mcep"; $f0dir = "$basedir/f0"; $lf0dir = "$basedir/log_f0"; $windir = "$basedir/win"; $cmpdir = "$basedir/cmp"; $scpdir = "$basedir/scripts"; $labdir = "$basedir/labels/fullcontext/m001"; # speech analysis setting =============== $sampfreq = 16000; # 16kHz sampling frequency $framelength = 0.025; # 25ms window length $frameshift = 0.005; # 5ms frame shift $windowtype = 0; # window type -> 0: Blackman 1: Hamming 2: Hanning $normtype = 1; # normalization of window -> 0: none 1: by power 2: by magnitude $FFTLength = 512; # FFT length for Mel-cepstral analysis $freqwarp = 0.42; # frequency warping for mel $mceporder = 18; # order of Mel-cepstral analysis # regression windows for calcurate dynamic and acceralation coefficients

Page 116: 7203030018

$mcepwin[0] = "$windir/mcep_dyn.win"; $mcepwin[1] = "$windir/mcep_acc.win"; $lf0win[0] = "$windir/lf0_dyn.win"; $lf0win[1] = "$windir/lf0_acc.win"; # Main Program ========================== # speech analysis ------------------------- @RAW = glob("$rawdir/*.raw"); $frame_length = $sampfreq * $framelength; $frame_shift = $sampfreq * $frameshift; $mcepdim = $mceporder + 1; $lf0dim = 1; $nmcepwin = @mcepwin + 1; $nlf0win = @lf0win + 1; $byte = 4 * ($mcepdim * $nmcepwin + $lf0dim * $nlf0win); $period = 1000 * $frameshift; foreach $data (@RAW) $base = basename($data,'.raw'); if ( -s "$labdir/$base.lab" && -s "$f0dir/$base.f0" ) print " make training data $base.cmp from $base.raw \n"; # mel-cepstral analysis if ($byteswap) $line = "$SPTKdir/swab +s $data | x2x +sf | "; # big endian else $line = "$SPTKdir/x2x +sf $data | "; # little endian

Page 117: 7203030018

$line .= "$SPTKdir/frame +f -l $frame_length -p $frame_shift | " . "$SPTKdir/window -l $frame_length -L $FFTLength -w $windowtype -n $normtype | " . "$SPTKdir/mcep -a $freqwarp -m $mceporder -l $FFTLength > $mcepdir/$base.mcep "; system "$line \n"; # convert f0 to log f0 if ($byteswap) system "$SPTKdir/swab +f $f0dir/$base.f0 > $lf0dir/tmp.f0 "; # big endian else system "cp $f0dir/$base.f0 $lf0dir/tmp.f0\n"; # little endian system "perl $scpdir/freq2lfreq.pl $lf0dir/tmp.f0 > $lf0dir/$base.lf0\n"; # add delta and delta delta coefficients system "perl $scpdir/delta.pl $mcepdim $mcepdir/$base.mcep @mcepwin > $cmpdir/tmp.mcep"; system "perl $scpdir/delta.pl $lf0dim $lf0dir/$base.lf0 @lf0win > $cmpdir/tmp.lf0"; # merge mel-cepstrum and log f0 system "$SPTKdir/merge +f -s 0 -l ".($nlf0win*$lf0dim)." -L ".($nmcepwin*$mcepdim)." $cmpdir/tmp.mcep < $cmpdir/tmp.lf0 > $cmpdir/tmp.cmp";

Page 118: 7203030018

# make HTK header @STAT = stat "$cmpdir/tmp.cmp"; $size = $STAT[7]/$byte; system "echo $size ".($frameshift * 10000000)." | $SPTKdir/x2x +al > $cmpdir/tmp.head"; system "echo $byte 9 | $SPTKdir/x2x +as >> $cmpdir/tmp.head"; # number 9 corresponds to user specified parameter in HTK # combine HTK header and sequence of feature vector system "cat $cmpdir/tmp.head $cmpdir/tmp.cmp > $cmpdir/$base.cmp"; `rm -f $cmpdir/tmp.*`; `rm -f $lf0dir/tmp.*`;

Page 119: 7203030018

2. freq2lfreq.pl DIGUNAKAN UNTUK MENKONVERSI

FREKUENSI KE LOG FREKUENSI #!/usr/bin/perl # --------------------------------------------- # # The HMM-Based Speech Synthesis System (HTS): version 1.1.1 # # HTS Working Group # # Department of Computer Science # Nagoya Institute of Technology # and # Interdisciplinary Graduate School of Science and Engineering # # Tokyo Institute of Technology # # Copyright (c) 2001-2003 # All Rights Reserved. # # Permission is hereby granted, free of charge, to use and # distribute this software and its documentation without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of this work, and to permit persons to whom this # work is furnished to do so, subject to the following conditions: # # # 1. The code must retain the above copyright notice, this list of conditions and the following disclaimer. # #

Page 120: 7203030018

# 2. Any modifications must be clearly marked as such. # # # # NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF TECHNOLOGY, # # HTS WORKING GROUP, AND THE CONTRIBUTORS TO THIS WORK DISCLAIM # # ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL # # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT # # SHALL NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF # # TECHNOLOGY, HTS WORKING GROUP, NOR THE CONTRIBUTORS BE LIABLE # # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY # # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS # # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # # PERFORMANCE OF THIS SOFTWARE. # # # # ------------------------------------------- # # freq2lfreq.pl : convert frequency to log frequency # for training data of HMM-based speech synthesis # # # 2003/12/26 by Heiga Zen # -------------------------------------------- #

Page 121: 7203030018

open(INPUT,"$ARGV[0]") || die "cannot open file : $ARGV[0]";; @STAT=stat(INPUT); read(INPUT,$data,$STAT[7]); close(INPUT); $n = $STAT[7]/4; @f0 = unpack("f$n",$data); for ($i=0; $i<$n; $i++) if ($f0[$i] == 0.0) $lf0[$i] = -1.0E10; # "-1.0E10" corresponds to log(0) in HTK else $lf0[$i] = log($f0[$i]); $data = pack("f$n",@lf0); print $data; # end of freq2lfreq.pl

Page 122: 7203030018

3. freq2lfreq.pl DIGUNAKAN UNTUK MENKONVERSI

FREKUENSI KE LOG FREKUENSI

#!/usr/bin/perl # -------------------------------------------- # # The HMM-Based Speech Synthesis System (HTS): version 1.1.1 # # HTS Working Group # # # Department of Computer Science # # Nagoya Institute of Technology # and # Interdisciplinary Graduate School of Science and Engineering # # Tokyo Institute of Technology # # Copyright (c) 2001-2003 # # All Rights Reserved. # # Permission is hereby granted, free of charge, to use and # # distribute this software and its documentation without # # restriction, including without limitation the rights to use, # # copy, modify, merge, publish, distribute, sublicense, and/or # # sell copies of this work, and to permit persons to whom this # # work is furnished to do so, subject to the following conditions: # # # # 1. The code must retain the above copyright notice, this list #

Page 123: 7203030018

# of conditions and the following disclaimer. # # # # 2. Any modifications must be clearly marked as such. # # # # NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF TECHNOLOGY, # # HTS WORKING GROUP, AND THE CONTRIBUTORS TO THIS WORK DISCLAIM # # ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL # # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT # # SHALL NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF # # TECHNOLOGY, HTS WORKING GROUP, NOR THE CONTRIBUTORS BE LIABLE # # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY # # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS # # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # # PERFORMANCE OF THIS SOFTWARE. # # # # ---------------------------------------------------------------- # # delta.pl : load regression window and add delta coefficients # # #

Page 124: 7203030018

# 2003/12/26 by Heiga Zen # # ---------------------------------------------------------------- # if (@ARGV<3) print "delta.pl dimensionality infile winfile1 winfile2 ... \n"; exit(0); # dimensionality of input vector $dim = $ARGV[0]; # open infile as a sequence of static coefficients open(INPUT,"$ARGV[1]") || die "cannot open file : $ARGV[1]"; @STAT=stat(INPUT); read(INPUT,$data,$STAT[7]); close(INPUT); $nwin = @ARGV-1; $n = $STAT[7]/4; # number of data $T = $n/$dim; # length of input vector # static coefficients @static = unpack("f$n",$data); # unpack static coefficients for ($t=0; $t<$T; $t++) for ($j=0; $j<$dim; $j++) $delta[$t*$nwin*$dim+$j] = $static[$t*$dim+$j]; # store static coefficients

Page 125: 7203030018

# dynamic coefficients $nwin = @ARGV-1; # the number of delta window ( include static window ) for($i=2;$i<=$nwin;$i++) # load $i-th dynamic coefficients window open(INPUT,"$ARGV[$i]") || die "cannot open file : $ARGV[$i]"; @STAT=stat(INPUT); read(INPUT,$data,$STAT[7]); close(INPUT); $w = $STAT[7]/4; @win = unpack("f$w",$data); $size = @win; # size of this window if ($size % 2 != 1) die "Size of window must be 2*n + 1 and float"; $nlr = ($size-1)/2; # calcurate $i-th dynamic coefficients for ($t=0; $t<$T; $t++) for ($j=0; $j<$dim; $j++) # check voiced/unvoiced boundary $voiced = 1; for ($k=-$nlr; $k<=$nlr; $k++) if ($static[($t+$k)*$dim+$j] == -1.0E10) $voiced = 0; if ($voiced) $delta[$t*$nwin*$dim+$dim*($i-1)+$j] = 0.0; for ($k=-$nlr; $k<=$nlr; $k++)

Page 126: 7203030018

$delta[$t*$nwin*$dim+$dim*($i-1)+$j] += $win[$k+$nlr] * $static[($t+$k)*$dim+$j]; else $delta[$t*$nwin*$dim+$dim*($i-1)+$j] = -1.0E10; $n = $n*$nwin; $data = pack("f$n",@delta); print $data; # end of delta.pl

Page 127: 7203030018

4. Training.pl DIGUNAKAN UNTUK MENGEKSEKUSI

PERINTAH HTK BERBASIS SPEECH SYNTHESIS #!/usr/bin/perl # ------------------------------------------- # # The HMM-Based Speech Synthesis System (HTS): version 1.1.1 # # HTS Working Group # # # Department of Computer Science # Nagoya Institute of Technology # and # Interdisciplinary Graduate School of Science and Engineering # Tokyo Institute of Technology # Copyright (c) 2001-2003 # All Rights Reserved. # # # # Training.pl : execute all HTK command for HMM-based speech # # synthesis system, and generate speech from # # trained HMMs. # # # # 2003/12/26 by Heiga Zen # # -------------------------------------------------------- # $|=1; # Setting ============================== $speaker = 'm001';

Page 128: 7203030018

$cnd = 'nit_jp_ATR503'; $qnum = '001'; @HMMSET = ('cmp','dur'); @cmp = ('mcep','logF0'); @dur = ('dur'); $ref'cmp' = \@cmp; $ref'dur' = \@dur; # Switch ================================ $MAKEEMV = 1; # Make environment for experiment $COMPVAR = 1; # Compute global variance for variance flooring $INITREST = 1; # Parameter initialization and re-estimation $COPYM2F = 1; # Copy monophone HMMs to context-dependent HMMs $ERESTFL = 1; # Embedded re-estimation for context-dependent HMMs $TBCCEP = 1; # Tree-based context clustering for spectrum $TBCF0 = 1; # Tree-based context clustering for f0 $ERESTTI = 1; # Embedded re-estimation tied HMMs $TBCDUR = 1; # Tree-based context clustering for duration $CONVERT = 1; # Convert MMF files to hts_engine format $MKUNSEN = 1; # Make unseen models $PARGEN = 1; # Generate speech parameter sequences from HMMs $WAVGEN = 1; # Synthesis waveforms from generated mel-cepstrum and f0

Page 129: 7203030018

# Discrimination ======================== $SPEAKER = "_$speaker"; $CND = "_$cnd"; $QNUM = "_qst$qnum"; # Speech Analysis Setting ============== $samprate = 16000; # sampling rate $mceporder = 18; # order of Mel-Cepstral Analysis $frameshift = 0.005; # for 5-ms frame shift # Global Value ========================== $numIters = 5; $numConst = 5; $numstate = 5; $minvar = "1.0e-04"; $beam = "1.0e+20"; $vfloor'cmp' = 0.01; # variance flooring for spectrum & f0 $vfloor'dur' = 0.01; # variance flooring for duration $lambda'mcep' = 1.0; # control parameter for MDL-based context clustering $lambda'logF0' = 1.0; # lambda > 1.0 -> smaller tree will be constructed $lambda'dur' = 1.0; # lambda < 1.0 -> larger tree will be constructed # File location ========================= # setting of project directory ---------- $projectdir = "/home/taufik/project/HTS-demo"; $datadir = "/home/taufik/project/HTS-demo_NIT-ATR503-M001-ori"; # directory of executor ----------------- $htsbindir = "/usr/local/bin.linux";

Page 130: 7203030018

$sptkbindir = "/usr/local/SPTK/bin"; $scpdir = "$projectdir/scripts"; # prototype ----------------------------- $prtfile = "$projectdir/proto/"; # data file scripts --------------------- $datscp = "$datadir/lists/data$CND$SPEAKER.scp"; # files for monophone ------------------ $monolst = "$datadir/lists/mono$SPEAKER.list"; $monomlf = "$datadir/labels/mono$SPEAKER.mlf"; # files for fullcontext ----------------- $fulllst = "$datadir/lists/full$SPEAKER.list"; $fulllst_all = "$datadir/lists/full$SPEAKER_all.list"; $fullmlf = "$datadir/labels/full$SPEAKER.mlf"; # stats file ---------------------------- $statsdir = "$projectdir/stats/$cnd/$speaker"; foreach $i (@HMMSET) $stats$i = "$statsdir/stats$CND$SPEAKER_$i.sts"; # hmm file ------------------------------ foreach $i (@HMMSET) $hmmsdir$i = "$projectdir/hmms/$cnd/$speaker/$i"; $hinitdir = "$hmmsdir'cmp'/HInit"; $hrestdir = "$hmmsdir'cmp'/HRest";

Page 131: 7203030018

foreach $i (@HMMSET) $fullmmf$i = "$hmmsdir$i/fullcontext_$i.mmf"; foreach $i (@HMMSET) $clusmmf$i = "$hmmsdir$i/clustered_$i$QNUM.mmf"; $clalmmf$i = "$hmmsdir$i/clustered_$i$QNUM_all.mmf"; # config file --------------------------- $traincfg = "$projectdir/configs/default.conf"; $convcfg = "$projectdir/configs/convert.conf"; $syncfg = "$projectdir/configs/synthesis.conf"; # edit files ---------------------------- $heddir = "$projectdir/edfiles/$cnd/$speaker"; $mon2fuled = "$heddir/mon2ful.hed"; foreach $i (@HMMSET) $mkuhed$i = "$heddir/$i/mkunseen$SPEAKER$QNUM_$i.hed"; foreach $j (@$ref$i) $cnvhed$j = "$heddir/$i/convert$SPEAKER$QNUM_$j.hed"; $clushed$j = "$heddir/$i/cxtclus$SPEAKER$QNUM_$j.hed"; # question files ------------------------ $qsfile'mcep' = "$datadir/questions/questions$QNUM.hed"; $qsfile'logF0' = "$datadir/questions/questions$QNUM.hed";

Page 132: 7203030018

$qsfile'dur' = "$datadir/questions/questions$QNUM.hed"; # tree files ----------------------------- foreach $i (@HMMSET) $treesdir$i = "$projectdir/trees/$cnd/$speaker/$i"; foreach $j (@$ref$i) $trees$j = "$treesdir$i/trees$SPEAKER$QNUM_$j.inf"; # hts_engine files ----------------------- $voicedir = "$projectdir/voices/$cnd/$speaker/qst$qnum"; $tree'mcep' = "$voicedir/tree-mcep.inf"; $tree'lf0' = "$voicedir/tree-lf0.inf"; $tree'dur' = "$voicedir/tree-dur.inf"; $pdf'mcep' = "$voicedir/mcep.pdf"; $pdf'lf0' = "$voicedir/lf0.pdf"; $pdf'dur' = "$voicedir/duration.pdf"; # parameter generation ---- $genscp = "$projectdir/gen/scp/$cnd$SPEAKER$QNUM.gen"; $win_mcep[1] = "$datadir/win/mcep_dyn.win"; $win_mcep[2] = "$datadir/win/mcep_acc.win"; $win_lf0[1] = "$datadir/win/lf0_dyn.win"; $win_lf0[2] = "$datadir/win/lf0_acc.win"; $genlabdir = "$datadir/labels/fullcontext/gen"; $gendir = "$projectdir/gen/$cnd/$speaker/$cnd$SPEAKER$QNUM"; # some setting

Page 133: 7203030018

$lf0stream = @win_lf0+1; %thr = ('mcep' => "000", 'logF0' => "000", 'dur' => "000"); %gam = ('mcep' => "000", 'logF0' => "000", 'dur' => "000"); %set = ('mcep' => "cmp", 'logF0' => "cmp", 'dur' => "dur"); %STREAM = ('mcep' => "1", 'logF0' => "2-$lf0stream", 'dur' => "1"); %FREQWARP = ('8000' => "0.31", '10000' => "0.35", '16000' => "0.42"); # HTS Commands & Options ======================== $HCompV = "$htsbindir/HCompV -A -C $traincfg -D -T 1"; $HInit = "$htsbindir/HInit -A -C $traincfg -D -T 1 -m 1 -v $minvar"; $HRest = "$htsbindir/HRest -A -C $traincfg -D -T 1 -m 1 -v $minvar -u tmvw"; $HERest = "$htsbindir/HERest -A -B -C $traincfg -D -T 1 -m 1 -u tmvw -t $beam -w 3"; $HHEd'train' = "$htsbindir/HHEd -A -B -C $traincfg -D -T 1 -s -i"; $HHEd'conv' = "$htsbindir/HHEd -A -B -C $convcfg -D -T 1 -s -i"; $HMGenS = "$htsbindir/HMGenS -A -C $syncfg -D -T 1 -f $frameshift"; foreach $i (@HMMSET) foreach $j (@$ref$i) $mdl$j = "-m -a $lambda$j" if($thr$j eq '000');

Page 134: 7203030018

# ============================================== # ============== Main Program ================== # ================================================ # Make Environment for Experiment ------- if ($MAKEEMV) # make directory for HMM mkdir "$projectdir/hmms/$cnd",0755; mkdir "$projectdir/hmms/$cnd/$speaker",0755; foreach $i (@HMMSET) mkdir "$hmmsdir$i",0755; mkdir "$hmmsdir'cmp'/HInit",0755; mkdir "$hmmsdir'cmp'/HRest",0755; # make directory for stats file mkdir "$projectdir/stats/$cnd",0755; mkdir "$projectdir/stats/$cnd/$speaker",0755; # make directory for tree file mkdir "$projectdir/trees/$cnd",0755; mkdir "$projectdir/trees/$cnd/$speaker",0755; foreach $i (@HMMSET) mkdir "$projectdir/trees/$cnd/$speaker/$i",0755; # make directory for edit file mkdir "$projectdir/edfiles/$cnd",0755; mkdir "$projectdir/edfiles/$cnd/$speaker",0755; foreach $i (@HMMSET) mkdir "$projectdir/edfiles/$cnd/$speaker/$i",0755;

Page 135: 7203030018

# make directory for voice mkdir "$projectdir/voices/$cnd",0755; mkdir "$projectdir/voices/$cnd/$speaker",0755; mkdir "$voicedir",0755; # make directory for generated parameter file mkdir "$projectdir/gen/$cnd",0755; mkdir "$projectdir/gen/scp",0755; mkdir "$projectdir/gen/$cnd/$speaker",0755; mkdir "$gendir",0755; # make config files make_config(); # make proto type; make_proto(); # HCompV -------------------------------- # (compute global variance for variance flooring) if ($COMPVAR) print_time(); shell("$HCompV -f $vfloor'cmp' -S $datscp -M $hmmsdircmp $prtfile"); print_time(); # HInit & HRest ------------------------- # (after training initial HMMs by segmental k-means algorithm, re-estimate them by Baum-Welch algorithm ) if ($INITREST) print_time();

Page 136: 7203030018

open(HMMLIST,$monolst) || die "Cannot open $!"; while (<HMMLIST>) chop; $phone = $_; $scp = $datscp; $mlf = $monomlf; print "=============== $phone ================\n"; if (grep($_ eq $phone, keys %MODELCOPY) > 0) print("use $hrestdir/$MODELCOPY$phone\n\t instead of $hrestdir/$phone.\n"); open(SRCMAC,"$hrestdir/$MODELCOPY$phone") || die "Cannot open $!"; open(TGTMAC,">$hrestdir/$phone") || die "Cannot open $!"; while (<SRCMAC>) s/~h \"$MODELCOPY$phone\"/~h \"$phone\"/; print TGTMAC; close(TGTMAC); close(SRCMAC); else shell("$HInit -I $mlf -M $hinitdir -S $scp -l $phone -o $phone $prtfile"); shell("$HRest -I $mlf -M $hrestdir -S $scp -l $phone $hinitdir/$phone"); close(HMMLIST);

Page 137: 7203030018

# HHEd (Convert Monophone to FullContext) ----- # (copy context-independent HMMs to context-dependent HMMs) if ($COPYM2F) print_time(); open(EDFILE,">$mon2fuled") || die "Cannot open $!"; print EDFILE "FV \"$hmmsdircmp/vFloors\"\n"; # load variance flooring macros print EDFILE "CL \"$fulllst\"\n"; # copy monophone to fullcontext close(EDFILE); shell("$HHEd'train' -d $hrestdir -w $fullmmf'cmp' $mon2fuled $monolst"); shell("gzip -c $fullmmf'cmp' > $fullmmf'cmp'.gz"); print_time(); # HERest (for context-dependent HMMs) ---------------- # (embedded re-estimation for context-dependent HMMs) if ($ERESTFL) print_time(); $i = "1"; $statsopt = ""; while ($i <= $numIters) if ($i == $numIters) $statsopt = "-s $stats'cmp'"; print("\n\nIteration ",$i," of Embedded Re-estimation\n");

Page 138: 7203030018

shell("$HERest -H $fullmmf'cmp' -I $fullmlf -M $hmmsdir'cmp' -S $datscp $statsopt $fulllst"); $i++; print_ls($fullmmf'cmp'); shell("gzip -c $fullmmf'cmp' > $fullmmf'cmp'_embed.gz"); print_time(); # HHEd (tree-based context clustering for spectrum) --------- # (stream-dependent decision-tree based context clustering for spectrum) if ($TBCCEP) print_time(); make_edfile_state('mcep'); shell("$HHEd'train' -H $fullmmf'cmp' $mdl'mcep' -w $clusmmf'cmp' $clushed'mcep' $fulllst"); print_time(); shell("gzip -c $clusmmf'cmp' > $clusmmf'cmp'.mcep.gz"); # HHEd (tree-based context clustering for f0) --------- # (stream-dependent decision-tree based context clustering for f0) if ($TBCF0) print_time(); make_edfile_state('logF0'); shell("$HHEd'train' -H $clusmmf'cmp' $mdl'logF0' -w $clusmmf'cmp' $clushed'logF0' $fulllst");

Page 139: 7203030018

print_time(); shell("gzip -c $clusmmf'cmp' > $clusmmf'cmp'.mcep+logF0.gz"); # HERest (tied-stream context-dependent HMMs) # (embedded re-estimation for tied-stream context-dependent HMMs) # (at last iteration, state duration models are generated) if ($ERESTTI) print_time(); $i = "1"; $statopt = ""; while ($i <= $numIters) if ($i == $numIters) $statopt = "-g $fullmmf'dur'"; print("\n\nIteration ",$i," of Embedded Re-estimation\n"); shell("$HERest -H $clusmmf'cmp' -I $fullmlf -M $hmmsdir'cmp' -S $datscp $statopt $fulllst"); $i++; print_ls($clusmmf'cmp'); print_time(); # HHEd (tree-based context clustering for state duration models) ------------- # (decision-tree based context clustering for duration) if ($TBCDUR)

Page 140: 7203030018

print_time(); make_edfile_state("dur"); convstats(); shell("$HHEd'train' -H $fullmmf'dur' $mdl'dur' -w $clusmmf'dur' $clushed'dur' $fulllst"); print_time(); # HHEd (convert mmf to hts_engine binary format) # (convert HTK macro model file format into hts_engine model binary format) if ($CONVERT) print_time(); foreach $i (@HMMSET) foreach $j (@$ref$i) make_edfile_convert($j); shell("$HHEd'conv' -H $clusmmf$i $cnvhed$j $fulllst"); print_time(); system("mv $treesdir'cmp'/trees.1 $tree'mcep'"); system("mv $treesdir'cmp'/trees.2 $tree'lf0'"); system("mv $treesdir'dur'/trees.1 $tree'dur'"); system("mv $hmmsdir'cmp'/pdf.1 $pdf'mcep'"); system("mv $hmmsdir'cmp'/pdf.2 $pdf'lf0'"); system("mv $hmmsdir'dur'/pdf.1 $pdf'dur'");

Page 141: 7203030018

# HHEd (generate unseen models) # (generate unseen context-dependent HMMs from decision trees) if ($MKUNSEN) print_time(); foreach $i (@HMMSET) make_edfile_mkunseen($i); shell("$HHEd'train' -H $clusmmf$i -w $clalmmf$i $mkuhed$i $fulllst"); print_time(); # HMGenS (generate speech parameter sequences from HMMs) ------------ # (generate speech parameter sequences from context-dependent HMMs ) # (by parameter generation algorithm) if ($PARGEN) print_time(); make_genfile(); shell("$HMGenS $genscp"); print_time(); # SPTK (synthesis waveforms from generated speech parameter sequences) --------- # (synthesis waveforms by using MLSA filter) if ($WAVGEN) print_time(); gen_wave(); print_time(); # sub rutine ============================ sub shell($)

Page 142: 7203030018

my($command) = @_; my($exit,$start,$end,$h,$m,$s); $start = time; $exit = system($command); $end = time; $h = int(($end-$start)/3600); $m = int((($end-$start)-$h*3600)/60); $s = $end-$start-$h*3600-$m*60; print "===========================================\n"; printf("Realtime %d:%2d.%2d\n",$h,$m,$s); print "===========================================\n"; if($exit/256 != 0) die "Error in this command : $command\n" sub print_time print "\n"; print "===========================================\n"; print `date`; print "===========================================\n"; print "\n"; sub print_ls(@) print "\n"; print "===========================================\n"; print `ls -l @_`; print "===========================================\n";

Page 143: 7203030018

print "\n"; # sub routine for generating proto-type model sub make_proto my($i, $j, $k); my($vSize, $nlf0stream, $nstream, $mcepvSize, $nStates); # number of HMM states $nStates = $numstate+2; # Vector size $mcepvSize = @win_mcep*($mceporder+1); $nlf0stream = @win_lf0; $vSize = $mcepvSize+$nlf0stream; # total number of stream $nstream = $nlf0stream+1; $prtfile .= "s$numstate_m1_c$mcepvSize_p$nlf0stream.prt"; # generate proto type open(PROTO,">$prtfile") || die "Cannot open $!"; # output header print PROTO "~o <VecSize> $vSize <USER> "; print PROTO "<MSDINFO> $nstream 0 "; for ($s=1;$s<=$nlf0stream;$s++) print PROTO "1 "; print PROTO "<StreamInfo> $nstream $mcepvSize "; for ($s=1;$s<=$nlf0stream;$s++) print PROTO "1 "; print PROTO "\n";

Page 144: 7203030018

# output HMM print PROTO "<BeginHMM>\n"; print PROTO " <NumStates> $nStates\n"; # output HMM states for ($i=2;$i<$nStates;$i++) print PROTO " <State> $i \n"; # output pdf for spectrum print PROTO " <Stream> 1 \n"; print PROTO " <Mean> $mcepvSize \n "; for ($k=1;$k<=$mcepvSize;$k++) print PROTO "0.0 "; print PROTO "\n " if ($k % 10 == 0); print PROTO "\n <Variance> $mcepvSize \n "; for ($k=1;$k<=$mcepvSize;$k++) print PROTO "1.0 "; print PROTO "\n " if ($k % 10 == 0); print PROTO "\n"; # output pdf for f0 for ($s=2;$s<=$nstream;$s++) print PROTO " <Stream> $s \n"; print PROTO " <NumMixes> 2 \n"; print PROTO " <Mixture> 1 0.5000\n"; print PROTO " <Mean> 1\n"; print PROTO " 0.0\n"; print PROTO " <Variance> 1\n"; print PROTO " 1.0\n"; print PROTO " <Mixture> 2 0.5000\n"; print PROTO " <Mean> 0\n"; print PROTO " <Variance> 0\n";

Page 145: 7203030018

# output state transition parameters print PROTO " <TransP> $nStates\n "; # for initial null state for ($j=1;$j<=$nStates;$j++) print PROTO "1.000e+0 " if ($j==2); print PROTO "0.000e+0 " if ($j!=2); print PROTO "\n "; # for ($i=2;$i<$nStates;$i++) for ($j=1;$j<=$nStates;$j++) print PROTO "6.000e-1 " if ($i==$j); print PROTO "4.000e-1 " if ($i==$j-1); print PROTO "0.000e+0 " if ($i!=$j && $i!=$j-1); print PROTO "\n "; # for final null state for ($j=1;$j<=$nStates;$j++) print PROTO "0.000e+0 "; print PROTO "\n"; print PROTO "<EndHMM>\n"; close(PROTO); # sub routine for generating config files sub make_config # config file for HMM training open(CONF,">$traincfg") || die "Cannot open $!"; print CONF "TREEMERGE = F\n";

Page 146: 7203030018

print CONF "APPLYVFLOOR = T\n"; print CONF "DVFLOORSCALE = $vfloor'dur'\n"; print CONF "NATURALREADORDER = T\n"; print CONF "NATURALWRITEORDER = T\n"; close(CONF); # config file for model conversion open(CONF,">$convcfg") || die "Cannot open $!"; print CONF "NATURALREADORDER = T\n"; print CONF "NATURALWRITEORDER = F\n"; close(CONF); # config file for parameter generation open(CONF,">$syncfg") || die "Cannot open $!"; print CONF "NATURALREADORDER = T\n"; print CONF "NATURALWRITEORDER = T\n"; close(CONF); # sub routine for generating .hed files for decision-tree clustering sub make_edfile_state($) my($kind) = @_; my($state,$stats,@lines,$i); $state = $numstate; $setk = $set$kind; if($kind eq 'dur') $state = 1; open(QSFILE,"$qsfile$kind") || die "Cannot open $!"; @lines = <QSFILE>; close(QSFILE);

Page 147: 7203030018

open(EDFILE,">$clushed$kind") || die "Cannot open $!"; print EDFILE "RO $gam$kind \"$stats$setk\"\n"; print EDFILE "\nTR 4\n\n"; print EDFILE @lines; print EDFILE "\nTR 2\n\n"; for ($i = 2;$i < 2+$state;$i++) print EDFILE "TB $thr$kind $kind_s$i_ *.state[$i].stream[$STREAM$kind]\n"; print EDFILE "\nTR 1\n\n"; print EDFILE "ST \"$trees$kind\"\n"; close(EDFILE); # sub routine for generating .sts file for duration model clustering sub convstats() open(IN, "$stats'cmp'") || die "Cannot open $!"; open(OUT,">$stats'dur'") || die "Cannot open $!"; while(<IN>) @LINE = split(' '); printf OUT ("%4d %14s %4d %4d\n",$LINE[0],$LINE[1],$LINE[2],$LINE[2]); close(IN); close(OUT); # sub routine for generating .hed files for mmf -> hts_engine convertion sub make_edfile_convert($) my($kind) = @_; open(EDFILE,">$cnvhed$kind") || die "Cannot open $!";

Page 148: 7203030018

print EDFILE "\nTR 2\n\n"; print EDFILE "LT \"$trees$kind\"\n"; print EDFILE "CT \"$treesdir$set$kind\"\n"; print EDFILE "CM \"$hmmsdir$set$kind\"\n"; close(EDFILE); # sub routine for generating .hed files for making unseen models sub make_edfile_mkunseen($) my($kind) = @_; open(EDFILE,">$mkuhed$kind") || die "Cannot open $!"; print EDFILE "\nTR 2\n\n"; foreach $i (@$ref$kind) print EDFILE "LT \"$trees$i\"\n"; print EDFILE "\nAU \"$fulllst_all\"\n\n"; close(EDFILE); # sub routine for parameter generation from HMMs sub make_genfile() print "$genscp\n"; open (GENSCP,">$genscp") || die "Cannot open $!"; print GENSCP "TR 1\n"; print GENSCP "LM $fulllst_all $clalmmfcmp $fulllst_all $clalmmfdur\n"; print GENSCP "LW 2 $win_mcep[1] $win_mcep[2] 2 $win_lf0[1] $win_lf0[2]\n"; print GENSCP "SI $mceporder\n"; print GENSCP "SD $gendir\n";

Page 149: 7203030018

print GENSCP "SL $genlabdir\n"; $line = `ls $genlabdir`; @FILE = split('\n',$line); $num = @FILE; printf GENSCP "GE $num "; foreach $file (@FILE) print GENSCP "$file "; print "\n"; close(GENSCP); # sub routine for log f0 -> f0 conversion sub lf02pitch($) my($base) = @_; my($t,$T,$data); # read log f0 file open(IN,"$gendir/$base.lf0"); @STAT=stat(IN); read(IN,$data,$STAT[7]); close(INPUT); # log f0 -> f0 conversion $T = $STAT[7]/4; @frq = unpack("f$T",$data); for ($t=0; $t<$T; $t++) if ($frq[$t] == 0.0) $out[$t] = 0.0; else $out[$t] = $samprate/exp($frq[$t]); $data = pack("f$T",@out);

Page 150: 7203030018

# output data open(OUT,">$gendir/$base.pit"); print OUT $data; close(OUT); # sub routine for speech synthesis from log f0 and Mel-cepstral coefficients sub gen_wave() $line = `ls $gendir/*.mcep`; @FILE = split('\n',$line); $num = @FILE; $warp = $FREQWARP$samprate; $period = $samprate*$frameshift; foreach $file (@FILE) $base = `basename $file .mcep`; chomp($base); if ( -s $file && -s "$gendir/$base.lf0" ) lf02pitch($base); $line = "$sptkbindir/excite -p $period $gendir/$base.pit | " ."$sptkbindir/mlsadf -m $mceporder -p $period -a $warp $file | " ."$sptkbindir/x2x +fs > $gendir/$base.raw "; #."sox -t raw -r $samprate - -t wav -r $samprate $gendir/$base.wav"; print "synthesize waveforms from $base.mcep and $base.lf0\n"; system($line);