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 KOMPUTERFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADAYOGYAKARTA
2006
Shortcut Aplikasi Komputer Dengan Ucapan(Speech Shortcut)
Abstrak
Dalam jurnal ini, kami akan mengeksplorasi penggunaan voice command1). 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 aplikasiaplikasi 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 keadaankeadaan dimana penggunaan shortcut konvensional (shortcut sesuai dengan definisi di atas) tidak efisien. Untuk pekerjaanpekerjaan yang menyibukkan tangan dan mata, seperti pengetikan, pengeditan video, pendesainan dll, penggunaan shortcut konvensional cukup mengganggu pekerjaanpekerjaan 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 ideide penulisan muncul dengan lancarnya di kepala kita, lalu seperti situasi diatas file spreadsheet dibuka dengan cara konvensional. Bisabisa ideide yang tadinya muncul seperti air yang mengalir, bisa lenyap tak tersisa.
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
MulaiPanggil shorcut
Pemanggilan aplikasi Selesai
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 ucapanKami 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.
Mulamula, kita mendigitalkan ucapan yang ingin kita kenali, misalnya dengan microphone. Kedua, kita menghitung ciri yang menggambarkan isi domainspektrum dari ucapan (bagian dengan energi kuat pada frekuensi khusus). Ciriciri ini dihitung setiap 10 mili detik, dengan setiap 10 mili detik disebut frame. Ketiga, sebuah neural network (juga disebut ANN, multilayer 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 ShortcutPada 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 yang menggunakan library2) TalkingJava SDK buatan CloudGarden, sedang untuk penyimpanan datadata program digunakan database open source3) 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 fiturfiturnya.
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 mengupdate kata speech shortcut (kata unik) dan update command untuk mengupdate command (aplikasi yang ingin dijalankan).
Gambar 6. Dialog Myna untuk mengupdate kata pada speech shortcut
Gambar 7. Dialog Myna untuk mengupdate 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 mengupdate 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 terupdate.
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 mengupdate 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 mengcopy 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 commandcommand 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
membagibagi program ke dalam kelaskelas sesuai dengan fungsinya masingmasing.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 dialogdialog 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:
Pertamatama mesin recognizer yang akan digunakan diinisialisasi lebih dahulu, pada
penginisialisasian ini mesin yang digunakan ditentukan memakai bahasa apa(Inggris,
Indonesia, dll). Setelah itu grammargrammar 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 selectString 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 componentprivate 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 recognizerrec.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 resultsrec.addResultListener(recsult);try{
// Commit the grammar // meyakinkan bahwa grammar telah diupdate rec.commitChanges();
// Request focus and start listeningrec.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.idJangan lupa kunjungi Webloghttp://fuad.wordpress.com
Top Related