Anda di halaman 1dari 18

LAPORAN TUGAS KHUSUS 2

Aplikasi Speech Recognizer


Pada Speech Shortcut
Dengan Java

Disusun oleh:

1.   Muhammad Fuad DR(03/165203/PA/9277)
2. Wijaya Adhi Surya(03/165672/PA/9459 )

PROGRAM STUDI ILMU KOMPUTER


FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2006
Shortcut Aplikasi Komputer Dengan Ucapan
(Speech Shortcut)

Abstrak

1)
Dalam jurnal ini, kami akan mengeksplorasi penggunaan voice command . Dimana untuk  
membangun voice command tersebut, dibutuhkan speech recognizer. Speech recognizer adalah  
satu sistem dimana sistem tersebut dapat mengenali ucapan (speech) sehingga user dan sistem  
dapat berkomunikasi. Hal yang memotivasi kami untuk mengeksplorasi speech recognizer adalah  
karena penggunaan speech recognizer saat ini belum maksimal, khususnya di Indonesia. Sebagai  
tambahan,  dari  hasil  eksplorasi  tersebut  kami  membuat  sebuah  aplikasi  yang  kami  beri  nama  
Myna, dimana aplikasi tersebut digunakan sebagai alternatif perintah masukkan (input command)  
ke komputer lewat ucapan (dalam hal ini ucapan manusia).

Latar Belakang

Pembuat Myna merasa pemanfaatan Speech Recognition (SR) dirasa kurang maksimal, 

hal ini terlihat dari aplikasi­aplikasi yang diintegrasikan dengan SR tidak begitu banyak, Microsoft 

merupakan   salah   satu   vendor   yang   cukup   rajin   menggunakan   SR,   merekan   telah 

mengintegrasikannya kedalam Microsoft Office dengan sangat baik.

Adanya  rasa  penasaran  pembuat  untuk  mengetahui tentang SR,  merupakan  salah  satu 

alasan kenapa pembuat merasa perlu membuat Myna.

Selain itu pembuat merasa rutinitas pemanggilan beberapa aplikasi yang sama sekaligus 

dengan keyboard atau mouse setiap harinya sebenarnya bisa dipersingkat, salah satu caranya 

dengan pemanggilan lewat perintah suara.

Manfaat

­ User dapat memanggil sebuah aplikasi lewat perintah suara.

­ Diharapkan   user   awam   sekalipun   bisa   menggunakan   komputer   dengan   maksimal 

(biasanya user awam kesulitan dalam mencari dan menjalankan suatu aplikasi dengan 

mouse).

­ Perpaduan dengan microphone wireless membuat pemanggilan aplikasi bisa dilakukan 

dalam jangkauan beberapa meter.

­ Perpaduan dengan input seperti HP, telephone, alat penerima telephone bisa membuat 

pemanggilan   aplikasi   dapat   dilakukan   dalam   jarak   ratusan   kilometer   (belum   pernah 

1
 Mengeksekusi suatu preintah, dalam hal ini perintah komputer, dengan ucapan atau perintah melalui suara.
dicoba).

Dasar Teori

Shortcut  adalah   sebuah   berkas   (file)   yang   memiliki   link   ke   sebuah   aplikasi.   Pengguna 
komputer biasanya lebih suka memanggil/mengeksekusi program dengan shortcut dibandingkan 
dengan   mengeksekusi   program   langsung   dari   direktori   tempat   program   disimpan,   biasanya 
terletak jauh di dalam sistem berkas komputer (misal “c:\program files\openoffice.org\writer.exe”). 
Bagi para pemula, shortcut sangat membantu karena bagi mereka mengeksplorasi sistem berkas 
komputer   adalah   sesuatu   yang   sangat   asing   (terutama   di   sistem   operasi   GNU/Linux)   dan 
membingungkan. Sedang bagi yang sudah mahir meski telah familiar dengan sistem berkas pada 
komputer   tetap   saja   penggunaan   shortcut   lebih   efisien.   Shortcut   ini   dapat   berupa   icon   pada 
desktop, icon pada desktop toolbar, menu pada start menu, ataupun kombinasi pada keyboard.

Gambar 1. Beberapa contoh icon shortcut

Walaupun   shotcut   dapat   membantu   penggunaan   komputer,   tetap   saja   ada   keadaan­
keadaan dimana penggunaan shortcut konvensional (shortcut sesuai dengan definisi di atas) tidak 
efisien.   Untuk   pekerjaan­pekerjaan   yang   menyibukkan   tangan   dan     mata,   seperti   pengetikan, 
pengeditan   video,   pendesainan   dll,   penggunaan   shortcut   konvensional   cukup   mengganggu 
pekerjaan­pekerjaan tersebut. Misalnya saat sedang mengetik sebuah dokumen, ada sebuah file 
spreadsheet yang mesti dibuka, sebagai data pendukung pengetikan dokumen tadi. Saat seperti 
ini   file   biasanya   dibuka   dengan   membuka   program   pada   tempat   aslinya   ataupun   dengan 
menggunakan   shortcut   konvensional.   Hal   ini   tentunya   akan   cukup   mengganggu   pekerjaan 
pengetikkan tadi. Untuk pekerjaan yang tidak diburu waktu, hal seperti ini biasanya bisa ditolerir, 
tetapi untuk pekerjaan yang dikejar  deadline  keadaan tersebut sangatlah tidak menguntungkan. 
Bayangkan   saat   kita   sedang   mengerjakan   sebuah   dokumen   penting   yang   akan   dirapatkan 
setengah   jam   kemudian.   Saat   ide­ide   penulisan   muncul   dengan   lancarnya   di   kepala   kita,   lalu 
seperti situasi diatas file  spreadsheet  dibuka dengan cara konvensional. Bisa­bisa   ide­ide yang 
tadinya muncul seperti air yang mengalir, bisa lenyap tak tersisa. 

Panggil  Pemanggilan 
Mulai Selesai
shorcut aplikasi
Gambar 2. Flowchart penggunaan shortcut

Jika melihat flowchart diatas, perbedaan mendasar antara shortcut konvensional dengan 
speech   shortcut   adanlah   pada   bagian   input   “Panggil   shortcut”,   pada   shortcut   konvensional 
pemanngilan   dilakukan   dengan   cara   mengklik   icon   atau   dengan   kombinasi   keyboard   (misal 
ctrl+alt+o), sedang pada speech shortcut pemanggilan dilakukan dengan ucapan manusia, misal 
“jalankan word”.

Proses Pengenalan Ucapan dengan Neural Network

Gambar 3. Flowchart proses pengenalan ucapan
Kami tidak akan membahas proses pengenalan ucapan terlalu mendetail, sebab ini bukan 
tujuan paper ini dibuat. Ada 4 langkah dasar dalam proses pengenalan. Setiap langkah akan kami 
jelaskan secara singkat disini.
Mula­mula, kita mendigitalkan ucapan yang ingin kita kenali, misalnya dengan microphone. 
Kedua,   kita   menghitung   ciri   yang   menggambarkan   isi   domain­spektrum   dari   ucapan   (bagian 
dengan energi kuat pada frekuensi khusus). Ciri­ciri ini dihitung setiap 10 mili detik, dengan setiap 
10   mili   detik   disebut   frame.   Ketiga,   sebuah   neural   network   (juga   disebut   ANN,   multi­layer 
perceptron atau MLP) digunakan untuk mengklasifikasi sekumpulan ciri tadi menjadi kategori yang 
didasarkan pada fonetis pada setiap frame untuk menentukan kata yang paling mirip dengan yang 
diucapkan.
Selain itu, dimungkinkan juga untuk menganalisa hasil dengan melihat skor keyakinan yang 
kita punya pada kata dengan skor tertinggi. Kata bisa ditolak sebagai diluar perbendaharaan jika 
skor   kepercayaan   jauh   dibawah   ambang   batas   yang   ditentukan   sebelumnya.   Nilai   keyakinan 
selalu di hitung dengan peralatan CSLU (Center for Spoken Language Understanding) selama 
pengenalan   ucapan,   tetapi   sekarang   ini   kita   tidak   menggunakan   peralatan   CSLU   untuk 
pengenalan ucapan secara umum.

Speech Shortcut

Speech   shortcut   adalah   suatu   shortcut   yang   memanfaatkan   ucapan   manusia   (human 
speech) untuk memanggil sebuah aplikasi, bukan dengan mengklik icon atau kombinasi keyboard 
misalnya. Sebelum membahas lebih jauh mengenai speech shortcut, lebih baik kita bahas lebih 
dahulu tentang kelebihan penggunaan suara.
Menurut penelitian, sebagian besar hidup manusia dihabiskan untuk berkomunikasi dengan 
manusia yang lain (yang tentunya dengan suara), dari riset yang dilakukan pada pegawai kantor 
ditemukan bahwa  60%­85%  dari  waktu mereka  bekerja,  dihabiskan  untuk   berkomunikasi  antar 
sesama pegawai. Bicara adalah hal yang lebih natural daripada menulis atau membaca, kita tahu 
cara untuk berbicara lebih dahulu daripada cara untuk menulis atau membaca. Bicara juga lebih 
efisien   dibanding   menulis   atau   mengetik.   Orang   dapat   berbicara   sepuluh   kali   lebih   cepat 
dibandingkan dengan menulis dan lima kali lebih cepat dibandingkan dengan mengetik.
Speech shortcut bisa mengatasi atau paling tidak mengurangi kerugian yang diakibatkan 
oleh masalah pengeksekusian aplikasi dengan shortcut konvensional di atas. Dengan memanggil 
aplikasi melalui ucapan, aktivitas yang sedang kita kerjakan tidak akan terganggu.
Jika menghadapi masalah seperti di atas, dimana kita sedang mengetik sebuah dokumen 
dan harus membuka sebuah aplikasi penting. Kita tinggal membuat speech shortcut untuk aplikasi 
tersebut   dan   tinggal   memanggilnya   dengan   ucapan.   Misal   bila   aplikasi   “OpenOffice.org  
Spreadsheet” yang ingin dibuka, kita tinggal membuat speech shortcut dengan kata kunci “office” 
ataupun “spreadsheet”.

Myna, Aplikasi Speech Shortcut
Pada   paper   ini,   kami   akan   memperkenalkan   aplikasi   yang   dapat   memberi   gambaran 
tentang penggunaan speech shortcut. Kami menyebutnya Myna, diambil dari kosa kata bahasa 
Inggris yang artinya burung Beo. Myna dibangun menggunakan mesin Microsoft Speech To Text & 
Speech Recognizer serta bahasa pemrogramman Java dengan memanfaatkan API javax.speech 
2)
yang menggunakan library   TalkingJava SDK buatan CloudGarden, sedang untuk penyimpanan 
3)
data­data program digunakan database open source  MySQL.
Myna menyediakan 4 (empat) layanan perintah untuk mengolah database grammar speech 
shortcut, yaitu:
1. Add Grammar, digunakan untuk membuat speech shortcut.
2. Update Grammar, digunakan untuk mengubah ucapan pada speech shortcut yang telah 
ada di database.
3. Update   Command,   digunakan   untuk   mengubah   perintah/aplikasi   pada   speech   shortcut 
yang telah ada di database.
4. Delete Gramar, digunakan untuk menghapus speech shortcut yang ada di database.
Berikut ini merupakan tampilan pembuka Myna. Dengan sebuah menubar dan sebuah text 
area, Myna memang terlihat sangat simpel tapi hal tersebut tidaklah mengurangi fitur­fiturnya.

2
 Kumpulan/pengkapsulan prosedur dan fungsi yang saling terkait dalam satu tempat, gunanya untuk mempermudah 
penggunaannya.
3
  Seluruh kode sumber yang membangun aplikasi yang bersangkutan boleh disebar, dilihat dan diubah.
Gambar 4. Tampilan pembuka Myna

Untuk saat  ini,  Myna hanya  mendukung  spelling  bahasa  Inggris,  sedang untuk  spelling 


bahasa Indonesia masih dalam tahap pengembangan. Selama pembuatan dan pengeksekusian 
speech shortcut, Myna harus dijalankan terlebih dahulu. Ucapan–ucapan speech shortcut pada 
Myna haruslah unik atau tidak boleh ada yang sama.

Myna   dapat   berjalan   secara   background,   maksudnya   walaupun   user   sedang   bekerja 
dengan aplikasi selain Myna, Myna tetap dapat digunakan untuk pemanggilan speech shortcut.

Pembuatan dan pengeksekusian speech shortcut ditangani sepenuhnya oleh Myna. Untuk 
membuat     speech     shortcut,   user   tinggal   mengucapkan   “add   grammar”   ,   setelah   itu   secara 
otomatis dialog “add grammar” akan tampil, seperti pada gambar 5. Pada dialog tersebut user 
diharuskan memasukkan command (aplikasi yang ingin dijalankan/dieksekusi),   kemudian   kata 
unik  yang  ingin  diucapkan  serta kata alternatif 

Gambar 5. Dialog Myna untuk membuat speech shortcut

(optional) misalnya please, run atau yang lainnya. Jika sudah user tinggal mengucapkan “ok” atau 
menekan tombol ok, setelah itu speech shortcut sudah bisa digunakan. Selama dialog pada Myna 
muncul (misal dialog “add grammar”) maka speech shortcut tidak akan dapat dieksekusi.

Untuk   menanganni   perubahan   pada   pemakaian   speech   shortcut,   Myna   menyediakan 


fasilitas   update.   Fasilitas   update   ini   terdiri   atas   dua   jenis   yaitu:   update   grammar   untuk   meng­
update   kata   speech   shortcut   (kata   unik)   dan   update   command   untuk   meng­update   command 
(aplikasi yang ingin dijalankan).
Gambar 6. Dialog Myna untuk meng­update kata pada speech shortcut

Gambar 7. Dialog Myna untuk meng­update command pada speech shortcut

untuk   pemanggilannya,   user   tinggal   mengucapkan   “update   grammar”   atau   ”update   grammar 
please” secara otomatis Myna akan menampilkan dialog seperti yang terlihat di gambar 6, sedang 
untuk membuka dialog yang terlihat di gambar 7, cukup dengan mengucapkan “update command” 
atau ”update comamnd  please”, penggunannya hampir sama dengan dialog ”add grammar” tadi. 
Untuk mengupadate kata, user diharuskan memasukkan command yang ingin diganti katanya, lalu 
memasukkan kata dan kata alternatif pengganti, setelah selesai tinggal mengucapkan “update” 
atau menekan tombol update. Untuk meng­update command, user diharuskan memasukkan kata 
yang   akan   diganti   command/programnya,   setelah   memasukkan   command   pengganti   lalu 
mengucapkan “update” atau menekan tombol update, setelah itu speech shortcut tadi akan ter­
update.

Penghapusan   speech  shortcut   dapat   dilakukan  dengan   mengucapkan   ”hapus   grammar” 


atau “hapus grammar please” (dengan spelling English). Setelah dialog  seperti

Gambar 8. Dialog Myna untuk menghapus speech shortcut

terlihat pada gambar 8 muncul, user tinggal memasukkan kata kunci yang bisa dipilih, apakah itu 
berupa kata, command/program yang dipanggil, atau kata alternatifnya, setelah diisi user tinggal 
mengucapkan kata “Ok” atau menekan tombol ok.

Semua   dialog   di   atas,   baik   itu   dialog   menambah,   menghapus,   ataupun   meng­update 
grammar, dapat dibatalkan pemanggilannya dengan mengucapkan “cancel” atau “exit”.

Pengaplikasian Myna

Myna dapat digunakan untuk banyak hal karena Myna hanya sebagai shortcut ke aplikasi 
lain. Misal bagi anda yang mempunyai rutinitas pemanggilan aplikasi yang sama setiap harinya 
(misalnya OpenOffice.org writer)   anda bisa mempermudah pemaggilan dengan speech shortcut 
dengan   ucapan   “writer”   lalu   secara   otomatis   OpenOffice.org   writer   akan   dipanggil.   Rutinitas 
lainnya   seperti   membuka  file   explorer  atau  file   browser  dapat   dipersingkat   dengan   speech 
shortcut, sehingga  setiap kali anda ingin  mecari  file lewat  explorer  anda  tinggal  mengucapkan 
“explorer” lalu window explorer pun muncul.

Penggunaan   lainnya   misalnya   anda   sedang   membuat   suatu   artikel,   lalu   anda   ingin 
mendengarkan   musik,   dengan   tangan   tetap   mengetik   di   keyboard   anda   tinggal   mengucapkan 
“music” pada microphone lalu music player kesayangan anda pun akan segera muncul.

Bahkan Myna pun dapat digunakan untuk menutup aplikasi yang sedang berjalan, misal 
anda sudah selesai mengetik di OpenOffice.org writer, anda tinggal mengucapkan “close writer”, 
lalu OpenOffice.org writer pun ditutup tanpa harus mengklik icon close.

Selain itu Myna juga dapat mematikan dan merestart komputer, dengan membuat speech 
shortcut untuk shutdown atau reboot komputer, anda bisa dengan mudah mematikan komputer 
misal dengan ucapan “shutdown” atau “restart”.

Tidak hanya itu saja, dengan sedikit kreatifitas anda, anda dapat membuat file batch atau 
shell script untuk meng­copy seluruh isi disket atau membuat backupnya ke dalam harddisk anda, 
hanya  dengan  mengucapkan  “backup   please”  misalnya.   Jika  anda  pengguna  GNU/Linux   anda 
akan bisa lebih banyak bereksperimen dengan speech shortcut.

Penjelasan program

Myna adalah program java yang dapat menggantikan command prompt /konsole, dimana 

dengan program ini user memasukkan perintah/command dengan suara. Di dalam program myna 

terdapat tiga menu utama yaitu :

1. AddGrammar

2. UpdateGrammar

3. DeleteGrammar

Menu AddGrammar digunakan  untuk memasukkan command­command yang diinginkan 

ke dalam program, beserta kata yang akan diucapkan user serta kata alternatif (bisa diucapkan 

user bisa juga tidak). Misal jika ingin dimasukkan perintah “Notepad.exe” kita bisa memasukkan 

kata “editor” ke dalam program dan dengan alternatif “please” (jika menggunakan alternatif maka 

posisinya pun harus ditentukan apakah di depan kata yang ada atau di belakang kata), sehingga 
ketika kata “editor” atau “editor please” (jika alternatif ada di depan)diucapkan user maka Myna 

akan mengeksekusi perintah “Notepad.exe” tersebut.

UpdateGrammar digunakan untuk mengupadate grammar yang ada. Di dalam menu ini 

terdapat dua sub menu yaitu Update Kata dan Update Command. Update kata digunakan jika 

ingin mengganti kata yang telah ada pada program, sedang update command jika user ingin 

megganti commandline yang telah dimasukkanya tadi.

Delete Grammar digunakan jika user ingin menghapus salah satu kata/command yang 

telah dimasukkan pada program Myna sebelumnya.

Di dalam program  telah dimasukkan beberapa command built in(diinput dengan suara) 

sperti terminate[please](mengehentikan program myna ini), Add[please](menampilkan dialog 

AddGrammar), UpdateKata[please] ( menampilkan dialog UpdateKata),

UpdateCommand[please]( menampilkan dialog UpdateCommand), dan 

HapusGrammar[please](menampilkan dialog DeleteGrammar.

Perancangan Program

Myna dibuat dengan pendekatan Object Oriented dimana program dibuat dengan

membagi­bagi program ke dalam kelas­kelas sesuai dengan fungsinya masing­masing.Kelas­

kelas utama yang digunakan dalam pembuatan program ini adalah RecognizerEngine,Make 

Grammar, dan VoiceAction.

VoiceAction adalah kelas yang berfungsi untuk mengeksekusi command setelah dicocokkan 

dengan suara yang diinputkan oleh user. Baik itu perintah built in maupun perintah yang telah 

dimasukkan user.

MakeGrammar digunakan untuk membuat grammar sesuai dengan kata yang dimasukkan 

user atau mengganti kata yang ada melalui dialog­dialog yang telah dijelaskan tadi.

RecognizerEngine adalah kelas utama dari program ini dimana user berinteraksi dengan 

program melalui kelas ini. Di kelas inipun diiniisialisasi mesin recognizer yang digunakan 

program. Pada lingkungan windows mesin yang digunan adalah Microsoft Speech recognizer.

Cara Kerja Program

Cara kerja program secara garis besar seperti ini:

Pertama­tama   mesin   recognizer   yang   akan   digunakan   diinisialisasi   lebih   dahulu,   pada 
penginisialisasian   ini   mesin   yang   digunakan   ditentukan   memakai   bahasa   apa(Inggris, 

Indonesia, dll). Setelah itu grammar­grammar yang telah dimasukkan sebelumnya diload ke 

dalam program dengan metode LoadGrammar pada kelas MakeGrammar. Lalu grammar yang 

telah   diload   diaktifkan.lalu   Action   yang   diinginkan   ditambahkan   ke   object   mesin   recognizer 

dengan   metode  addResultListener.Ketika   user   memasukkan  suara   melalui   microphone  atau 

yang lainnya, program akan menunggu sampai ada suara yang cocoki dengan grammar yang 

ada. Jika telah ada yang cocok maka program akan mengambil pada database, perintah apa 

yang cocok dengan kata yang diucapkan user tadi. Seteleh perintah diambil lalu dieksekusi.

Diagram UML

Implementasi Program

import javax.speech.*;
import javax.speech.recognition.*;
import java.util.Locale;
import java.io.*;
import java.sql.*;

public class MakeGrammar
{
private Recognizer rec;
private RuleGrammar gram;
private RuleSequence seq;
private RuleAlternatives rulealt;
private RuleAlternatives newrulealt;
private String GrammarName;
private String ruleName="rule";
public MakeGrammar(Recognizer r,String nama){
rec=r;
gram = rec.newRuleGrammar(nama);
rulealt = new RuleAlternatives();
GrammarName=nama;
}
public void addRule(String kata){
seq = new RuleSequence(new RuleToken(kata));
rulealt.append(seq);
gram.setRule(ruleName, rulealt, true);
try{
rec.commitChanges();
}catch(GrammarException g){
g.printStackTrace();
}
}
public void addRule(String kata, String alternatif,int posisi){
RuleCount r1 = new RuleCount(new RuleToken(alternatif), RuleCount.OPTIONAL);
if(posisi==0){
seq=new RuleSequence(r1);
seq.append(new RuleToken(kata));
}
else{
seq = new RuleSequence(new RuleToken(kata));
seq.append(r1);
}
rulealt.append(seq);
gram.setRule(ruleName, rulealt, true);
try{
rec.commitChanges();
}catch(GrammarException g){
g.printStackTrace();
}
}
public void updateRule(String kata){
seq= new RuleSequence( new RuleToken(kata));
newrulealt.append(seq);
gram.setRule(ruleName,newrulealt,true);
try{
rec.commitChanges();
}catch(GrammarException g){
g.printStackTrace();
}
newrulealt.toString();

}
public void updateRule(String kata, String alternatif, int posisi){
RuleCount r1= new RuleCount(new RuleToken(alternatif),RuleCount.OPTIONAL);
if(posisi==0){
seq=new RuleSequence(r1);
seq.append(new RuleToken(kata));
}
else{
seq=new RuleSequence(new RuleToken(kata));
seq.append(r1);
}
newrulealt.append(seq);
gram.setRule(ruleName,newrulealt,true);
try{
rec.commitChanges();
}catch(GrammarException g){
g.printStackTrace();
}
}
public void loadGrammar(String db, String tbl,String u, String p){
Connection conn = null;
try
{
String jdbcDriver= "org.gjt.mm.mysql.Driver";
Class.forName(jdbcDriver);
String url = "jdbc:mysql://localhost:3306/"+db;
conn = DriverManager.getConnection(url, u, p);
}
catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
}

String sqlSelect ="SELECT kata,alternatif,posisi FROM "+tbl;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlSelect);
while(rs.next()){
String kata=rs.getString("kata");
String alt=rs.getString("alternatif");
int posisi=rs.getInt("posisi");
System.out.println(kata);
System.out.println(alt);
System.out.println(""+posisi);
if(alt!=null){
this.addRule(kata,alt,posisi);
}
else{
this.addRule(kata);
}
public void updateGrammar(String db, String tbl,String u, String p){
newrulealt= new RuleAlternatives();
printRule();
Connection conn = null;
try
{
String jdbcDriver= "org.gjt.mm.mysql.Driver";
Class.forName(jdbcDriver);
String url = "jdbc:mysql://localhost:3306/"+db;
conn = DriverManager.getConnection(url, u, p);
}
catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
}
String sqlSelect ="SELECT kata,alternatif,posisi FROM "+tbl;
try{
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlSelect);
while(rs.next()){
String kata=rs.getString("kata");
String alt=rs.getString("alternatif");
int posisi=rs.getInt("posisi");
System.out.println(kata);
System.out.println(alt);
System.out.println(""+posisi);
if(alt!=null){
this.updateRule(kata,alt,posisi);
}
else{
this.updateRule(kata);
}
}
}
}

import java.io.*;
import java.sql.*;
public class VoiceAction
{
private Runtime command;
private Connection conn = null;
private String tabel;

public VoiceAction(String u,String p, String db, String tbl){
try
{
String jdbcDriver= "org.gjt.mm.mysql.Driver";
Class.forName(jdbcDriver);
String url = "jdbc:mysql://localhost:3306/"+db;
String user = u;
String pwd = p;
tabel=tbl;
conn = DriverManager.getConnection(url, user, pwd);
}
catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
}
public void addCommand(String kata, String Command)throws VoiceCommandException{
try{
String sqlInsert =
"INSERT INTO "+tabel+"(kata, perintah,katalengkap) values("+
"'"+kata+"','"+Command+"','"+kata+"')";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sqlInsert);
}
catch(SQLException s){
//s.printStackTrace();
throw new VoiceCommandException();
}
}
public void addCommand(String kata, String alt, int pos,String Command) throws VoiceCommandException{
String kataLengkap=null;
if(pos==0){
kataLengkap=alt+" "+kata;
}
else
kataLengkap=kata+" "+alt;
try{
String sqlInsert =
"INSERT INTO "+tabel+"(kata, alternatif, posisi,perintah,katalengkap) values("+
"'"+kata+"','"+alt+"',"+pos+",'"+Command+"','"+kataLengkap+"')";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sqlInsert);
System.out.println();
System.out.println("Query OK, " + count + " row affected");
}
catch(SQLException s){
s.printStackTrace();
throw new VoiceCommandException(); 
}
}
public void updateCommand(String Kata, String newCommand) throws UpdateException {
try{
String sql="update "+tabel+" set perintah = '"+newCommand+"' where kata =  
'"+Kata+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new UpdateException();
}
catch(SQLException s){
s.printStackTrace();
}
}
public void updateKata(String Command, String newKata, String newAlt, int newpos) throws  
VoiceCommandException,UpdateException{
String kataLengkap=null;
if(newpos==0){
kataLengkap=newAlt+" "+newKata;
}
else if(newpos==1)
kataLengkap=newKata+" "+newAlt;
try{
String sql="update "+tabel+" set kata = '"+newKata+"',  alternatif ='"+newAlt+"', posisi =  
"+newpos+", katalengkap = '"+kataLengkap+"' where perintah = '"+Command+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new UpdateException();
}
catch(SQLException s){
s.printStackTrace();
throw new VoiceCommandException(); 
}
}

public void updateKata(String Command, String newKata)  throws  
VoiceCommandException,UpdateException{
try{
String sql="update "+tabel+" set kata = '"+newKata+"', alternatif = null, posisi=null,  
katalengkap= '"+newKata+"' where perintah = '"+Command+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new UpdateException();
}
catch(SQLException s){
s.printStackTrace();
throw new VoiceCommandException(); 
}
}
public void deleteKata(String kata) throws DeleteException{
try{
String sql=" delete from "+tabel+" where kata = '"+kata+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new DeleteException();
}
catch(SQLException s){
s.printStackTrace();
}
}
public void deleteCommand(String command) throws DeleteException{
try{
String sql=" delete from "+tabel+" where perintah = '"+command+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new DeleteException();
}
}

public void deleteAlternatif(String alt) throws DeleteException{
try{
String sql=" delete from "+tabel+" where alternatif = '"+alt+"'";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count==0)
throw new DeleteException();
}
}
public void systemCommand(String s){
//memanggil database select
String Com=null;
String sqlSelect=null;
//Kalimat k= new Kalimat(s);
System.out.println("sebelum"+s);
//if(k.contain(" ")){
System.out.println("halo");
sqlSelect ="SELECT perintah FROM tcommand where katalengkap='"+s+"' or kata =  
'"+s+"'";
//}
//else{
System.out.println("halo1");
//sqlSelect ="SELECT perintah FROM tcommand where kata='"+s+"'";
//}
try{
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlSelect);
while(rs.next()){
Com=rs.getString("perintah");
}
}
catch(SQLException sq){
sq.printStackTrace();
}
command= Runtime.getRuntime();
}
import javax.speech.*;
import javax.speech.recognition.*;
import java.io.FileReader;
import java.util.Locale;
import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;

public class RecognizerEngine extends JFrame {

private MakeGrammar mgram;
private Recognizer rec;
private RecognizerResult recsult;
private VoiceAction voa;

//gui component
private JTextArea display;
private JMenuBar menuBar;
private JMenu EditGrammar;
private JMenuItem addGram;
private JMenu updateGram;
private JMenuItem updateKata;
private JMenuItem updateCommand;
private JMenuItem deleteGram;

public RecognizerEngine(){
super();
setGuiComponent();
try{
// Create a recognizer that supports English.
rec = Central.createRecognizer(new EngineModeDesc(Locale.ENGLISH));

// Start up the recognizer
rec.allocate();
this.setVisible(true);
}catch(EngineException ee){
ee.printStackTrace();
}
mgram= new MakeGrammar(rec,"aturan");
mgram.loadGrammar("command_db","tcommand","fuad","anjingarab");
voa= new VoiceAction("fuad","anjingarab","command_db","tcommand");
recsult=new RecognizerResult(this,rec,voa);
mgram.printRule();
mgram.setEnabled(true);
// Add the listener to get results
rec.addResultListener(recsult);
try{
// Commit the grammar 
// meyakinkan bahwa grammar telah diupdate 
rec.commitChanges();

// Request focus and start listening
rec.requestFocus();
rec.resume();

}catch(Exception ge){
ge.printStackTrace();
}
display.setText("Recognizer Engine start Listening\n");
}

private void setGuiComponent(){
menuBar= new JMenuBar();
EditGrammar= new JMenu("Grammar");
EditGrammar.setMnemonic('G');
addGram = new JMenuItem("Add",'A');
updateGram= new JMenu("Update");
updateKata= new JMenuItem("Kata",'K');
updateCommand=new JMenuItem("Command",'C');
updateGram.add(updateKata);
updateGram.add(updateCommand);
deleteGram=new JMenuItem("Delete",'D');
EditGrammar.add(addGram);
EditGrammar.add(updateGram);
EditGrammar.add(deleteGram);
menuBar.add(EditGrammar);
this.setJMenuBar(menuBar);
display= new JTextArea(150,150);
JScrollPane scrollbar;
scrollbar= new JScrollPane(display,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(scrollbar,BorderLayout.CENTER);

InitializeAction();

this.setLocation(10, 10);
this.setSize(200,200);
this.setTitle("MYNA");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

Untuk Download Myna Silahkan ke Website 
http://kleq.web.ugm.ac.id
Jangan lupa kunjungi Weblog
http://fuad.wordpress.com

Anda mungkin juga menyukai