Speech Recognition untuk perintah Kodu


Sekedar berbagi ilmu tentang demo aplikasi di Seminar Techno Game Machung yaitu menggunakan speech recognition untuk menjalankan perintah didalam KODU game lab. Jika anda masih tidak tahu apa itu KODU game lab, coba mampir ke kodugamelab.com.
Oke, langsung saja saya paparkan konsepnya. Sebelumnya saya buat terlebih dahulu membuat game di KODU yang mampu menerima perintah dari sebuah tombol keyboard, saya buat untuk bisa menerima 7 jenis perintah lebih. Untuk game kodunya bisa didownload di sini. Tinggal file JPG yang anda download ganti extensi menjadi *.Kodu. Karena file berekstensi Kodu tidak bisa diupload ke media di wordpress. Untuk menggunakan program speech recogntion yang akan saya buat, anda harus menginstall apa yang namanya SAPI 5.1, bisa didownload di http://www.microsoft.com/en-us/download/details.aspx?id=10121


Langsung saja saya kopikan source codenya dan penjelasan tiap codenya.


using System;
using System.Text;
using System.Speech.Recognition;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace SpeechRecognitionApp
{
 public class Program
 {

// Untuk mencari windows yang aktif
 [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
 public static extern IntPtr FindWindow(string lpClassName,
 string lpWindowName);

// Untuk mengaktifkan windows
 [DllImport("USER32.DLL")]
 public static extern bool SetForegroundWindow(IntPtr hWnd);
 static void Main(string[] args)
 {

// Membuat objek SpeechRecognitionEngine untuk pengenalan suara dengan culture en-US
 using (
 SpeechRecognitionEngine recognizer =
 new SpeechRecognitionEngine(
 new System.Globalization.CultureInfo("en-US")))
 {

// Membaut grammar untuk menerima beberapa perintah
 Choices objek = new Choices(new string[] { "apple", "ball", "kodu", "cycle", "nothing","wander"});
 Choices command = new Choices(new string[] { "move","shoot","stop", "give me", "jump", "find", "fool"});

GrammarBuilder commandServices = new GrammarBuilder(command);
 commandServices.Append(objek);
 // Membuat grammar objek dari GrammarBuilder dan load sebagai pengenal
 Grammar servicesGrammar = new Grammar(commandServices);
 recognizer.LoadGrammarAsync(servicesGrammar);

//Menambahkan handler untuk speech recogntion handler
 recognizer.SpeechRecognized +=
 new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

// Configure input untuk pengenalan suara dan juga mengecek apakah hardware sudah siap atau belum
 recognizer.SetInputToDefaultAudioDevice();

// Mulai asynchronous proses pengenalan suara
 recognizer.RecognizeAsync(RecognizeMode.Multiple);

// supaya console windows tetep nyala
 while (true)
 {
 Console.ReadLine();
 }
 }
 }

// Handle the SpeechRecognized event.
 static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
 {
 Console.WriteLine("Recognized text: " + e.Result.Text);
//WindowsForms10.Window.8.app.0.2e75f89 merupakan code Window yang saya dapat dengan menggunakan tools Spy++
 IntPtr calculatorHandle = FindWindow("WindowsForms10.Window.8.app.0.2e75f89", "Kodu Game Lab (1.2.18.0, General)");

// Verifikasi kodu sudah dijalankan atau belum
 if (calculatorHandle == IntPtr.Zero)
 {
 Console.WriteLine("Kodu is not running.");
 return;
 }
 // Membuat windows aplikasi Kodu dalam keadaan aktif dan mengirimkan
 // perintah.
 SetForegroundWindow(calculatorHandle);
 string input=e.Result.Text;
 int adjust = 4; //saya gunakan sebagai perulangan pengiriman perintah karena Kodu tidak bisa menerima perintah jika hanya dikirim 1 kali(berdasarkan hasil ujicoba)
 switch (input)
 {
 case "move cycle": { SendCommand(input, adjust, 'f'); } break;
 case "stop cycle": { SendCommand(input, adjust, 'c'); } break;
 case "shoot nothing": { SendCommand(input, adjust, 'h'); } break;
 case "shoot kodu": { SendCommand(input, adjust, 'i'); } break;
 case "jump cycle": { SendCommand(input, adjust, 'g'); } break;
 case "find ball": { SendCommand(input, adjust, 'j'); } break;
 case "find apple": { SendCommand(input, adjust, 'a'); } break;
 case "fool cycle": { SendCommand(input, adjust, 'b'); } break;
 case "give me ball": { SendCommand(input, adjust, 'e'); } break;
 case "give me apple": { SendCommand(input, adjust, 'd'); } break;
 }
 }
//mengirimkan 1 tombol keyboard ke KODU
private static void SendCommand(string input, int adjustment, char toSend)
 {

 StringBuilder sb = new StringBuilder();
 for (int i = 0; i < adjustment; i++)
 sb.Append(toSend);
 for (int i = 0; i < adjustment; i++)
 SendKeys.SendWait(sb.ToString());
 }
 }
}

Tinggal jalankan game kodu yang saya buat tadi dan program ini, eits jangan lupa pasang mic.
Selamat mencoba…:D

4 thoughts on “Speech Recognition untuk perintah Kodu

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s