Lap TK2
Lap TK2
Disusun oleh:
1. Muhammad Fuad DR(03/165203/PA/9277)
2. Wijaya Adhi Surya(03/165672/PA/9459 )
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 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.
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.
(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 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.
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.
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 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)
datadata 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 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
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.
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 ter
update.
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
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