Full PDF
Full PDF
MENGGUNAKAN
METODE HIDDEN MARKOV MODEL
Skripsi
Diajukan untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Informatika
Oleh:
Martinus Budi Gunawan
NIM : 055314070
i
VOICE TO TEXT CONVERTION
USING
HIDDEN MARKOV MODEL METHOD
A Thesis
Created by:
Martinus Budi Gunawan
ID : 055314070
ii
MOTTO DAN PERSEMBAHAN
MOTTO
PERSEMBAHAN
vi
ABSTRAKSI
Mobile phone merupakan salah satu hasil kemajuan teknologi yang banyak
digunakan. Feature yang banyak digunakan dalam mobile phone adalah SMS.
feature ini tidak efisien dari sisi waktu. Bagi kelompok orang gaptek, menuliskan
SMS merupakan sesuatu yang sulit untuk dilakukan. Sementara bagi orang yang
SMS. Alat bantu ini bekerja dengan mengubah suara ke teks, sehingga
dimana algoritma Baum Welch akan digunakan untuk pemodelan, dan dalam
viii
ABSTRACT
Mobile phone is one of the modern technologies used by many. One of the best
feature that mobile phone can offer is Short Message Service (SMS). This feature,
however, is not very efficient for those who don't have enough time to learn. As
an example, those who don’t have knowledge about technology, especially about
mobile phone, texting can be a very difficult thing to do. Texting can also be
Based on those facts above, the writer is going to develop a tool for texting. This
tool works by converting voice to text which will help people in texting. This tool
uses Hidden Markov Model method in which Baum Welch algorithm is used for
After doing several tests, Hidden Markov Model method is accurate enough; it is
about 89.058%, with MFCC feature extraction, 3ms for window size, and 17 for
the states.
ix
KATA PENGANTAR
Puji dan syukur kepada Tuhan Yang Maha Kuasa, karna dengan rahmat-Nya
penulis dapat menyelesaikan Laporan Tugas Akhir ini dengan baik. Penulisan
tugas akhir ini ditujukan untuk memenuhi salah satu syarat memperoleh gelar
Penulis juga mengucapkan terima kasih kepada pihak-pihak yang telah membantu
1. Keluarga tercinta terutama papa dan mama, Herlina Cendrawati dan Budia Arto
sebagai kakak yang telah memberikan dukungan, dan Agustinus Budi Riyanto
sebagai adik yang telah turut serta membantu menyusun tugas akhir ini.
2. Yosef Agung Cahyanta, S.T.,M.T., selaku Dekan Fakultas Sains dan Teknologi
Informatika.
akhir yang telah banyak membantu dan memberikan bimbingan kepada penulis.
x
xi
7. Sekretariat Fakultas Sains dan Teknologi yang telah membantu dalam mengurus
administrasi perkuliahan.
8. Teman-teman yang telah banyak membantu, Agung, Albet, Anzo, Arif, Beni,
Bela, Deni, Dendy, Linda, Lita, Maman, Ony, Pungkas, Silvi, Tua, Toa, Tomi,
Veda, Wili, Winarto, Yafet terimakasih atas dukungan moril dan bantuannya.
10. Pihak-pihak yang tidak dapat disebutkan satu persatu, yang telah membantu
penulis.
Penulis menyadari bahwa skripsi ini masih ada kekurangannya, oleh karena itu
saran dan kritik yang membangun sangat diharapkan dan semoga hasil ini dapat
Penulis,
xii
xiii
4.1.1. Pengujian Feature Extraction MFCC, Window Size dan Jumlah State yang
Bervariasi ........................................................................................................ 32
4.1.2. Pengujian Feature Extraction Bervariasi, Window Size 3ms dan State 17 ..... 33
4.2.4. Pembahasan Hasil Pengenalan MFCC, Jumlah State 17 Dan Window 3ms... 36
LAMPIRAN ........................................................................................................... 45
DAFTAR GAMBAR
xvi
DAFTAR TABEL
Tabel 4.4. Confusion matrix dengan jumlah state 17, window size 3ms, dan MFCC
xviii
BAB I
PENDAHULUAN
Saat ini teknologi mengalami kemajuan yang pesat dan berbagai macam
phone (telepon genggam). Saat ini bila diamati mobile phone merupakan
berpergian.
(MMS), 3G, dan 3.5G. SMS dan telepon merupakan fasilitas yang selalu
Telkomsel, pada hari normal trafik SMS mencapai 64 juta SMS per
harinya
1
2
(http://www.telkomsel.com/web/corporate_news/?page=1%27qces&cnid=
pekerjaan mereka menggunakan SMS. Hal itu terjadi karena mereka harus
akan membuat alat bantu guna menuliskan SMS. Alat bantu tersebut akan
(MFCC)?
4
antarmuka.
model.
suaranya.
data saat keadaan suaranya serak maka aplikasi akan bekerja optimal
• Bahan studi bagi peneliti lain dalam membangun aplikasi yang serupa.
• Analisis Kebutuhan
Pada tahap ini peneliti mengambil contoh suara yang akan dijadikan
sebagai model dari suara itu sendiri. Peneliti juga akan mengumpulkan
serta meninjau berbagai bahan atau referensi yang terkait dengan metode
HMM, baik secara teoritis maupun praktis. Hasil dari proses ini adalah
• Desain
suara ke teks. Hasil dari dari proses ini adalah bagian dari laporan ilmiah
• Implementasi (Coding)
komputer sesuai dengan desain yang telah disusun. Hasil dari proses ini
HMM). Hasil dari proses ini adalah sebuah aplikasi konversi suara ke teks
Berikut adalah garis besar dari isi karya ilmiah yang akan disusun:
• Bab III Metodologi dan Desain, memaparkan rancangan dari aplikasi yang
LANDASAN TEORI
Bab ini memaparkan mengenai bagaimana suara diproduksi oleh manusia. Selain
itu juga dijelaskan mengenai proses feature extraction, Markov Model dan Hidden
Suara diproduksi oleh organ vokal, sumber utama suara adalah yaitu paru-
paru dan diafragma. Ketika bersuara, udara dilewatkan glottis yang berada
di antara pita suara dan laring menuju tiga rongga utama sistem vokal yaitu
: pharynx, mulut dan rongga nasal, yang kemudian keluar melalui mulut
dan hidung.
8
9
Bentuk “V” yang terbuka diantara glottis merupakan sumber suara yang
terpenting. Pita suara dapat bekerja dengan berbagai cara saat bersuara.
Fungsi utama pita suara adalah modulasi aliran udara yang dengan sangat
Faktor lain yang mempengaruhi proses produksi suara adalah hidung dan
tinggalnya).
Setelah model dihasilkan, akan ada masukkan suara yang diproses dengan
10
feature extraction yang sama sehingga sistem dapat memutuskan kata yang
sesuai.
Acoustic Word
Model Language Model
Feature
Word Match Sentence Match
Input Speech Analysis Recognized Sentence
encyclopedia_term/0,2542,t=voice+recognition&i=54077,00.asp diakses
• Command Recognition
direpresentasikan.
antar katanya.
Pengenalan jnis ini mampu menangani pindiktean bahasa natural tanpa jeda
parameter suara ke dalam deretan feature vector yang berupa ringkasan dan
• Penerapan normalisasi.
Telah diketahui bahwa alat input yang berbeda akan menentukan perbedaan
yang harus dilalui tertera pada gambar 2.3 yaitu skema dasar dari langkah
kerja feature extraction. Proses dimulai dari masukkan sinyal suara yang
Input speech
PreProcessing Windowing
signal
sinyal yang terputus pada awal dan akhir dari setiap frame. Window
• Ketika 1 ≤ n ≤ (N/2 - 1), keadaan saat frekuensi bernilai positif (0 < f <
F s /2).
• Ketika N/2+1 ≤ n ≤ N-1, keadaan saat frekuensi bernilai negatife (F s /2 < f <
0).
14
atau periodogram. Seperti yang telah diketahui, frekuensi sinyal suara tidak
menggunakan Hz.
1000Hz dan logaritma di atas 1000Hz. Berikut ini adalah hubungan antara
Mel frequency (disebut juga Mel’s) dan frekuensi yang dinyatakan dalam
(2.6)
Fungsi filter adalah triangular dalam bentuk skala linier frekuensi. Fungsi
frekuensi tengah f c , dan frekuensi atas f h . Dalam skala mel, jarak antara f c -
15
f l dan f h -f c adalah sama untuk setiap filter dan sama dengan jarak antara
Hasil dari filter triangular oleh mel bank filter akan disintesis dengan
coefficient).
penting dari data suara adalah dinamisnya. Performa sistem suara dapat
parameter statistik dasar. Delta cepstrum (Furui, di dalam Adi, C.K., 2008)
(2.11)
16
Dimana d t adalah delta coefficients saat t dihitung dari koefisien statis c t-k
ke c t+k .
delta coefficients.
satu dari N status {1, 2, ..., N}. Sistem mungkin mengalami perubahan state
state saat ini dan state-state sebelumnya. Untuk kasus khusus dengan
spesifikasi waktu diskrit, first order, dan Markov chain, didapatkan rumus
transisi state:
setiap state tidak acak. Model tersebut terlalu terbatas untuk diaplikasikan
pada permasalahan yang lebih beragam. Oleh karena itu, konsep Markov
suara).
18
rangkaian akustik data yang telah diobservasi dari sebuah atau banyak kata
(2.14)
Dari rangkaian data akustik yang ada, P r (acoustics) adalah konstan dan
prosedur iterative.
19
sebagai berikut :
(2.16)
(2.18)
menghasilkan
20
(2.19)
(2.21)
(2.22)
akan tersebut akan lebih menyerupai deretan observasi X dari pada Φ yang
telah diperoleh. Hal ini berarti P(X |Φˆ ) > P(X | Φ). Proses estimasi akan di
q1, q2 … q t -1.
1. Inisialisasi
δ1(i) = Π i b i (o1), 1 ≤ i ≥ N
(2.25)
Aґ(1) = 0
(2.26)
2. Rekursif
(2.27)
di mana: 1 ≤ i ≤ N.
2 ≤ t ≤ T.
1 ≤ j ≤ N.
(2.28)
di mana: 1 ≤ i ≤ N.
2 ≤ t ≤ T.
1 ≤ j ≤ N.
23
3. Terminasi
P* = max[δT(i)]
(2.29)
di mana: 1 ≤ i ≤ N.
(2.30)
di mana: 1 ≤ i ≤ N.
4. Lintasan status
qt* = Ar(t+1)(q*t+1)
(2.31)
memiliki model, sistem diuji untuk mengenal masukan suara. Hasil dari
Proses perekaman data suara yang dilakukan adalah merekam setiap kata
yang digunakan sebanyak 60 kali. Setiap kali merekam data suara, peniliti
memotong bagian awal dan akhir dari sinyal suara yang tidak terisi. Hal ini
yaitu :
No. Kata
24
25
1 Ato
2 Banget
3 Baru
4 Bisa
5 Ga
6 Gimana
7 Iya
8 Jadi
9 Kamu
10 Kau
11 Kenapa
12 Koe
13 Lagi
14 Nda
15 Nuwun
16 Paling
17 Piye
18 Saja
19 Sama
20 Sebentar
21 Siapa
22 Sori
23 Thanks
Berdasarkan data suara yang akan digunakan yaitu data suara orang, maka
12, 24 dan 36 buah koefisien cepstral. Jumlah state yang akan digunakan
pada penelitian ini adalah 10, 13, 15 , 17, 18 dan 20. Besaran ini dihasilkan
dari pengambilan nilai yang diambil secara acak antara 10 sampai 20.
Ukuran window 2ms, 3ms, 5ms dan 6ms digunakan dalam penilitan.
Berdasarkan hal yang telah dipaparkan pada bab sebelumnya, agar suatu
sistem dapat mengenali suara, dalam kasus ini sistem dapat menuliskan
kata yang diucapkan maka sistem terlebih dahulu memiliki model suara
dari kata yang telah diberi label. Mekanisme pembuatan model dilakukan
berjalan pada proses pemodelan. Dimulai dari data suara yang telah
berbasis java.
27
Algortima Baum
Welch
Algoritma ini memiliki skema kerja seperti pada gambar 3.2. Feature
Perhitungan
Suara Feature Extraction Maximal Dikenal
Probalititas
akurasi dari hasil pengujian sistem yang dibuat nantinya. Confusion matrix
suara yang ada. Gambar 3.2 merupakan ilustrasi dari confusion matrix.
Diagonal dari tabel 3.2 yang diblok merupakan gambaran dari jumlah data
(3.7)
tersedia pada aplikasi ini adalah “Kirim” dan “rekam suara”. Tombol
tombol yang telah disebutkan terdapat pula dua buah masukkan pengguna
pengujian atau bantuan program. Dua buah tombol yang ada guna
Gambar 3.4 merupakan tampilan yang akan muncul bila pengguna memilih
menu “Rekam Suara”. Pada bagiam ini pengguna memasukkan pesan suara
(memulai merekam suara). Dan bila pengguna telah selesai merekan pesan
dalam bentuk suara, pengguna hanya perlu menekan tombol konversi untuk
pembuat termasuk contact pembuat. Selain itu terdapat sebuah tombol yang
31
Teks Menggunakan Metode Hidden Markov Model” yang telah dibuat pada bab
suara.
akurasinya paling baik. Kondisi tersebut diuji lebih lanjut dengan mengubah tipe
4.1.1. Pengujian Feature Extraction MFCC, Window Size dan Jumlah State
yang Bervariasi
Tahapan ini merupakan tahap pengujian data yang diperoleh dengan feature
extraction tipe MFCC, window size yang dipilih akan diujikan dengan
32
33
setiap state yang juga telah ditentukan sebelumnya. Hasil uji dapat dilihat
90
88
A 86
k 84
u 82
2ms
r 80
a 78 3ms
s 76 5ms
i 74 6ms
72
70
10 13 15 17 18 20
Jumlah State
4.1.2. Pengujian Feature Extraction Bervariasi, Window Size 3ms dan State
17
diperoleh bahwa state 17 dengan window size 3ms merupakan kondisi yang
Delta Acceleration). Hasil uji dapat dilihat pada tabel 4.2 dan gambar grafik
4.2.
87.5
87
A 86.5
k 86
u 85.5
r
85
a
84.5 17
s
i 84
83.5
83
MFCC_D MFCC_D_A
Tipe Feature Extraction
Tetapi pada data yang diuji kali ini ukuran window tidak dapat mencapai
batas tersebut.
35
6ms. Bila ukuran tersebut dicoba untuk ditingkatkan menjadi 7ms, maka
data yang ada akan mengalami korupsi data yang berakibat pada jumlah
terbaik ada pada state 17 sebesar 82,174%. Hal ini dapat dilihat pada tabel
4.3.
Hasil dari turunan tersebut berpengaruh terhadap dimensi dari data yang
3ms
Berdasarkan hasil yang telah dipaparkan pada sub bab 4.1, maka dapat
diputuskan bahwa sistem menggunakan jumlah state 17, window 3ms dan
89,058%. Berikut ini merupakan confusion matrix total yang akan dibahas
lebih lanjut.
Tabel 4.4. Confusion matrix dengan jumlah state 17, window size 3ms dan
MFCC feature extraction.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
1 58 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 11 17 1 0 5 0 0 0 11 7 1 2 1 0 0 0 0 0 4 0 0 0 0
3 1 2 44 0 0 0 0 0 1 12 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
5 1 0 1 0 55 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 56 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0
7 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0
8 0 0 0 0 0 0 0 58 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 57 2 0 0 0 0 0 1 0 0 0 0 0 0 0
10 4 0 0 0 0 0 0 0 0 51 0 5 0 0 0 0 0 0 0 0 0 0 0
11 0 0 0 0 11 0 0 0 0 0 45 0 0 2 0 0 0 0 2 0 0 0 0
12 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0
37
13 0 0 0 0 0 0 0 1 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0
14 0 0 0 0 3 0 0 0 0 0 0 0 0 57 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 2 3 0 0 54 0 0 0 0 0 1 0
17 0 0 1 1 0 0 31 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 57 1 1 0 0
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 59 0 0 0
21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 58 0 0
22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60
Hasil yang diperoleh sebatas tersebut karena terdapat data yang dapat
dikenali dengan sangat baik, baik, kurang baik, dan buruk. Pengelompokan
antara data yang sangat baik : baik : kurang baik : buruk adalah 5 : 15 : 1 :
2.
Data yang dapat dikenal dengan sangat baik adalah data dengan label
data yang dapat dikenal dengan sangat baik, terdapat juga data yang buruk
untuk dikenal yaitu data dengan label nomer 2 (banget) dan 17 (piye).
sampel dapat dikenal dengan benar. Sedangkan pada data dengan label
Rincian pengenalan untuk data berlabel nomer 2 dan 17 dapat dilihat pada
tabel 4.6.
Pada data berlabel 17 (piye) terdapat hasil yang menarik yaitu separuh dari
jumlah data (60) dikenal sebagai data berlabel 7 (iya). Hal ini bisa
saat program pertama kali dijalankan. Tampilan ini memiliki sebuah tab-
pengujian atau bantuan program. Dua buah tombol yang ada guna
yang akan diubah ke teks. Selama tampilan ini masih ada, maka selama itu
pembuat termasuk contact pembuat. Selain itu terdapat sebuah tombol yang
PENUTUP
5.1. Kesimpulan
5.3. Saran
42
43
suara.
Adi, C. Kuntoro, S.J., M.A., M.S. (2008), “Hidden Markov Model Based Animal
Acoustic Censusing: A Learning From Speech Recognition Technology.”
http://searchcrm.techtarget.com/sDefinition/0,,sid11_gci213318,00.html diakses pada
bulan Februari 2009.
http://searchcrm.techtarget.com/sDefinition/0,,sid11_gci213033,00.html diakses pada
bulan Februari 2009.
http://www.informatika.org/~rinaldi/Stmik/2005-
2006/Makalah2006/MakalahStmik2006-10.pdf diakses pada bulan September
2008.
http://www.pcmag.com/encyclopedia_term/0,2542,t=voice+recognition&i=54077,00.
asp diakses pada bulan Ferbruari 2009.
http://www.ias.ac.in/sadhana/Pdf2006Jun/277.pdf diakses pada bulan April 2009.
http://www.developershome.com/sms/howToSendSMSFromPC.asp diakses pada
bulan April 2010.
http://mrdaniels.wordpress.com/2009/02/10/tutorial-bikin-help-chm-di-visual-studio-
2005/ diakses pada bulan Juni 2010.
http://www.dsplab.uni-mb.si/Pdf_files/3e882c47b55afKotnik_ICSLP02.pdf diakses
pada juli 2010.
http://forums.sun.com/thread.jspa?threadID=5388480 diakses pada juli 2010.
44
LAMPIRAN CONFUSION MATRIX
kendaliMatlab.java
package matlabControl;
import GUI.frameSMScreator;
import java.util.Arrays;
import jmatlink.JMatLink;
/**
* @author Martinus
**/
public class kendaliMatlab {
public kendaliMatlab() {
this.engine.engOpen();
this.engine.engEvalString("cd C:/MATLAB6p5/work/Script");
}
this.engine.engEvalString("fwrite(fid1,['\"C:/MATLAB6p5/work/Script/pesan
/pesan" + counter + ".wav\"
\"C:/MATLAB6p5/work/Script/ekstraksiPesan/pesan" + counter +
".mfc\"'])");
this.engine.engEvalString("fclose(fid1)");
System.out.println("mau ekstraksi");
this.engine.engEvalString("dos('HCopy -A -C mfccConfigSys -S
codeData.scp');");
System.out.println("uda ekstraksi");
// engine.engEvalString("dos('erase kalimat.scp')");
this.engine.engEvalString("fid2 = fopen('kalimat.scp', 'w')");
this.engine.engEvalString("fwrite(fid2,['\"C:/MATLAB6p5/work/Script/ekstr
aksiPesan/pesan" + counter + ".mfc\"'])");
this.engine.engEvalString("fclose(fid2)");
this.engine.engEvalString("dos('HVite -A -w wordnet -l . -i
rec0_1.mlf -S kalimat.scp -H hmm0/hmmdefs dict model.list');");
this.engine.engEvalString("dos('HVite -A -w wordnet -l . -o ST -i
rec0.mlf -S kalimat.scp -H hmm0/hmmdefs dict model.list');");
this.engine.engEvalString("getTeks('rec0.mlf')");
teks = Arrays.toString(engine.engGetCharArray("ans"));
return teks;
}
System.out.println("ekstraksi");
FSMSC.pemodelan("Ekstraksi Ciri...!");
// jTextArea3.setText(jTextArea3.getText() + "Feature
Extraction... \n");
this.engine.engEvalString("dos('HCopy -A -C mfccConfig -S
codeAll.scp');");
FSMSC.pemodelan("Pembuatan Proto...!");
if (featureEx.equalsIgnoreCase("MFCC")) {
this.engine.engEvalString("createProto('" + featureEx +
"',12," + jmlState + ");");
} else if (featureEx.equalsIgnoreCase("MFCC_D")) {
this.engine.engEvalString("createProto('" + featureEx +
"',24," + jmlState + ");");
} else {
this.engine.engEvalString("createProto('" + featureEx +
"',36," + jmlState + ");");
}
System.out.println("model");
FSMSC.pemodelan("Pembuatan Model dan Pengenalan...!");
// jTextArea3.setText(jTextArea3.getText() + "Pemodelan dan
Pengenalan Suara... \n");
this.engine.engEvalString("trainDataOnJava();");
// jTextArea3.setText("Selesai... \n");
// engine.engEvalString(jTextArea3.getText() +
"JumlahTotalAkurasi");
FSMSC.pemodelan("Penghitungan Akurasi...!");
this.engine.engEvalString("JumlahTotalAkurasi");
CM = this.engine.engGetScalar("M");
FSMSC.pemodelan("Akurasi : " + CM);
FSMSC.pemodelan("Selesai... \n");
// jTextArea3.setText(jTextArea3.getText() + "Akurasi yang
diperoleh : " + CM + "\n\n");
}
}
frameSound.java
package GUI;
import javax.swing.JButton;
import javax.swing.JTextArea;
import matlabControl.*;
/**
* @author Aisile
**/
public class frameSound extends javax.swing.JFrame {
JButton jbut;
int counter = 0;
String teks;
JTextArea jta;
kendaliMatlab kndlmtlb;
batalBtn.setText("BATAL");
batalBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
batalBtnActionPerformed(evt);
}
});
konversiBtn.setText("Konversi");
konversiBtn.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt) {
konversiBtnActionPerformed(evt);
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Mulai merekam suara !");
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(konversiBtn,
javax.swing.GroupLayout.PREFERRED_SIZE, 179,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(batalBtn,
javax.swing.GroupLayout.PREFERRED_SIZE, 179,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addComponent(jSeparator1,
javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 64, Short.MAX_VALUE)
.addGap(60, 60, 60)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.BASELINE)
.addComponent(batalBtn)
.addComponent(konversiBtn))
.addContainerGap())
);
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-404)/2, (screenSize.height-244)/2,
404, 244);
}// </editor-fold>//GEN-END:initComponents
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-
FIRST:event_formWindowClosed
// TODO add your handling code here:
kndlmtlb.stopRecord();
jbut.setEnabled(true);
}//GEN-LAST:event_formWindowClosed
frameSMScreator
package GUI;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import matlabControl.*;
import sendFunction.*;
import java.lang.System;
/**
* @author Aisile
**/
public class frameSMScreator extends javax.swing.JFrame {
public frameSMScreator() {
initComponents();
}
File fileRpt;
String fullPath = "";
if (dir.isDirectory()) {
System.out.println("masuk jika direktori");
String[] isiDir = dir.list();
for (int i = 0; i < isiDir.length; i++) {
System.out.println("jml isi dir : " + i);
fileRpt = new File(currentDir + File.separatorChar +
isiDir[i] +
File.separatorChar + helpName);
System.out.println("ngeliat : "+fileRpt.toString());
try {
Runtime.getRuntime().exec("cmd.exe /c " + helpDir);
} catch (IOException ex) {
ex.printStackTrace();
}
}
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("SMS via I-NET");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
});
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Net SMS");
jLabel2.setText("Number :");
textAreaRecordPesan.setColumns(20);
textAreaRecordPesan.setEditable(false);
textAreaRecordPesan.setRows(5);
jScrollPane1.setViewportView(textAreaRecordPesan);
sendBtn.setText("KIRIM");
sendBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sendBtnActionPerformed(evt);
}
});
recordBtn.setText("Rekam Suara");
recordBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
recordBtnActionPerformed(evt);
}
});
jLabel3.setText("Note :");
textAreaMessage.setColumns(20);
textAreaMessage.setRows(5);
jScrollPane2.setViewportView(textAreaMessage);
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(jSeparator1,
javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(phoneNumberTxt,
javax.swing.GroupLayout.PREFERRED_SIZE, 160,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel5)
.addComponent(jLabel4)
.addComponent(jLabel3)
.addComponent(recordBtn,
javax.swing.GroupLayout.PREFERRED_SIZE, 222,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane2,
javax.swing.GroupLayout.DEFAULT_SIZE, 374, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sendBtn))
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 441, Short.MAX_VALUE))
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(11, 11, 11)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.BASELINE)
.addComponent(jLabel2)
.addComponent(phoneNumberTxt,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 270,
Short.MAX_VALUE)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel5))
.addComponent(jScrollPane1,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.BASELINE)
.addComponent(sendBtn,
javax.swing.GroupLayout.PREFERRED_SIZE, 53,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(recordBtn,
javax.swing.GroupLayout.PREFERRED_SIZE, 52,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 52,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
textAreaPemodelanTrain.setColumns(20);
textAreaPemodelanTrain.setEditable(false);
textAreaPemodelanTrain.setRows(5);
jScrollPane3.setViewportView(textAreaPemodelanTrain);
buttonTrainTest.setText("Hitung");
buttonTrainTest.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonTrainTestActionPerformed(evt);
}
});
comboJumlaState.setModel(new javax.swing.DefaultComboBoxModel(new
String[] { "10", "13", "15", "17", "18", "20" }));
comboWindow.setModel(new javax.swing.DefaultComboBoxModel(new
String[] { "20000", "30000", "50000", "60000" }));
jLabel20.setText("Feature Extraction :");
comboTipeFeature.setModel(new
javax.swing.DefaultComboBoxModel(new String[] { "MFCC", "MFCC_D",
"MFCC_D_A" }));
jLabel21.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel21.setText("Pengujian");
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addComponent(jLabel18)
.addComponent(comboJumlaState,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel19)
.addComponent(comboWindow,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel20)
.addComponent(comboTipeFeature,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonTrainTest))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27,
Short.MAX_VALUE)
.addComponent(jScrollPane3,
javax.swing.GroupLayout.PREFERRED_SIZE, 545,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addComponent(jLabel21,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
.addComponent(jSeparator3,
javax.swing.GroupLayout.DEFAULT_SIZE, 689, Short.MAX_VALUE)
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel21,
javax.swing.GroupLayout.PREFERRED_SIZE, 54,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jSeparator3,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addComponent(jScrollPane3,
javax.swing.GroupLayout.DEFAULT_SIZE, 373, Short.MAX_VALUE)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel18)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboJumlaState,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel19)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboWindow,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel20)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comboTipeFeature,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(buttonTrainTest)))
.addContainerGap())
);
jTabbedPane1.addTab("Pengujian", jPanel3);
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel6.setText("TENTANG PROGRAM");
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6,
javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6,
javax.swing.GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)
.addContainerGap())
);
jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel7.setText("Konversi Suara ke Teks");
jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel8.setText("Menggunakan");
jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel9.setText("Metode Hidden Markov Model");
jLabel11.setText("Email :");
buttonHelp.setText("Bantuan");
buttonHelp.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonHelpActionPerformed(evt);
}
});
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.LEADING)
.addComponent(jLabel16,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addComponent(jLabel7,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addComponent(jPanel4,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel8,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addComponent(jLabel9,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addComponent(jSeparator2,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addComponent(jLabel10)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel11)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel17))
.addComponent(jLabel12,
javax.swing.GroupLayout.DEFAULT_SIZE, 669, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel15,
javax.swing.GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE))
.addComponent(buttonHelp,
javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel4,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSeparator2,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel10)
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.BASELINE)
.addComponent(jLabel11)
.addComponent(jLabel17))
.addGap(18, 18, 18)
.addComponent(jLabel12)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Align
ment.BASELINE)
.addComponent(jLabel13)
.addComponent(jLabel14)
.addComponent(jLabel15))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel16)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 146,
Short.MAX_VALUE)
.addComponent(buttonHelp)
.addContainerGap())
);
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 694, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 500, Short.MAX_VALUE)
);
pack();
java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
java.awt.Dimension dialogSize = getSize();
setLocation((screenSize.width-
dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
}// </editor-fold>//GEN-END:initComponents
private void sendBtnActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_sendBtnActionPerformed
// TODO add your handling code here:
aSender = new Sender(phoneNumberTxt.getText(),
textAreaMessage.getText());
try {
//send message
aSender.send();
this.status = aSender.status;
aSender = null;
}//GEN-LAST:event_sendBtnActionPerformed
private void
buttonTrainTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
FIRST:event_buttonTrainTestActionPerformed
// TODO add your handling code here:
kndlmtlb.getThisObject(this);
this.buttonTrainTest.setEnabled(false);
kndlmtlb.fungsiTrainTest((String)
comboJumlaState.getSelectedItem(),
(String) comboWindow.getSelectedItem(),
(String) comboTipeFeature.getSelectedItem());
this.buttonTrainTest.setEnabled(true);
}//GEN-LAST:event_buttonTrainTestActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
grammerKata
$kata = <a> <t> <o> | <b> <a> <n> <g> <e> <t> | <b> <a> <r> <u> | <b> <i>
<s> <a> | <g> <a> |
<g> <i> <m> <a> <n> <a> | <i> <y> <a> | <j> <a> <d> <i> |
<k> <a> <m> <u> | <k> <a> <u> |
<k> <e> <n> <a> <p> <a> | <k> <o> <e> | <l> <a> <g> <i> |
<n> <d> <a> | <n> <u> <w> <u> <n> |
<p> <a> <l> <i> <n> <g> | <p> <i> <y> <e> | <s> <a> <j> <a>
| <s> <a> <m> <a> |
<s> <e> <b> <e> <n> <t> <a> <r> | <s> <i> <a> <p> <a> | <s>
<o> <r> <i> |
<t> <h> <a> <n> <k> <s> ;
( SENT-START ( $kata ) SENT-END )
model.list
a
b
d
e
g
h
i
j
k
l
m
n
o
p
r
s
t
u
w
y
sil
dict
SENT-START [] sil
SENT-END [] sil
a a
b b
d d
e e
g g
h h
i i
j j
k k
l l
m m
n n
o o
p p
r r
s s
t t
u u
w w
y y
createCodeAll.m
% File :createMLFBaru.m
% Goal : membuat mlf file dari direktori berbeda-beda
fid1=fopen('codeAll.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
fwrite(fid1, ['"' srcDirectory '\' fileBaru{n} '.wav" ' '"'
targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
end
end
fclose(fid1);
createProto.m
function createProto(feature,numparam,numstates)
fid1=fopen('proto','w');
fwrite(fid1, ['~o <VecSize> ' num2str(numparam) ' <' feature '>']);
fprintf(fid1, '\n');
fwrite(fid1, ['~h "proto"']);
fprintf(fid1, '\n');
fwrite(fid1, '<BeginHMM>');
fprintf(fid1, '\n');
fwrite(fid1, [' <NumStates> ' num2str(numstates)]);
fprintf(fid1, '\n');
M = zeros(numparam,1); % mean
V = ones(numparam,1); % variance
for i=2:numstates-1
fwrite(fid1,[' <State> ' num2str(i)]);
fprintf(fid1, '\n');
fprintf(fid1, '\t');
fwrite(fid1,[ '<Mean> ' num2str(numparam)]);
fprintf(fid1, '\n');
fprintf(fid1, '\t\t');
for j = 1:length(M)
fwrite(fid1, num2str(M(j)));
fprintf(fid1, '\t');
end
fprintf(fid1, '\n');
fprintf(fid1, '\t');
fwrite(fid1,[ '<Variance> ' num2str(numparam)]);
fprintf(fid1, '\n');
fprintf(fid1, '\t\t');
for j = 1:length(V)
fwrite(fid1, num2str(V(j)));
fprintf(fid1, '\t');
end
fprintf(fid1, '\n');
end
% Transition matrix
fwrite(fid1,[' <TransP> ' num2str(numstates)]);
fprintf(fid1, '\n');
TP = transmat(numstates); % calling transmat function
[m,n]=size(TP);
for i=1:m
fprintf(fid1,'\t');
for j=1:n
fwrite(fid1, num2str(TP(i,j)));
fprintf(fid1, '\t');
end
fprintf(fid1,'\n');
end
fwrite(fid1,'<EndHMM>');
fclose(fid1);
createAllTrainTestData_SCP.m
% File :createMLFBaru.m
% Goal : membuat mlf file dari direktori berbeda-beda
fid1=fopen('AllTrainData1.scp','w');
fid2=fopen('AllTestData1.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
if n < 49
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
else
fwrite(fid2, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid2, '\n');
end
end
end
fclose(fid1);
fclose(fid2);
fid1=fopen('AllTrainData2.scp','w');
fid2=fopen('AllTestData2.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
if n < 37
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
elseif n > 48
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
else
fwrite(fid2, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid2, '\n');
end
end
end
fclose(fid1);
fclose(fid2);
fid1=fopen('AllTrainData3.scp','w');
fid2=fopen('AllTestData3.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
if n < 25
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
elseif n > 36
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
else
fwrite(fid2, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid2, '\n');
end
end
end
fclose(fid1);
fclose(fid2);
fid1=fopen('AllTrainData4.scp','w');
fid2=fopen('AllTestData4.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
if n < 13
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
elseif n > 24
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
else
fwrite(fid2, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid2, '\n');
end
end
end
fclose(fid1);
fclose(fid2);
fid1=fopen('AllTrainData5.scp','w');
fid2=fopen('AllTestData5.scp','w');
srcDirectory ='C:\MATLAB6p5\work\Script'; % directory asal
targetDirectory ='C:\MATLAB6p5\work\Script\hasil'; % directory tujuan
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
if n > 12
fwrite(fid1, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid1, '\n');
disp(fileBaru{n});
else
fwrite(fid2, [ '"' targetDirectory '' fileBaru{n} '.mfc"']);
fprintf(fid2, '\n');
end
end
end
fclose(fid1);
fclose(fid2);
createAllKata.m
% File :createMLFBaru.m
% Goal : membuat mlf file dari direktori berbeda-beda
namaNama=[];
for job=1;length(dirNama)
namaNama[i] = dirNama;
end
% (direktori "C:\MATLAB6p5\work\Script")
% 2. mencetak file allManusia.mlf
fid1=fopen('allKata.mlf','w');
fwrite(fid1,'#!MLF!#');
fprintf(fid1, '\n');
for m=1:length(files)
fileBaru=files{m};
for n=1:length(fileBaru)
fwrite(fid1, ['"*/' fileBaru{n} '.lab"']);
fprintf(fid1, '\n');
fwrite(fid1, ['org' num2str(m)]);
fprintf(fid1, '\n');
fprintf(fid1, '.');
fprintf(fid1, '\n');
disp(fileBaru{n});
end
end
fclose(fid1);
transmat.m
function TransP=transmat(numOfStates)
%numOfStates = 20;
TransP=zeros(numOfStates);
TransP(1,2)=1;
for i=2:numOfStates-1
TransP(i,i+1)=0.4;
end
confMatrix.m
function c = confMatrix(recfile)
A = textread(recfile, '%s');
A = A(2:end);
BB = [];
for i = 1:length(A)
if ( A{i}(1) == '"' )
a=1;
else
a=0;
end
BB = [BB a];
end
aa = find(BB);
fname = A(aa);
for i = 1:length(fname)
fname{i} = fname{i}(4:end-5);
end
CC = [];
for i = 1:length(A)
if ( A{i}(1) == '"' )
bb=0;
else
bb=1;
end
CC = [CC bb];
end
cc = find(CC);
fname2 = A(cc);
simpan = '';
fid1 = fopen('bantuan.hl','w')
for i = 1 : length(fname2)
if ( fname2{i}(1) == '.')
fwrite(fid1, [simpan]);
fprintf(fid1, '\n');
simpan = '';
else
if(fname2{i}(1)==fname2{i+1}(1))
else
simpan = cat(2, simpan, fname2 {i} (1));
end
end
end
fclose(fid1);
for i = 1 : 23
for j = 1 : 12
if(strmatch(fname3{z}, fname{z}) == 1)
akurasi(i,i) = akurasi(i,i) + 1;
else
for k = 1 : 23
if(strmatch(fname3{z}, fname{k*12}) == 1)
akurasi(i,k) = akurasi(i,k) + 1;
liat(z) = k;
break;
end
end
end
z = z+1;
end
end
jumlah = 0;
for i = 1 : 23
jumlah = jumlah + akurasi(i,i)
end
c = jumlah/276*100;
getTeks.m
function c = confMatrix(recfile)
A = textread(recfile, '%s');
A = A(3:end);
simpan = '';
for i = 1 : length(A)
if( A{i}(1) == '.' )
c = simpan;
else
if( A{i}(1) == A{i+1}(1) )
else
simpan = cat( 2, simpan, A{i}(1) );
end
end
end
jalanin.m
dos('HCopy -A -C mfccConfig -S codeAll.scp');
createProto('MFCC',12,17);
dos('HParse -A grammerKata wordnet');
dos ('HLED -A -l * -d dict -i katatypephone.mlf kata2phone.led
allKata2.mlf');
dos('set CLASSPATH=');
dos('java CloneHMM ./hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData1.scp -H
hmm1/hmmdefs -M hmm1 model.list');
dos ('HVite -A -w wordnet -l . -i rec1_1.mlf -S AllTestData1.scp -H
hmm1/hmmdefs dict model.list');
dos ('HVite -A -w wordnet -l . -o ST -i rec1.mlf -S AllTestData1.scp -H
hmm1/hmmdefs dict model.list');
dos('set CLASSPATH=');
dos('java CloneHMM ./hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData2.scp -H
hmm2/hmmdefs -M hmm2 model.list');
dos ('HVite -A -w wordnet -l . -i rec1_2.mlf -S AllTestData2.scp -H
hmm2/hmmdefs dict model.list');
dos ('HVite -A -w wordnet -l . -o ST -i rec2.mlf -S AllTestData2.scp -H
hmm2/hmmdefs dict model.list');
dos('set CLASSPATH=');
dos('java CloneHMM ./hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData3.scp -H
hmm3/hmmdefs -M hmm3 model.list');
dos ('HVite -A -w wordnet -l . -i rec1_3.mlf -S AllTestData3.scp -H
hmm3/hmmdefs dict model.list');
dos ('HVite -A -w wordnet -l . -o ST -i rec3.mlf -S AllTestData3.scp -H
hmm3/hmmdefs dict model.list');
dos('set CLASSPATH=');
dos('java CloneHMM ./hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData4.scp -H
hmm4/hmmdefs -M hmm4 model.list');
dos ('HVite -A -w wordnet -l . -i rec1_4.mlf -S AllTestData4.scp -H
hmm4/hmmdefs dict model.list');
dos ('HVite -A -w wordnet -l . -o ST -i rec4.mlf -S AllTestData4.scp -H
hmm4/hmmdefs dict model.list');
dos('set CLASSPATH=');
dos('java CloneHMM ./hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos('HERest -A -t 600.0 -I katatypephone.mlf -S allTrainData5.scp -H
hmm5/hmmdefs -M hmm5 model.list');
dos ('HVite -A -w wordnet -l . -i rec1_5.mlf -S AllTestData5.scp -H
hmm5/hmmdefs dict model.list');
dos ('HVite -A -w wordnet -l . -o ST -i rec5.mlf -S AllTestData5.scp -H
hmm5/hmmdefs dict model.list');
createModel.m
dos('HCopy -A -C mfccConfig -S codeAll.scp');
createProto('MFCC',12,17);
dos('HParse -A grammerKata wordnet');
dos ('HLED -A -l * -d dict -i katatypephone.mlf kata2phone.led
allKata2.mlf');
jumlahTotalAkurasi.m
M1=confMatrix('rec1.mlf');
M2=confMatrix('rec2.mlf');
M3=confMatrix('rec3.mlf');
M4=confMatrix('rec4.mlf');
M5=confMatrix('rec5.mlf');
M=(M1 + M2 + M3 + M4 + M5)/5;