You are on page 1of 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
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
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
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.
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
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
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
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
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
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
DAFTAR TABLE

Tabel 2.1 Daftar Fonem Untuk American English........................ 11


Table 4.1 Table Nilai Mean Opinion Score(MOS)....................... 98
BABI
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
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
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:
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.
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.
Halaman Ini Sengaja Dikosongkan
BAB 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
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.
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-
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.
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.
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
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/.
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/.
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


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
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-
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.
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:
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).
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:
m =1127.01048 log e ⎛⎜1 + f ⎞ (2.1)
⎝ 700 ⎟⎠

Dan inverse:

f = 700⎛⎜ e 1127.01048 −1⎞⎟


m
(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:
• 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
1+ ∑ AL ,l {F ( z )}l
D( z ) = exp F ( z ) ≅ l =1 (2.3)
L
1+ ∑ AL , l {− F ( z )}l
l =1

Gambar 2.10. Struktur MLSA Filter


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.
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.
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


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
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.
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)
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.
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 :

(2.10)
dan

(2.11)

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


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.
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.
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
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
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
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.
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


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
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]
L =1
1 normalization so that ∑w
n =0
2
(n)=1
L =1
2 normalization so that ∑w
n =0
(n)=1
–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
untuk mengevaluasi (S/10 × 25) cepstrum order. Kemudian dari
koefisien, magnitude dari log spektrum ˆgi(Ωk) dievaluasi.
Akhirnya nilai mean vi untuk setiap band akan dikalkulasi.
1 17 n
2π k
vi=
14 n

k=4n
gi ( Ω k ), ( Ω k =
N
,n = N
256
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
Halaman Ini Sengaja Dikosongkan
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
ƒ 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
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

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


alsa-source

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.

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

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
# cd /usr/src
# tar xvvf alsa-source alsa-driver.tar

Dari proses ini akan dihasilkan directory modules/alsa-driver


pada /usr/src, kemudian masuk ke directory /usr/src/modules/alsa-driver.

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

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

# dpkg –i alsa-modules-2.6.8-2-386-XXXXX.deb
# modconf
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
Kemudian tambahkan baris dibawah kedalam /etc/modules

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

Kemudian reboot kembali, lalu periksa pada directory /dev


apakah sudah ada file dsp dengan cara.

# ls /dev/dsp
/dev/dsp

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/
• 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
ƒ 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
ƒ 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:
# apt-get install glut glut-devel

Kemudian kita dapat mengeksekusi file binary dalam


FSM dengan:

$ cd FSM/bin
$ ./fsm

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:
$ 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

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

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

2. chasen-2.3.3
$ 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. unidic-1.1.0
$ 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

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:

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

Apabila script RUN dijalankan maka akan menjalankan speech


synthesis dengan perintah:

$ cd DM/SSM
$ perl RUN

Kofigurasi yang harus ditambahkan pada ssm.conf dan


chasenrc adalah
Pada ssm.conf
# path name of 'chasen'
CHASEN: /usr/local/chasen-
2.3.3/bin/chasen
# configuration file for 'chasen'
CHASEN-RC: ./chasenrc
# command of running 'chaone'

Pada chasenrc
(GRAMMAR ../morph/unidic-1.1.0)

3.1.10. Verifikasi pada Speech Recogniton (SRM)

Operasi verifikasi selesai pada speech recognition apabila telah


menjalankan perintah

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

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:

Set Grammar =
GramXML/renraku/renraku.xml

Apabila dalam proses diatas tidak ada error maka proses


verifikasi selesai. Mengcompile kembali modul julian
$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
/ / /
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:

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

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:

$ apt-get install ruby1.8 libtcltk-


ruby1.8

Untuk mencoba apakah kita berhasil melakukan instalasi


Ruby/TK maka jalankan perintah.
$ ruby -r tcltk -e "p 'ok'"

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

3.1.13. Galatea DM setup

Periksa audio volume

$ cd DM
$ ./setup_amixer

File executable dari Galatea DM adalah ‘galatea’ maka untuk


menjalankannya lakukan perintah dibawah ini.

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

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:

$ ./fin

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
terinstall dapat digunakan perintah sebagai berikut:
#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

Pada hasil diatas terlihat bahwa paket tcl/tk sudah


terinstall, selanjutnya tinggal menginstall paket wavesurfer
#apt-get install wavesurfer

Setelah proses instalasi wavesurfer selesai kemudian


jalankan wavesurfer, ketikkan perintak dibawah pada terminal
console:

# wavesurfer
Maka akan muncul tampilan wavesurfer seperti
gambar dibawah:

Gambar 3.2 Tampilan Wavesurfer


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:

# make
# make install

¾ Download HTK

Download "HTK-3.2.1.tar.gz" dari http://htk.eng.cam.ac.uk/


dan ekstrak kedalam direktori /usr/. Dengan perintah
# tar xzvf HTK-3.2.1.tar.gz

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.

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

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:

# patch –p1 < HTS-


1.1.1_for_HTK3.2.1.patch

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:
$ CPU = linux
$ HTKCC = gcc
$ HTKCF = -g -ansi -DOSS_AUDIO
$ HTKLF = -g -L/usr/X11R6/lib
$ HBIN = /usr/local

¾ 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:

# apt-get install festival

¾ 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:

$ SPTKDIR = /usr/local/SPTK/bin
$ FESTIVALDIR = /usr/bin
3. Untuk melakukan proses training pada HTS-demo_CMU-
ARCTIC-AWB lakukan:

# make
¾ 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:

$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

3. Build HTS-demo dengan:

# make

Masuk kedalam direktori “hts_engine” dan lakukan:

# ./configure
# make

¾ 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
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/
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 :

# HSLab <namafile.wav>
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 satu1.wav

HSLab akan menampilkan Graphical User Interface yang


dapat digunakan untuk merekam sinyal dan sekaligus melabelinya, GUI
yang ditampilkan adalah sebagai berikut
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
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
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:
# HSLab wavesurfer

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.
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.
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:

#!/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

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
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:

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

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:

$ make_f0 raw/*.raw

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.
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:
~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

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.
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;
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:

$ swab +s $data | x2x +sf |

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:

$ x2x +sf $data

Setelah data bertipe data.float maka dapat dilakukan proses sintesa


suara untuk mendapatkan Mel-Cepstral. Perintah yang digunakan
adalah sebagai berikut:
$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 "

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

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

$system "echo $size ".($frameshift *


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

6. Membandingkan Header HTK dengan Future Vector

Proses perbandingan dilakukan dengan perintah:

$system "cat $cmpdir/tmp.head


$cmpdir/tmp.cmp > $cmpdir/${base}.cmp";

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
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


• HInit
Hinit menginisialisasi HMM berdasarkan durasi waktu
yang berdasarkan Algoritma Viterbi. Untuk menginisialisasi HMM
dengan Hinit dapat digunakan perintah dibawah ini

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

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
menghasilkan mean dan vektor varian yang sama, maksudya adalah
setiap file mfcc dihitung secara global. Perintah yang digunakan adalah:

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

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
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


Untuk memulai training model lakukan perintah dibawah ini :

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

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
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 :


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

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
direktori baru. Dijalankan dengan perintah sebagai berikut:

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

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:

$ 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

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
cepstrum dari mel-cepstrum dengan menggunakan perintah di bawah ini:

# excite -p $period $gendir/${base}.pit |


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

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
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.
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

$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');

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');
$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
=>sub{exit;}) -> 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.
Gambar 3.7 Tampilan text to Speech Indonesia
Halaman Ini Sengaja Dikosongkan
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
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
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.

$gwave +s nit_jp_ATR503_m001_a01.raw |
xgr

Dengan menggunakan gwave yang memiliki fungsi untuk


membaca inputan dari file suara kemudian di keluarkan secara
berurutan menggunakan perintah xgr.
Gambar 4.1 Sinyal Suara

Pada gambar di atas menunjukkan mulai adanya sinyal suara


berada pada 12480 dan berakhir pada 38400. Setelah suara diberi
label, langkah selanjutnya yaitu mengekstrak pitch dari file suara
tersebut, dengan menggunakan perintah di bawah:

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

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:

$ fdrw -y 0 250 -W 1.5 -H 0.4 <


nit_jp_ATR503_m001_a01.f0 | xgr

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.
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.

$ make

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 \
`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:

$ 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

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.
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
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:
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

4
3.5
3
2.5
MOS

2 MOS
1.5
1
0.5
0
1 2 3 4 5 6
KALIMAT

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.
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
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
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
# 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
#
$|=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
$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
}
$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";
# 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.*`;
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.
#
#
# 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
# --------------------------------------------
#
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
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 #
# 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 #
#
#
# 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
}
}
# 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++) {
$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
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';
$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
# 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";
$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";
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";
$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}.g
en";
$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
$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');
}
}

# ==============================================
# ============== 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;
}
# 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 $hmmsdir{cmp} $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();
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);
}
# 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
\"$hmmsdir{cmp}/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");
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");
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) {
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'}");
}
# 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($) {
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";
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}.pr
t";
# 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";
# 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";
}
}
# 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";
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);
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 $!";
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 $clalmmf{cmp}
$fulllst_all $clalmmf{dur}\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";
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);
# 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);
}
}
}

You might also like