Pembuatan Game Tetris Dengan Kendali Pengenalan Perintah Suara Pada Smartphone Android

(1)

PEMBUATAN GAME TETRIS DENGAN KENDALI PENGENALAN PERINTAH SUARA PADA SMARTPHONE ANDROID

SKRIPSI

Oleh :

JOKO NUGROHO 081402060

PROGRAM STUDI TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(2)

PEMBUATAN GAME TETRIS DENGAN KENDALI PENGENALAN PERINTAH SUARA PADA SMARTPHONE ANDROID

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjan Teknologi Informasi

Oleh :

JOKO NUGROHO 081402060

PROGRAM STUDI TEKNOLOGI INFORMASI

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(3)

PERSETUJUAN

Judul : PEMBUATAN GAME TETRIS DENGAN

KENDALI PENGENALAN PERINTAH SUARA PADA SMARTPHONE ANDROID

Kategori : SKRIPSI

Nama : JOKO NUGROHO

Nomor Induk Mahasiswa : 081402060

Program Studi : SARJANA (S1) TEKNOLOGI INFORMASI

Departemen : TEKNOLOGI INFORMASI

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI (FASILKOMTI) UNIVERSITAS SUMATERA UTARA

Diluluskan di Medan, Juni 2014 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

M. Anggia Muchtar, ST. MM.IT Romi Fadillah Rahmat, B.Comp.Sc,M.Sc NIP 19800110 2008 01 1010 NIP 19860303 201012 1 004

Diketahui/Disetujui oleh

Program Studi S1 Teknologi Informasi Ketua,

M. Anggia Muchtar, ST. MM.IT NIP 19800110 2008 01 1010


(4)

PERNYATAAN

PEMBUATAN GAME TETRIS DENGAN KENDALI PENGENALAN PERINTAH SUARA PADA SMARTPHONE ANDROID

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, Juni 2014

Joko Nugroho 081402060


(5)

UCAPAN TERIMA KASIH

Puji dan syukur penulis sampaikan kehadirat Allah SWT yang tgelah memberikan rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan skripsi ini sebagai syarat untuk memperoleh ijazah Sarjana Teknologi Informasi, Program Studi S1 Teknologi Informasi Universitas Sumatera Utara. Ucapan terimakasih penulis sampaikan kepada:

1. Kedua orangtua dan keluarga penulis yang telah memberikan dukungan dan motivasi baik materil dan spiritual, Ayahanda Syarif Budi Santoso dan Ibunda Fauziah yang selalu sabar dalam mendidik dan membesarkan penulis.

2. Bapak Romi Fadillah Rahmat, B.Comp.Sc,M.Sc selaku pembimbing satu dan Bapak M. Anggia Muchtar, ST. MM.IT selaku pembimbing dua sekaligus Ketua Program Studi Teknologi Informasi yang telah banyak meluangkan waktu dan pikirannya, memotivasi dan memberikan kritik dan saran kepada penulis.

3. Ucapan terimakasih juga ditujukan kepada Bapak Drs. Mahyudin Nst, M.IT dan Bapak M. Fadly Syahputra B.Sc,M.Sc.IT selaku penguji dan sekaligus Sekretaris Program Studi Teknologi Informasi yang telah bersedia menjadi dosen pembanding.

4. Dekan dan Pembantu Dekan Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara, semua dosen dan pegawai di Program Studi Teknologi Informasi.

5. Terima kasih kepada staf pegawai administrasi tata usaha Program Studi Teknologi Informasi Ibu Delima Harahap dan Abangda Faisal Hamid.

6. Terima kasih kepada abangda Ery Syahputra dan Riza Afandi serta adinda Mukmin Hariadi yang selalu memberikan dukungan kepada saya.


(6)

7. Terima kasih juga kepada sahabat-sahabat terbaik saya yang terus mendukung tanpa henti, Azharul Wanda Siregar, Kharisma Rinaldi Siregar, Dwiporanda E, Teza Amaluddin, Rizky Yanda, Inis Caisarian Siregar, Karina Wibawanti, Zulfikri Putra, Sanra Cheney, Ridho Fakhrozi dan Harigo Chany serta teman-teman mahasiswa Teknologi Informasi lainnya yang tidak dapat penulis sampaikan satu persatu.

Akhir kata, saya ucapkan terimakasih kepada semua pihak yang terkait dalam penyelesaian skripsi ini yang tidak bisa saya sebut satu persatu. Semoga Allah memberi rahmat dan keberkahan kepada kita semua.


(7)

ABSTRAK

Pada zaman yang serba memanfaatkan teknologi seperti saat sekarang ini, salah satu hiburan yang paling dicari adalah dengan bermain game komputer. Tetris merupakan salah satu game komputer yang paling populer di dunia. Biasanya dalam memainkan game tetris pemain menggunakan joystick, keypad, keyboard atau alat bantu lainnya. Untuk menarik rasa penasaran dari pemain dalam memainkan game tersebut, perlu adanya pilihan cara alternatif lain dalam memainkan sebuah game komputer dengan cara yang berbeda. Hal ini juga untuk memberikan pengalaman dan sensasi yang baru bagi para pemain game tersebut. Oleh karena itu akan dibuat game tetris yang menggunakan teknologi pengenalan suara yang artinya pemain menggunakan suaranya sendiri untuk memainkan game tetris tersebut. Sistem pengenalan suara dalam penelitian ini menggunakan metode algoritma Mel-Frequency Cepstrum Coefficients (MFCC) untuk mengekstraksi fitur sinyal suara dan metode Vector Quantization dan Hidden Markov Model untuk mengklasifikasi pengenalan perintah suara. Game Tetris ini akan dibuat pada sistem operasi Android.

Kata kunci : Game, Tetris, Android, Pengenalan suara, Mel-Frequency Cepstrum Coefficients (MFCC), Vector Quantization dan Hidden Markov Model


(8)

TETRIS GAME DEVELOPMENT WITH VOICE RECOGNITION CONTROL ON ANDROID SMARTPHONE

ABSTRACT

In the era of the all utilize such technology nowadays, one of the most sought after entertainment is to play computer games. Tetris is one of the most popular computer games in the world. Usually in playing Tetris players using a joystick, keypad, keyboard or other assistive devices. To attract the curiosity of the player in playing the game, there needs to be another option alternative way to play a computer game in a different way. It is also to provide a new experience and sensation for the players of the game. Therefore it will be made Tetris game that uses voice recognition technology, which means the player uses his own voice to play the Tetris game. Voice recognition system in this study using Mel-Frequency Cepstrum algorithm Coefficients (MFCC) to extract the sound signal feature and methods of Vector Quantization and Hidden Markov Models to classify and recognize voice command. Tetris game is going to be made on the Android operating system.

Keywords : Game, Tetris, Android, Voice Recognition , Mel-Frequency Cepstrum Coefficients (MFCC), Vector Quantization dan Hidden Markov Model


(9)

DAFTARISI

Halaman

Persetujuan i

Pernyataan ii

Ucapan Terimakasih iii

Abstrak iv

Abstract v

Daftar Isi vi

Daftar Tabel vii

Daftar Gambar vii

Bab 1 Pendahuluan 1

1.1. Latar Belakang 1

1.2. Rumusan Masalah 2

1.3. Batasan Masalah 2

1.4. Tujuan Penelitian 2

1.5. Manfaat Penelitian 3

1.6. Metodologi Penelitian 3

1.7. Sistematika Penulisan 4

Bab 2 Landasan Teori 5

2.1. Tetris 5

2.1.1. Sejarah Tetris 5

2.1.2. Peraturan Permainan Tetris 6

2.2. Android 6

2.2.1. Arsitektur Android 8

2.3. Pengenalan Suara 8

2.4 Speech Recognition 9

2.5 Pemrosesan Sinyal Suara 10

2.6. Ekstraksi Ciri (Feature Extraction) 12

2.7. Hidden Markov Model 14

2.7.1. Rantai Markov 14

2.7.2. Tipe HMM 15

2.7.3. Elemen HMM 16

2.8 Vector Quantization 17

Bab 3 Analisis dan Perancangan Sistem 18

3.1. Analisis Sistem 18

3.2. Analisis Masalah 18

3.3. Analisis Pemrosesan Sinyal Suara 19

3.4. Analisis Pengenalan Suara 20

3.4.1. Akuisisi Data 20

3.4.2 Ekstraksi Fitur sinyal Suara Dengan MFCC 21


(10)

3.5.1 Perancangan Permainan Tetris 25

3.6. Pemodelan Analisis 27

3.6.1. Identifikasi Use Case 27

3.6.1.1 Use Case Memulai Game 28

3.6.1.2 Use Case memulai Pengenalan Suara 29

3.6.1.3 Use Case Mem-pause Permainan 30

3.6.1.4 Use Case Resume Permainan 31

3.6.1.5. Use Case Melihat Skor 32

3.6.1.6. Use Case Melihat About 33

3.6.1.7. Use Case Exit Game 34

3.6.2. Perancangan Class Diagram 35

3.7. Transisi Layar Dan Antarmuka 38

3.7.1. Transisi Layar 38

3.7.2. Perancangan Antarmuka 39

Bab 4 Implementasi dan Pengujian 43

4.1. Implementasi 43

4.1.1. Konfigurasi Perangkat Keras. 43

4.1.2. Konfigurasi Perangkat Lunak 44

4.1.3. File Aset 44

4.1.4. Eksekusi Aplikasi 44

4.2. Pengujian 47

4.2.1. Pengujian Perangkat 48

4.3.2. Pengujian Sistem Pengenalan Suara 48

Bab 5 Kesimpulan dan Saran 51

5.1. Kesimpulan 51

5.2. Saran 52

Daftar Pustaka 53


(11)

ABSTRAK

Pada zaman yang serba memanfaatkan teknologi seperti saat sekarang ini, salah satu hiburan yang paling dicari adalah dengan bermain game komputer. Tetris merupakan salah satu game komputer yang paling populer di dunia. Biasanya dalam memainkan game tetris pemain menggunakan joystick, keypad, keyboard atau alat bantu lainnya. Untuk menarik rasa penasaran dari pemain dalam memainkan game tersebut, perlu adanya pilihan cara alternatif lain dalam memainkan sebuah game komputer dengan cara yang berbeda. Hal ini juga untuk memberikan pengalaman dan sensasi yang baru bagi para pemain game tersebut. Oleh karena itu akan dibuat game tetris yang menggunakan teknologi pengenalan suara yang artinya pemain menggunakan suaranya sendiri untuk memainkan game tetris tersebut. Sistem pengenalan suara dalam penelitian ini menggunakan metode algoritma Mel-Frequency Cepstrum Coefficients (MFCC) untuk mengekstraksi fitur sinyal suara dan metode Vector Quantization dan Hidden Markov Model untuk mengklasifikasi pengenalan perintah suara. Game Tetris ini akan dibuat pada sistem operasi Android.

Kata kunci : Game, Tetris, Android, Pengenalan suara, Mel-Frequency Cepstrum Coefficients (MFCC), Vector Quantization dan Hidden Markov Model


(12)

TETRIS GAME DEVELOPMENT WITH VOICE RECOGNITION CONTROL ON ANDROID SMARTPHONE

ABSTRACT

In the era of the all utilize such technology nowadays, one of the most sought after entertainment is to play computer games. Tetris is one of the most popular computer games in the world. Usually in playing Tetris players using a joystick, keypad, keyboard or other assistive devices. To attract the curiosity of the player in playing the game, there needs to be another option alternative way to play a computer game in a different way. It is also to provide a new experience and sensation for the players of the game. Therefore it will be made Tetris game that uses voice recognition technology, which means the player uses his own voice to play the Tetris game. Voice recognition system in this study using Mel-Frequency Cepstrum algorithm Coefficients (MFCC) to extract the sound signal feature and methods of Vector Quantization and Hidden Markov Models to classify and recognize voice command. Tetris game is going to be made on the Android operating system.

Keywords : Game, Tetris, Android, Voice Recognition , Mel-Frequency Cepstrum Coefficients (MFCC), Vector Quantization dan Hidden Markov Model


(13)

BAB 1

PENDAHULUAN

1.1 Latar Belakang

Pada zaman yang serba memanfaatkan teknologi seperti saat sekarang ini, untuk mendapatkan suatu hiburan atau kesenangan sudah semakin mudah. Salah satu hiburan yang paling dicari adalah dengan bermain game komputer.

Salah satu game komputer yang paling populer di dunia adalah tetris. Tetris adalah permainan satu-orang di mana potongan-potongan acak persegi panjang yang terdiri dari empat blok jatuh ke bawah dalam waktu tertentu di sebuah papan permainan yang awalnya kosong. Pemain diperbolehkan untuk memutar dan memindahkan atau menggeser balok jatuh secara horizontal. Untuk menggeser dan memutar balok tersebut biasanya pemain menggunakan joystick, keypad, keyboard atau alat bantu lainnya.

Biasanya permainan tetris dan kebanyakan game komputer lainnya dimainkan menggunakan jari untuk menekan tombol tertentu. Karena tipe permainan dalam sebuah game semakin beragam dan sebuah game perlu memiliki keunikan sendiri sehingga menarik rasa penasaran dari pemain untuk memainkan game tersebut, untuk itu perlu adanya pilihan cara alternatif lain dalam memainkan sebuah game komputer dengan cara yang berbeda. Hal ini juga untuk memberikan pengalaman dan sensasi yang baru bagi para pemain game tersebut.

Salah satu cara dalam memainkan sebuah game yang masih jarang digunakan yaitu dengan menggunakan kendali perintah suara. Artinya, pemain menggunakan suaranya sebagai kontrol kendali dalam memainkan game tersebut. Penggunaan perintah suara sebagai kendali permainan selain sebagai pilihan alternatif untuk memberikan pengalaman dan sensasi baru juga sebagai sarana agar dapat menjadi media untuk melatih sinkronisasi kinerja organ tubuh manusia yaitu mata, mulut


(14)

Oleh karena itu, pada proyek tugas akhir ini akan dibangun aplikasi game tetris yang menggunakan teknologi pengenalan suara (voice recognition) sebagai kendali permainan, sehingga pemain dapat menggunakan suaranya sebagai kendali perintah dalam memainkan game tersebut.

1.2 Rumusan Masalah

Dalam memainkan permainan tetris, pemain masih melakukan kendali dengan menekan tombol pada joystick, keypad, atau keyboard. Permasalahan yang akan diselesaikan pada proyek tugas akhir ini adalah bagaimana memainkan permainan tetris dengan menggunakan teknologi pengenalan suara (voice recognition).

1.3 Batasan Masalah

Pada tugas akhir ini dilakukan beberapa batasan masalah sebagai berikut : 1. Aplikasi game dibangun pada sistem operasi Android

2. Aplikasi game dibangun menggunakan bahasa pemrograman Java.

3. Aplikasi game menggunakan kata dalam bahasa Indonesia sebagai input perintah kendali permainan.

4. Kata yang digunakan sebagai kendali permainan adalah kata kiri, kanan, dan putar.

5. Dalam memainkan game ini sebaiknya dilakukan di ruangan atau tempat yang tenang dan tidak berisik untuk mengurangi derau (noise) yang dapat mengganggu proses pengenalan suara.

1.4 Tujuan Penelitian

Tujuan dari penulisan tugas akhir ini adalah membuat aplikasi game tetris yang menggunakan suara pemain sebagai kendali permainan yang memanfaatkan teknologi pengenalan suara (voice recognition).


(15)

1.5 Manfaat Penelitian

Manfaat dari proyek tugas akhir ini adalah:

1. Dapat menerapkan ilmu pengetahuan yang didapatkan penulis di masa kuliah.

2. Memberikan kemudahan dalam memainkan game tetris.

3. Memberikan pengalaman baru bagi para pemain dalam memainkan sebuah game.

4. Sebagai salah satu media untuk melatih sinkronisasi kinerja antar organ tubuh manusia yaitu mata, mulut, dan fungsi otak.

1.6 Metodelogi Penelitian

Metode penelitian yang akan digunakan adalah: 1. Studi Literatur

Pada tahap ini dilakukan dengan membaca dan mempelajari buku-buku referensi, jurnal atau sumber-sumber lain yang berkaitan dengan tugas akhir ini, baik berasal dari buku maupun dari internet.

2. Analisis dan Perancangan Desain Sistem

Pada tahap ini akan dilakukan analisis permainan tetris dan teknologi voice recognition serta perancangan aplikasi mengenai skripsi ini, seperti: perancangan kebutuhan aplikasi, dan perancangan antarmuka (interface). 3. Implementasi Sistem

Pada tahap ini akan dilakukan pengkodean dan menerapkan perancangan aplikasi tersebut ke dalam bahasa pemrograman.

4. Pengujian Sistem

Pada tahap ini akan dilakukan pengujian terhadap aplikasi apakah telah memenuhi kriteria atau tidak.

5. Dokumentasi Sistem

Pada tahap ini akan dilakukan penulisan laporan mengenai aplikasi tersebut yang bertujuan untuk menunjukkan hasil penelitian ini.


(16)

1.7 Sistematika Penulisan

Adapun langkah-langkah sistematika penulisan dalam menyelesaikan tugas akhir ini adalah sebagai berikut:

BAB 1 Pendahuluan

Bab ini menjelaskan mengenai latar belakang pemilihan judul skripsi, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, metode penulisan dan sistematika penulisan.

BAB 2 Landasan Teori

Dalam bab ini akan dijelaskan tentang kerangka teori yang menyajikan teori relevan yang dikemukakan dari sumber-sumber teori dan hasil penelitian; serta kerangka berpikir yang membahas tentang hubungan antara permasalahan, data yang terkumpul dan teknik analisis serta penjelasan hasil penelitian.

BAB 3 Ananlisis Dan Perancangan Sistem

Bab ini terdiri dari analisis sistem dan perancangan sistem aplikasi game tetris. Pada bagian analisis sistem dimuat uraian tentang analisis data sistem dan komponen sistem.

BAB 4 Implementasi Dan Pengujian

Bab ini membahas bagaimana mengimplementasikan aplikasi yang telah dirancang ke dalam bahasa pemprograman dan menguji aplikasi yang telah dibangun

BAB 5 Kesimpulan Dan Saran

Bab ini memuat kesimpulan dari keseluruhan uraian bab-bab sebelumnya dan saran-saran yang diharapkan dapat bermanfaat dalam pengembangan selanjutnya.


(17)

BAB 2

LANDASAN TEORI

2.1 Tetris

Tetris adalah sebuah tipe permainan yang dibuat oleh seorang programmer berkebangsaan Rusia yang bernama Alexey Pajitnov pada tahun 1984 dan semenjak saat itu game tetris merupakan salah satu game yang paling populer di dunia sampai saat ini (www.tetris.com).

Tetris merupakan permainan satu orang dimana salah satu dari tujuh balok tetris yang teridiri dari empat sel atau blok yang secara acak jatuh atau turun secara konstan ke papan permainan yang umumnya berbentuk persegi panjang yang awalnya kosong ( Hoogeboom and Kosters, 2004).

2.1.1 Sejarah Tetris

Seperti yang dilansir situs resmi perusahaan pemilik hak paten atas game tetris yaitu Tetris Inc (www.tetris.com), game tetris diciptakan di kota Moscow, Rusia oleh Alexey Pajitnov pada tahun 1984 yang versi pertamanya dibuat di mesin Electronica 62. Pada tahun 1985 game tetris dikembangkan untuk dijalankan pada mesin komputer IBM (IBM PC) dan semenjak saat itu tetris menyebar dan menjadi populer di negara Uni Soviet. Dua tahun berikutnya yaitu di tahun 1987, tetris diluncurkan di Amerika Utara dan Eropa yang merupakan langkah pertama untuk ekspansi ke seluruh dunia di luar Uni Soviet. Di tahun 1989 perusahaan pengembang game Nintendo mendapatkan hak lisensi untuk mengembangkan dan mendidstribusikan game tetris yang dibuat pada platform Game Boy milik Nintendo. Pada saat itu lebih dari 35 juta salinan game tetris terjual.


(18)

2.1.2 Peraturan Permainan Tetris

Dalam permainan tetris, balok-balok tetris berjatuhan ke area permainan dalam waktu konstan. Balok Tetris selalu terdiri dari 4 balok kecil yang membentuk tujuh macam rupa yang unik (berbeda satu sama lain). Pemain dapat mengontrol balok tetris yang jatuh dengan menggerakkan balok ke kiri atau ke kanan. Pemain juga dapat menembah kecepatan jatuhnya balok, dan dapat memutar balok 90o searah jarum jam (mengubah bentuk balok). Tujuan permainan ini adalah untuk mengarahkan balok yang jatuh ke arah susunan tumpukan balok-balok yang telah jatuh sebelumnya. Sehingga balok-balok tersebut dapat tersusun membentuk baris penuh. Setiap baris yang penuh akan dihilangkan dari tumpukan dan tumpukan yang di atasnya akan jatuh sesuai jumlah baris yang hilang. Jika susunan tumpukan balok mencapai garis batas atas, maka permainan berakhir ( Hoogeboom and Kosters, 2004).

Gambar 2.1 Bentuk Balok Tetris

2.2 Android

Android adalah sebuah sistem operasi untuk perangkat mobile berbasis linux yang mencakup sistem operasi, middleware dan aplikasi. Android menyediakan platform yang terbuka bagi para pengembang untuk menciptakan aplikasi mereka. Awalnya, Google Inc. membeli Android Inc. yang merupakan pendatang baru yang membuat piranti lunak untuk ponsel/smartphone. Kemudian untuk mengembangkan Android, dibentuklah Open Handset Alliance, konsorsium dari 34 perusahaan peranti keras, peranti lunak, dan telekomunikasi termasuk Google, Intel, HTC, Motorola, Qualcomm, T-Mobile, dan Nvidia (Safaat, 2010).


(19)

bahasa java dan dikompilasi dengan menggunakan tools yang disediakan SDK Android (Safaat, 2010).

Android SDK adalah tools API (Aplication Programming Interface) yang diperlukan untuk mulai mengembangkan aplikasi pada platform Android menggunakan bahasa pemrograman Java (Safaat, 2010).

Android merupakan suatu software stack untuk mobile device. Di dalamnya terdapat sistem operasi, middleware, dan key application. Aplikasi pada platform ini dikembangkan dalam bahasa pemrograman java. Android sendiri memiliki banyak fitur diantaranya adalah :

1. Merupakan sebuah Application Framework sehingga programmer dapat menggunakan beberapa fungsi yang telah disediakan.

2. Dalvik virtual machine. Tiap aplikasi dalam Android memiliki instance virtual machine yang dapat bekerja secara efisien dalam lingkungan memori yang terbatas.

3. Integrated browser. Web browser berbasis WebKit engine terdapat pada browser default Android ataupun dapat diintegrasikan dengan aplikasi lain. 4. Optimized graphics. Library grafis 2D yang kaya dan 3D berbasis OpenGL ES

1.0 yang mendukung akselerasi hardware.

5. SQLite. Basis data relasional yang ringan namun sangat powerful.

6. Media Support. Mendukung berbagai format audio, video, dan gambar (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).

7. Bluetooth, EDGE, 3G, dan Wifi. Mendukung komunikasi jaringan (tergantung hardware).

8. Kamera, GPS, kompas, dan accelerometer. Mendukung berbagai fitur yang disediakan oleh hardware.

9. Lingkungan pengembangan yang lengkap. Termasuk device emulator, tools, untuk debugging, profiling, memori dan performa, plugin untuk Eclipse Integrated Development Environment (IDE).


(20)

2.2.1 Arsitektur Android

Android akan bekerja dengan serangkaian aplikasi inti termasuk klien email, program SMS, kalender, peta, browser, kontak, dan lain-lain. Semua aplikasi ditulis menggunakan bahasa pemrograman Java.

Gambar 2.2 Arsitektur Android

2.3 Pengenalan Suara

Pengenalan suara adalah sebuah teknik yang memungkinkan komputer dapat mengenali dan atau memanipulasi sinyal suara. Voice recognition atau pengenalan suara sendiri terbagi dua jenis, yaitu speech recognition dan speaker recognition.

Speaker recognition merupakan pengenalan identitas yang diklaim oleh seseorang dari suaranya (ciri khusus dapat berupa intonasi suara, tingkat kedalaman suara, dan sebagainya). Sedangkan speech recognition adalah proses yang dilakukan computer untuk mengenali kata yang diucapkan oleh seseorang tanpa mempedulikan identitas orang terkait dan parameter yang digunakan dengan membandingkan tingkat penekanan suara dengan template database yang telah tersedia (Melissa, 2008).


(21)

2.4 Speech Recognition

Speech recognition (dikenal juga sebagai Automatic Speech Recognition (ASR) atau Computer Speech Recognition) adalah proses untuk mengkonversi sinyal suara ke dalam urutan kata-kata, dengan cara mengimplemantasikan algoritma sebagai program komputer (Anusuya and Katti, 2009).

Proses identifikasi diperlukan agar sistem dapat mengenali input suara sehingga dapat dimanfaatkan. Hasil pengenalan suara dapat digunakan untuk melakukan berbagai tugas seperti mengendalikan mesin, mengakses database, dan menghasilkan tulisan (text) (Permana, 2011).

Untuk dapat melakukan identifikasi sebuah input dalam pengenalan suara dapat dilakukan dengan beberapa teknik pendekatan, yaitu sebagai berikut (Rabiner dan Juang, 1993) :

1. Pendekatan akustik-fonetik (acoustic-fonetic approach) 2. Pendekatan pengenalan pola (pattern recognition approach) 3. Pendekatan kecerdasan buatan (artificial intelligent aproach)

Menurut Zue et al. (2007) proses pengklasifikasian sistem pengenalan suara perlu memperhatikan beberapa parameter, antara lain:

1. Cara dan gaya bicara

Jika sistem hanya dapat mengenali kata tunggal dalam sekali proses maka disebut dengan isolated word recognition, sedangkan jika sistem dapat mengenali beberapa kata (sebuah kalimat) dalam sekali waktu maka disebut dengan continuous speech recognition.

Sistem dengan continuous speech recognition sangat sulit diimplementasikan, untuk itu perlu dibedakan antara cara bicara antara manusia dengan manusia (conversation speech) dan cara bicara manusia dengan mesin (read speech).

2. Karakteristik pembicara

Lebih mudah mengembangkan sistem yang dapat mengenali dialek standar, atau dengan kata lain suara yang dikenali berasal dari pembicara yang sudah dilatih (speaker dependent) dari pada sistem yang dapat mengenali suara yang berasal dari pembicara yang belum dilatih (speaker


(22)

3. Jumlah kosakata

Semakin kecil (sedikit) jumlah kosakata yang diimplementasikan dalam sebuah ASR (Automatic Speech Recognition) maka semakin sedikit kata yang harus dikenali oleh sistem, begitu juga sebaliknya berdasarkan jumlah katanya, sistem dapat dibagi menjadi dua macam yaitu sistem yang dapat mengenali small vocabulary (< 20 kata) dan large vocabulary (> 20000 kata).

4. Media dan Noise

Media dan noise merupakan parameter eksternal yang memengaruhi performa dari sistem pengenalan suara. Media yang digunakan biasanya berupa head mounted microfones. Dengan mikrofon tersebut, distorsi dari sinyal suara dapat dihindari, sehingga diharapkan

kualitas suara yang dihasilkan juga baik. Selain itu kualitas sinyal suara juga dipengaruhi oleh noise. Jika terdapat noise (misalnya bunyi selain sinyal suara) ketika proses perekaman, maka kualitas sinyal yang dihasilkan tidak akan baik. Jika keberadaan noise lebih dari 30 dB maka suara memiliki low noise, sedangkan jika kurang dari 10 dB maka suara dikatakan high noise.

2.5 Pemrosesan Sinyal Suara

Sinyal suara merupakan gelombang yang tercipta dari tekanan udara yang berasal dari paru-paru yang berjalan melewati lintasan suara menuju mulut dan rongga hidung (Al-Akaidi, 2007). Pemrosesan suara itu sendiri merupakan teknik menransformasi sinyal suara menjadi informasi yang berarti sesuai dengan yang diinginkan (Buono et al. 2009).

Secara umum proses transformasi tersebut terdiri atas digitalisasi sinyal analog, ekstraksi ciri dan diakhiri dengan pengenalan pola untuk klasifikasi, seperti yang terlihat pada gambar berikut:


(23)

Gambar 2.3 Transformasi sinyal suara menjadi informasi (Buono et al. 2009)

Pengolahan sinyal analog menjadi sinyal digital dapat dilakukan melalui dua tahap yaitu sampling dan kuantisasi (Jurafsky and Martin, 2000). Sampling adalah suatu proses untuk membagi-bagi suatu sinyal kontinyu (sinyal analog) dalam interval waktu yang telah ditentukan. Sampling ini dilakukan dengan mengubah sinyal analog menjadi sinyal digital dalam fungsi waktu. Pengubahan bentuk sinyal ini

bertujuan untuk mempermudah memproses sinyal masukan yang berupa analog karena sinyal analog memiliki kepekaan terhadap noise yang rendah, sehingga sulit untuk memproses sinyal tersebut.

Nilai dari hasil sampling tersebut dibulatkan ke nilai terdekat (rounding), atau bisa juga dengan pemotongan bagian sisa (truncating) sehingga menghasilkan sinyal suara digital dengan mengekspresikannya menggunakan sejumlah digit tertentu dan proses ini yang dikenal dengan kuantisasi.

Sinyal suara digital kemudian dilakukan proses pembacaan sinyal per frame dengan lebar frame tertentu yang saling tumpang tindih. Proses ini dikenal dengan proses frame blocking. Barisan frame berisi informasi yang lengkap dari sebuah sinyal suara. Informasi yang terdapat dalam frame-frame tersebut direpresentasikan dengan cara pengekstraksian ciri sehingga dihasilkan vektor-vektor yang nantinya digunakan dalam pengenalan pola.


(24)

2.6 Ekstraksi ciri (Feature Extraction)

Ekstraksi ciri merupakan proses untuk menentukan satu nilai atau vektor yang dapat dipergunakan sebagai penciri objek atau individu (Buono et al. 2009). Terdapat beberapa cara untuk merepresentasikan ciri sinyal suara, salah satunya ialah Mel-Frequency Cepstrum Coefficients (MFCC).

MFCC merupakan cara yang paling sering digunakan pada berbagai bidang area pemrosesan suara, karena dianggap cukup baik dalam merepresentasikan ciri sinyal suara (Permana, 2011).

Ekstraksi ciri sinyal suara dengan metode MFCC memiliki tahapan yang terdiri atas (Do 1994) :

1. Frame Blocking. Tahap ini sinyal suara continous speech dibagi ke dalam beberapa frame serta dilakukan overlapping frame agar tidak kehilangan informasi.

2. Windowing. Windowing merupakan salah satu jenis filtering untuk meminimalisasikan distorsi antar frame. Proses ini dilakukan dengan mengalikan antar frame dengan jenis window yang digunakan. Penelitian suara banyak menggunakan window hamming karena kesederhanaan formulanya dan nilai kerja window. Dengan pertimbangan tersebut, maka penggunaan window Hamming cukup beralasan. Persamaan window Hamming adalah :

3. Fast Fourier Transform (FFT). Tahapan selanjutnya ialah mengubah tiap frame dari domain waktu ke dalam domain frekuensi. FFT adalah algoritma yang mengimplementasikan Discrete Fouries Transform (DFT). Hasil DFT ialah bilangan kompleks dengan Persamaan 2 untuk mencari nilai real dan Persamaan 3 untuk mencari nilai imaginer.


(25)

Proses selanjutnya ialah menghitung nilai magnitudo FFT. Magnitudo dari bilangan kompleks c = a + bi adalah |c| = √

4. Mel-Frequency Wrapping. Persepsi sistem pendengaran manusia terhadap frekuensi sinyal suara ternyata tidak hanya bersifat linear. Penerimaan sinyal suara untuk frekuensi rendah (<1000) bersifat linear, sedangkan untuk frekuensi tinggi (>1000) bersifat logaritmik. Skala inilah yang disebut dengan skala mel-frequency yang berupa filter. Pada Persamaan 4 ditunjukkan hubungan skala mel dengan frekuensi dalam Hz:

Proses wrapping terhadap sinyal dalam domain frekuensi dilakukan menggunakan persamaan 5:

5. Cepstrum. Tahap ini merupakan tahap terakhir pada MFCC. Pada tahap ini mel- frequency akan diubah menjadi domain waktu menggunakan Discrete Cosine Transform (DCT) dengan persamaan 6.


(26)

2.7 Hidden Markov Model

Menurut Ilyas et al 2007, sebuah sistem pengenalan suara terdiri atas dua fase yaitu fase pelatihan (training phase) dan fase verifikasi (verification phase). Pada fase pelatihan, suara pembicara akan direkam lalu diproses untuk menghasilkan sebuah bentuk model didalam basis data. Sedangkan pada fase verifikasi, template referensi yang sudah ada akan dibandingkan dengan input suara yang tidak dikenal. Salah satu metode yang digunakan untuk algoritma pelatihan atau pengenalan adalah Hidden Markov Model (HMM) atau Model Markov Tersembunyi.

HMM adalah probabilitas teknik pencocokan pola yang observasinya dianggap sebagai output dari proses stokastik dan didasari rantai markov. HMM terdiri dari dua komponen: rantai markov keadaan terbatas dan output distribusi keadaan yang terbatas (Jayadi, 2011)

2.7.1 Rantai Markov

Algoritma HMM didasari oleh model matematik yang dikenal dengan rantai markov. Rantai markov secara umum ditunjukkan pada Gambar :


(27)

Gambar 2.4 : Rantai Markov (Sumber : Jayadi, 2011)

Beberapa hal yang dapat dijelaskan tentang rantai markov yaitu:

 Transisi keadaan dari suatu keadaan tergantung keadaan sebelumnya. P[qt = j| qt-1 = i, qt-2 = k…..] = P[qt = j| qt-1 = i]

 Transisi keadaan bebas terhadap waktu. aij = P[qt = j| qt-1 = i]

2.7.2 Tipe HMM

HMM dibagi menjadi dua tipe dasar yaitu HMM ergodic dan HMM kiri-kanan (Hidayatno dan Sumardi, 2006).

1. HMM ergodic

Pada HMM model ergodic perpindahan keadaan yang lain semuanya memungkinkan, hal itu ditunjukkan Gambar :


(28)

Gambar 2.5 : HMM ergodic (Sumber : Hidayatno dan Sumardi, 2006) 2. HMM Kiri-Kanan

Pada HMM kiri-kanan perpindahan keadaan hanya dapat berpindah dari kiri ke kanan, perpindahan keadaan tidak dapat mundur ke belakang, hal ini

ditunjukkan pada Gambar:

Gambar 2.6 : HMM Kiri-Kanan

(Sumber : Hidayatno dan Sumardi, 2006)

2.7.3 Elemen HMM

Elemen yang terdapat pada HMM yaitu:

1. N, jumlah keadaan (state) dalam model.

2. M, jumlah simbol observasi yang berbeda tiap keadaan. 3. Distribusi keadaan transisi A = {aij} dengan


(29)

2.8 Vector Quantization

Vector Quantization (VQ) adalah proses pemetaan vektor dari ruang vektor besar kedalam sebuah jumlah terbatas ruang vektor tertentu. Setiap wilayah disebut cluster dan diwakili oleh sebuah pusat (disebut centroid) (Soong et al , 1985).

Sebuah kumpulan dari semua centroid akan membentuk codeword. Dan kumpulan dari semua codeword akan membentuk codebook.

Dengan memanfaatkan kuantisasi vektor dalam metode pengenalan suara, jumlah data secara signifikan akan berkurang, karena jumlah centroid setidaknya sepuluh kali lebih kecil dari jumlah vektor dalam sampel asli. Hal ini akan mengurangi jumlah perhitungan yang diperlukan untuk perbandingan di tahap berikutnya. Meskipun codebook lebih kecil daripada jumlah sampel asli, namun masih akurat mewakili karakteristik suara seseorang. Satu-satunya perbedaan adalah bahwa akan terdapat beberapa distorsi spektral.


(30)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Analisis sistem dibuat untuk mengurai suatu sistem dengan maksud mengidentifikasi dan mengevaluasi permasalahan-permasalahan, hambatan-hambatan yang terjadi dan kebutuhan-kebutuhan yang diperlukan dalam membangun sebuah sistem agar sistem yang akan dibangun dapat selesai sesuai dengan yang diharapkan.

Berikut adalah beberapa analisis yang dilakukan untuk membangun Aplikasi Game Tetris Dengan Kendali Perintah Suara.

3.2 Analisis Masalah

Dalam membangun aplikasi game tetris yang menggunakan kendali perintah suara, masalah yang akan diselesaikan adalah bagaimana mengubah suara pemain (pengguna aplikasi) menjadi sebuah perintah yang akan mengontrol gerak balok didalam permainan game tetris.

Untuk mengubah suara menjadi sebuah perintah yang mampu dikenali oleh sistem diperlukan sebuah teknik atau metode pengenalan suara (speech recognition). Metode pengenalan suara sebagai kendali perintah pada umumnya terdiri dari beberapa tahap yaitu sinyal suara sebagai input, pengolahan sinyal suara, proses pengenalan kata dan hasil pengenalan kata sebagai perintah selanjutnya. Secara umum tahap proses pengenalan suara tersebut dapat dilihat pada gambar 3.1.


(31)

Gambar 3.1 Proses Sistem Pengenalan Suara

3.3 Analisis Pengolahan Sinyal Suara

Sinyal suara merupakan gelombang longitudinal yang merambat melalui media (zat perantara). Batas frekuensi bunyi yang dapat didengar oleh manusia berkisar antara frekuensi 20 Hz sampai dengan 20 KHz, dan frekuensi yang dapat didengar dengan baik dan jelas oleh telinga manusia yaitu di atas 10.000 Hz (Pelton, 1993).

Untuk dapat mengolah sinyal suara yang merupakan sinyal analog, sinyal suara tersebut harus diubah menjadi sinyal digital yang disebut proses digitalisasi. Proses digitalisasi sinyal suara terdiri atas dua tahap, yaitu sampling dan kuantisasi (Jurafsky dan Martin, 2000). Sampling adalah pengambilan nilai-nilai dalam jangka waktu tertentu. Sampling rate yang biasanya digunakan pada pengenalan suara adalah 8000 Hz sampai dengan 16.000 Hz (Jurafsky dan Martin, 2000). Hubungan jumlah vektor yang dihasilkan, sampling rate dan panjang data suara yang didigitalisasi dinyatakan dengan persamaan 3.2.1.

Setelah tahap sampling maka tahap selanjutnya adalah proses kuantisasi. Proses ini menyimpan nilai amplitudo ini ke dalam presentasi nilai 8 bit atau 16 bit (Jurafsky dan Martin, 2000).


(32)

3.4 Analisis Pengenalan Suara

Dalam pemrosesan sistem pengenalan suara ada beberapa tahap yang harus dilakukan yaitu yang pertama adalah tahap akuisisi data, kemudian tahap ekstraksi ciri sinyal suara, dan yang terakhir adalah tahap pengenalan kata dengan membandingkan data uji dengan data yang telah dilatih dan tersimpan dalam database.

3.4.1 Akuisisi Data

Ada dua jenis data yang terdapat dalam sistem pengenalan suara yaitu data latih dan data uji. Data latih adalah berupa sinyal suara yang direkam yang berisi kata-kata yang akan dikenali dan dilatih sebagai data pembanding untuk dibandingkan dengan data uji. Data uji adalah berupa sinyal suara yang diucapkan oleh pengguna untuk dikenali oleh sistem pengenalan suara yang sesuai dengan kata yang telah dilatih. Data latih dan data uji yang digunakan dalam aplikasi ini menggunakan frekuensi sampling 16.000 Khz dan 16 bits/sample dan 1 chanel mono.

Pengambilan data latih dilakukan dengan merekam suara 5 orang yang terdiri dari 4 orang pria dan 1 orang wanita yang akan dilatih dan disimpan dalam database. Kata yang akan direkam adalah kata yang digunakan untuk menggerakkan balok dalam permainan tetris yaitu kata kiri, kanan dan putar. Masing-masing kata akan direkam sebanyak 20 kali oleh tiap orang. Jadi akan terdapat 100 data latih untuk kata kiri, 100 data latih untuk kata kanan dan 100 data untuk kata putar. Sehingga total data latih yang akan direkam adalah 100 x 3 sama dengan 300 data latih.

Data uji akan diperoleh selama permainan tetris berlangsung. Pengguna game tetris akan mengucapkan kata secara real-time secara terus menerus dengan menekan sebuah tombol dan sistem akan mengenali suara yang diucapkan dengan membandingkan data uji dengan data yang telah dilatih sebelumnya. Apabila setelah dilakukan proses pengenalan suara data uji sesuai dengan dengan data yang dilatih maka gerak balok tetris akan bergerak sesuai dengan hasil pengenalan suara.


(33)

3.4.2 Ekstraksi Fitur Sinyal Suara Dengan MFCC

Setiap sinyal suara memiliki sifat karakteristik yang berbeda antara satau kata dengan kata yang lain. Karakteristik ciri sebuah sinyal suara sangat diperlukan untuk dapat mengenali dan membedakan satu kata dengan kata yang lain. Untuk mendapatkan ciri dari suatu sinyal suara kita perlu mengekstrak fitur yang terdapat pada tiap sinyal suara. Ada beberapa metode yang dilakukan untuk dapat mengekstrak fitur sinyal suara dan salah satu metode yang baik adalah metode MFCC (Mel-frequency Cepstral Coefficient).

Metode MFCC (Mel-Frequency Cepstral coefficient) akan mengkonversi sinyal suara ke dalam beberapa vektor data yang berguna dalam pengenalan suara. MFCC sendiri terdapat tujuh tahapan yaitu

a. Pre Emphasize

Pre-emphasis memproses pengiriman sinyal melaui filter yang menekankan terhadap frekuensi tinggi. Proses Pre-emphasis akan meningkatkan sinyal pada frekuensi tinggi.

[ ] [ ] [ ] (3.1)

b. Frame Blocking

Tahap ini untuk memisahkan sampel yang telah diperoleh dari analog to digital conversion (ADC) menjadi beberapa frame dengan panjang sekitar 20-30 ms. Sinyal suara dibagi menjadi beberapa frame sebanyak N sampel. Frame yang bersebelahan dipisahkan sebesar M (M<N) nilai normal yang biasa digunakan adalah M=128 dan N=256.


(34)

c. Windowing

Tahap windowing dilakukan untuk meminimalkan diskontinuitas pada bagian awal dan akhir sinyal dan mengintegrasikan garis-garis frekuensi terdekat. Proses window dilakukan pada setiap bagian sinyal yang telah dibuat pada proses framing.

(3.2)

d. Fast Fourier Transform

Pada tahap ini dilakukan transformasi fast fourier pada masing-masing frame yang telah dilakukan proses windowing. Transformasi fast fourier dilakukan untuk mengubah domain waktu ke domain frekuensi.

(3.3)

e. Mel Frequency Warping

Jangkauan frekuensi dalam spectrum FFT sangat lebar. Sinyal suara juga tidak mengikuti skala linear. Maka filter kemiringan menurut skala Mel akan diaplikasikan. Rangkaian filter segitiga yang digunakan untuk menghitung jumlah berat dari filter komponen spectral sehingga hasil dari proses mendekati skala Mel. Setiap ketinggian filter frequency response adalah bentuk segitiga dan setara pada penggabungan pusat frekuensi dan penurunan secara linear menuju nol pada pusat frekuensi dari dua filter bersebelahan. Setelah itu untuk menghiting Mel dari frekuensi f dalam Hz digunakan persamaan :


(35)

f. Discrete Cosine Transform

Setelah masing-masing frame melalui filter mel dilakukan tahap selanjutnya yaitu mentransformasikan dengan menggunakan Discrete Cosine Transform. Transformasi ini bertujuan untuk merubah domain frekuensi kembali menjadi domain waktu. Hasil dari konversi inilah yang disebut sebagai Mel Frequency Cepstrum Coefficient (MFCC). Kumpulan dari koefisien ini disebut sebagai vector akustik (acoustic vector) yang akan digunakan sebagai nilai yang mewakili sinyal suara.

(3.5)

3.4.3 Klasifikasi Dan Pengenalan Suara

Setelah mendapatkan nilai koefisien ekstraksi ciri dari sinyal suara maka akan dapat dilakukan pengklasifikasian dan pengenalan sinyal suara tersebut. Metode yang digunakan adalah penggabungan metode Vector Quantization (VQ) dan Hidden Markov Model (HMM).

Ekstraksi ciri dengan metode MFCC yang digunakan pada sistem ini akan menghasilkan 12 koefisien MFCC yang berupa bilangan vektor pada tiap frame sinyal suara. Vektor tersebut akan diklasifikasi dan dikuantisasi dengan metode vector quantization.

Dengan metode vector quantization hasil dari ekstraksi sinyal suara akan dikuantisasi membentuk codebook yang terdiri dari kumpulan centroid yang diurutkan sesuai dengan ciri dan karakteristiknya.

Setelah hasil ekstraksi suara tersebut sudah terkuantisasi dan terurut, maka tahap selanjutnya adalah membuat pemodelan Hidden Markov untuk dapat mengenali sinyal suara tersebut.

Didalam proses pengenalan suara terdapat dua tahap proses pengenalan suara yaitu tahap pelatihan serta membuat file database dan tahap verifikasi yaitu pengujian sinyal suara baru yang akan dikenali dengan cara membandingkan dengan data latih yang telah disimpan dalam file database.


(36)

a. Tahap Pelatihan (Training)

Dalam tahap ini akan melatih data sinyal suara yang akan dijadikan sampel dan akan menyimpan file tersebut ke dalam database. Langkah pertama yang dilakukan adalah membuat data latih yaitu dengan cara merekam sinyal suara berdasarkan kata yang akan dikenali. Pada sistem ini kata yang akan dikenali terdiri atas tiga kata yaitu kata kiri, kanan dan putar.

Tujuan dari tahap training ini adalah agar system dapat mengenali informasi karakteristik suara dari tiap kata. Karakteristik ini berupa 12 koefisien yang berasal dari proses feature extraction, diolah sehingga didapatkan suatu nilai yang mewakili karakteristik suara dari masing-masing kata. Hasil dari tahap feature extraction yang berupa 12 koefisien yang merupakan nilai dari MFCC sinyal suara masing-masing kata dan dikuantisasi dengan vector quantization akan dimasukkan sebagai input pemodelan hidden markov model.

Setelah didapatkan model HMM λ = (A,B,π) maka model HMM tersebut akan dievaluasi menggunakan algoritma forward untuk mendapatkan nilai probabilitas Pt (O|λ) yang akan disimpan ke dalam file database sebagai referensi dari suara masing-masing kata.

b. Tahap Verifikasi

Tahap verifikasi adalah tahap untuk menguji sistem pengenalan suara apakah sistem sudah mampu mengenali sebuah kata dari sebuah sinyal suara. Tahap dari proses verifikasi adalah merekam suara sebagi input data uji, pre-proccesing, feature extraction, vector quantization, dan membandingkan data dengan referensi database yang telah disimpan dengan metode hidden markov model.

Dengan metode hidden markov model proses yang dilakukan adalah menghitung nilai probabilitas tertinggi dari data uji yang dibandingkan dengan data referensi kata yang telah dilatih dan disimpan sebagai database.


(37)

3.5 Analisis Permainan Tetris

Tetris adalah permainan satu pemain pemain yang dimainkan di papan permainan yang berbentuk persegi panjang dan berukuran 10 x 20 unit sel kosong. Balok-balok tetris berjatuhan ke area permainan dalam waktu konstan.

Balok Tetris selalu terdiri dari 4 balok kecil yang membentuk tujuh macam rupa yang unik (berbeda satu sama lain).

Pemain dapat mengontrol balok tetris yang jatuh dengan menggerakkan balok ke kiri atau ke kanan. Pemain juga dapat memutar balok 90o searah jarum jam (mengubah bentuk balok).

Tujuan permainan ini adalah untuk mengarahkan balok yang jatuh ke arah susunan tumpukan balok-balok yang telah jatuh sebelumnya. Sehingga balok-balok tersebut dapat tersusun membentuk baris penuh. Setiap baris yang penuh akan dihilangkan dari tumpukan dan tumpukan yang di atasnya akan jatuh sesuai jumlah baris yang hilang. Jika susunan tumpukan balok mencapai garis batas atas, maka permainan berakhir.

Poin diberikan apabila pemain dapat menyusun balok tetris agar memenuhi atau membersihkan tiap baris papan permainan tetris. Tiap satu baris yang dipenuhi atau dibersihkan pemain akan mendapatkan 100 poin. Setelah permainan berakhir, poin yang dikumpulkan akan di cek dengan poin tertinggi yang dikumpulkan dalam permainan sebelumnya. Apabila poinnya tidak lebih tinggi, maka akan dihapus. Dan apabila poinnya lebih tinggi, akan disimpan sebagai poin tertinggi.

3.5.1 Perancangan Permainan Tetris

Pada game tetris, terdapat blok-blok yang akan kita susun secara horizontal ataupun vertical. Blok-blok tersebut dinamakan dengan grid. Jumlah tiap baris grid dalam permainan tetris yang akan dibuat adalah 20. Grid tersebut pada permainan tetris akan dibuat dengan menggunakan matriks berdimensi 2.


(38)

Contoh :

___________________ o o o o

o o o o o o o o

__________________

Sebagai contoh diatas adalah matriks ukuran 4x3 (4 kolom, 3 baris). Begitu pula pada tetris juga memiliki ukuran kolom x baris (m x n). Pada kolom 1 baris 1, memiliki index[0,0]. Pada kolom 1 baris 2, memiliki indexnya[0,1]. Pada kolom 1 baris 3, memiliki index[0,2]. Pada kolom 2 baris 1, itu indexnya[1,0]. Pada kolom 2 baris 2, itu indexnya[1,1] dan seterusnya. Susunannya terlihat seperti pada matriks dibawah ini :

[0,0] [0,1] [0,2] [0,3] [1,0] [1,1] [1,2] [1,3] [2,0] [2,1] [2,2] [2,3]

Baris paling atas pada tetris (baris 1) memiliki index [0,n] sampai [0,n+1]. Sehingga dapat kita anggap ukuran layar tetris [m,n]. Setiap ada blok yang turun atau berjatuhan kita definisikan sebagai, m+1 dan setiap bergeser kekanan n+1 dan setiap kekiri n-1.

Pada permainan tetris ini apabila blok yang berjatuhan telah melampaui batas dari layar tetris [m,n] maka permainan akan berakhir (game over) sehingga apabila ada baris yang penuh (sesuai dengan syarat) maka baris tersebut akan dihapus.


(39)

3.6 Pemodelan Analisis

Pada penelitian ini digunakan UML sebagai bahasa pemodelan untuk mendesain dan merancang aplikasi permainan. Model UML yang digunakan adalah use case diagram, activity diagram, dan class diagram.

3.6.1 Identifikasi Use Case

Untuk mengetahui actor dan use case yang akan digunakan, maka dilakukan identifikasi actor dan identifikasi use case. Setelah mendapatkan actor dan use case maka use case diagram dapat digambarkan.

Pengidentifikasian actor dalam aplikasi ini dilakukan dengan menjawab pertanyaan-pertanyaan berikut :

1. Siapa yang menggunakan sistem? Jawaban : Pemain

2. Siapa yang diperlukan untuk melaksanakan fungsi pada sistem? Jawaban : Pemain

3. Bagaimana pengguna menggunakan sistem?

Jawaban : Pemain bermain dengan memilih menu yang terdapat pada halaman utama aplikasi. Untuk memulai permainan tetris, pemain menekan tombol new game pada menu utama.

Dengan demikian actor yang diperoleh adalah pemain. Untuk mendapatkan use case dari pemain, maka harus ditentukan hal-hal apa saja yang dapat dilakukan pemain terhadap sistem.

Berikut adalah hal-hal yang dapat dilakukan oleh pemain sebagai actor dalam sistem :

1. Memulai permainan tetris perintah suara. 2. Memulai fitur pengenalan suara

3. Mem-pause permainan. 4. Melihat skor.


(40)

Berikut adalah use case diagram yang digambarkan berdasarkan actor dan use case yang diperoleh.

Gambar 3.4 Use case diagram Tetris Perintah Suara

3.6.1.1 Use Case Memulai Game

Berikut ini merupakan tabel dokumentasi naratif dari use case memulai game.

Tabel 3.1 Dokumentasi naratif use case memulai game

Nama use case Memulai Game

Aktor Pemain

Deskripsi Use case ini berfungsi untuk memulai permainan tetris perintah suara.

Pre condition Mode permainan sudah dipilih dan papan sudah ditampilkan untuk siap dimainkan.

Normal flow Kegiatan aktor Respon sistem Pemain memilih tombol

“new game”.

Sistem menampilkan papan permainan.

Alternative flow Kegiatan aktor Respon sistem Pemain menekan tombol Sistem mem-pause


(41)

Activity diagram untuk use case memulai game dapat dilihat pada gambar 3.5

Gambar 3.5 Activity Diagram Memulai Game

3.6.1.2 Use Case Memulai Fitur Pengenalan Suara

Berikut ini merupakan tabel dokumentasi naratif dari use case memulai fitur pengenalan suara.

Tabel 3.2 Dokumentasi naratif use case memulai fitur pengenalan suara Nama use case Memulai Fitur Pengenalan suara

Aktor Pemain

Deskripsi Use case ini berfungsi untuk memulai (mengaktifkan) fitur pengenalan perintah suara.

Pre condition Mode permainan dan papan sudah ditampilkan untuk siap dimainkan.

Normal flow Kegiatan aktor Respon sistem Pemain tombol “Push to

Speak”.

Sistem mengaktifkan fitur pengenalan suara.

Alternative flow Kegiatan aktor Respon sistem Pemain menekan tombol

„back‟

Sistem mem-pause permainan.

Post condition Sistem menggerakkan balok tetris sesuai hasil pengenalan suara.


(42)

Activity diagram untuk use case memulai fitur perintah suara dapat dilihat pada gambar 3. 6

Gambar 3.6 Activity diagram memulai fitur perintah suara.

3.6.1.3 Use Case Mem-pause permainan

Berikut ini merupakan tabel dokumentasi naratif use case pause permainan.

Tabel 3.3 Dokumentasi naratif use case pause permainan

Nama use case Pause permainan

Aktor Pemain

Deskripsi Use case ini berfungsi untuk menghentikan permainan sesaat Pre condition Pemain sedang memainkan permainan.

Normal flow Kegiatan aktor Respon sistem Pemain menekan tombol

pause” saat permainan sedang berlangsung

Sistem mem-pause permainan


(43)

3.6.1.4 Use CaseResume permainan

Berikut ini merupakan tabel dokumentasi naratif use case resume permainan

Tabel 3.4 Dokumentasi naratif use case resume permainan

Nama use case Resume permainan

Aktor Pemain

Deskripsi Use case ini berfungsi untuk melanjutkan permainan Pre condition Permainan di-pause

Normal flow Kegiatan aktor Respon sistem Pemain menekan tombol

resume saat permainan dihentikan

Sistem melanjutkan permainan

Alternative flow Kegiatan aktor Respon sistem

- -

Post condition Permainan dilanjutkan

3.6.1.5 Use Case Melihat Skor

Berikut ini merupakan tabel dokumentasi naratif dari use case lihat skor.

Tabel 3.5 Dokumentasi naratif use case melihat skor

Nama use case Lihat Skor

Aktor Pemain

Deskripsi Use case ini berfungsi untuk melihat skor tertinggi permainan. Pre condition Mode high score dibuka.

Normal flow Kegiatan aktor Respon sistem

- Sistem menampilkan skor. Alternative flow Kegiatan aktor Respon sistem

Pemain menekan tombol “back”

Aplikasi kembali ke menu utama.


(44)

Activity diagram untuk use case melihat skor dapat dilihat pada gambar 3.7

Gambar 3.7 Activity diagram melihat skor

3.6.1.6 Use Case Melihat About

Berikut ini merupakan tabel dokumentasi naratif dari use case lihat about.

Tabel 3.6 Dokumentasi naratif use case melihat about

Nama use case Melihat About

Aktor Pemain

Deskripsi Use case ini berfungsi untuk melihat informasi aplikasi. Pre condition Mode about dibuka.

Normal flow Kegiatan aktor Respon sistem

- Sistem menampilkan informasi dari aplikasi.


(45)

Activity diagram untuk use case melihat halaman about dapat dilihat pada gambar 3.8

Gambar 3.8 Activity diagram melihat about.

3.6.1.7 Use CaseExit Game

Berikut ini merupakan tabel dokumentasi naratif dari use case exit game.

Tabel 3.7 Dokumentasi naratif use case exit game

Nama use case Exit Game

Aktor Pemain

Deskripsi Use case ini berfungsi untuk keluar (menutup) aplikasi. Pre condition Menu utama ditampilkan.

Normal flow Kegiatan aktor Respon sistem

Menekan tombol exit Sistem menutup dan keluar dari aplikasi tetris perintah suara. Alternative flow Kegiatan aktor Respon sistem

- -


(46)

Activity diagram untuk use case exit game dapat dilihat pada gambar 3.9

Gambar 3.9 Activity diagram exit game.

3.6.2 Perancangan Class Diagram

Class diagram dirancang untuk menentukan objek-objek yang dibutuhkan untuk perancangan sistem. Setiap kelas memiliki attributes dan methods masing-masing sesuai dengan kebutuhan kelas tersebut.

Class diagram yang terdapat pada aplikasi tetris perintah suara yang akan dibuat terdapat pada gambar 3.10


(47)

(48)

Kelas-kelas pada gambar 3.10 mempunyai kegunaannya masing-masing. Kelas-kelas tersebut dijelaskan pada tabel berikut :

Tabel 3.8 Penjelasan kelas-kelas pada class diagram tetris perintah suara

Kelas Kegunaan

Tetris Merupakan kelas utama. Kelas pertama yang dipanggil saat sistem dijalankan. Dan merupakan layar menu utama.

Game Kelas permainan game tetris.

BoardView Kelas inisialisasi dan konfigurasi papan permainan tetris.

Piece Kelas inisialisasi dan konfigurasi tiap balok tetrsi.

Box Kelas untuk menginisialisasi posisi titik tiap balok tetris.

RecordAudioTask Kelas untuk mengkonfigurasi dan mengintegrasi kan recording audio dan pengenalan suara

LoudNoiseDetector Kelas untuk mendeteksi sinyal suara dan melakukan pengenalan suara.

AudioClipRecorder Kelas untuk melakukan recording audio. FeatureExtract Untuk melakukan ekstraksi fitur sunyal suara. CodeBook Kelas untuk mengkuantisasi dan pengaturan

codebook vector hasil ekstraksi fitur.


(49)

3.7 Transisi Layar Dan Antarmuka

Bagian ini adalah bagian perancangan transisi antar layar dan pembuatan rancangan antarmuka aplikasi yang akan dibuat.

3.7.1 Transisi Layar

Transisi layar adalah proses pergantian layar dari satu layar ke layar lain. Pergantian layar dapat terjadi akibat pemicu yang dapat berupa tombol, waktu, keadaan aplikasi, dan lain-lain.

Penulis membuat skema transisi layar agar dapat mengetahui berapa banyak layar yang harus dibuat dalam permainan ini. Secara umum transisi layar permainan tetris perintah suara dapat dilihat pada gambar 3.11


(50)

3.7.2 Perancangan Antarmuka

Berdasarkan transisi layar pada gambar 3.11 ada empat antarmuka yang harus dirancang. Berikut adalah rencana antarmuka yang akan dibuat yang dibuat dalam bentuk low fidelity interface.

1. Menu Utama

Layar ini adalah layar pertama yang terlihat saat aplikasi dibuka dimana kegiatan yang dilakukan pada layar ini adalah pemain dapat memilih memulai permainan (new game), melihat skor (highscore), ataupun melihat informasi tentang aplikasi (about). Adapun rancangan layar dapat dilihat pada gambar 3.11

Gambar 3.12 Rancangan menu utama

2. Game Board

Layar ini merupakan layar papan permainan dimana permainan tetris perintah suara dimainkan. Adapun rancangan layar dapat dilihat pada gambar 3.13


(51)

Gambar 3.13 Rancangan antarmuka game board

3. Highscore

Layar ini untuk memperlihatkan tiga skor tertinggi yang dicatat pemain dalam memainkan game tetris perintah suara. Adapun rancangan layar dapat dilihat pada gambar 3.14.


(52)

4. About

Layar ini untuk menampilkan informasi tetntang aplikasi tetris perintah suara. Adapun rancangan layar dapat dilihat pada gambar 3.15


(53)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

Implementasi dan pengujian sistem sesuai dengan analisi dan perancangan sistem pada bab sebelumnya akan dijelaskan pada bab ini. Penjelasan tentang implementasi sistem dilakukan untuk mengetahui hasil rancangan aplikasi, dan pengujian dilakukan untuk membuktikan jika aplikasi dapat berjalan baik pada perangkat Android.

4.1 Implementasi

Implementasi aplikasi permainan tetris perintah suara dibuat menggunakan bahasa pemrograman JAVA berbasis Android dengan menggunakan Integrated Development Environment (IDE) Eclipse Indigo.

4.1.1 Konfigurasi Perangkat Keras

Dalam pengembangan aplikasi Android, kebutuhan terbesar perangkat keras adalah saat melakukan ujicoba ke emulator. Ujicoba ke emulator adalah tahap awal sebelum aplikasi dipasangkan ke perangkat Android. Agar pengujian dapat berjalan dengan lancar, penulis menggunakan komputer dengan spesifikasi perangkat keras sebagai berikut :

1. Processor Intel Core 2 Duo 1.83 GHZ 2. Memory RAM 1 GB

3. Harddisk 160 GB

4. VGA ATI Radeon HD 5570


(54)

4.1.2. Konfigurasi Perangkat Lunak

Pada pengimplementasian aplikasi tetris perintah suara, penulis menggunakan sistem operasi Windows 7 32 bit. Perangkat lunak yang digunakan adalah :

1. Java Standart Edition Development Kit 6 Update 11 2. Android SDK 2.3.1 (API 9)

3. Eclipse Indigo

Untuk perangkat Android digunakan Stock ROM Android 4.1.2 Smartfren Andromax C sebagai sistem operasi..

4.1.3 File Aset

File aset adalah berkas file yang digunakan dalam implementasi aplikasi ini. Berkas file merupakan file database data sinyal suara yang telah dilatih dengan metode vector quantization dan hidden markov model yang berguna sebagi data pembanding dalam proses pengenalan suara. File database tersebut terdiri atas empat buah file yang terdiri atas satu buah file codebook dan tiga buah file pemodelan hidden markov yaitu “codebook.cbk”, “kiri.hmm”, “kanan.hmm” dan “putar.hmm”.

File database tersebut akan otomatis tersimpan di memory internal perangkat android apabila aplikasi tersebut di-install.

4.1.4 Eksekusi Aplikasi

Berikut akan dijelaskan hasil eksekusi aplikasi permainan tetris yang dijalankan pada smartphone Smartfren Andromax C. Penjelasan dimulai dari tampilan awal aplikasi.

Pada tampilan awal terdapat beberapa menu pilihan yang terdiri dari ”new

game” yang merupakan menu untuk memulai memainkan game tetris perintah suara.

Kemudian ada menu ”highscore” untuk menampilkan halaman pencetak skor

tertinggi. Lalu terdapat menu ”about” untuk menampilkan informasi pembuatan aplikasi dan informasi bagaimana cara memainkan game tetris perintah suara tersebut.


(55)

Gambar 4.1 Tampilan menu utama


(56)

Gambar 4.3 Tampilan halaman highscore

Untuk memulai memainkan game tetris perintah suara, pemain menekan tombol ”new game” yang terdapat pada tampilan menu utama. Setelah itu akan ditampilkan papan permainan pada layar dan game tetris perintah suara siap dimainkan.

Cara untuk memainkan game ini adalah balok tetris akan jatuh dari atas ke bawah papan permainan dengan waktu konstan. Yang dilakukan pemain adalah menyusun balok tetris tersebut dengan meggerakkan balok tetris sedemikian rupa hingga mampu mengisi penuh dasar papan permainan untuk mendapatkan poin.

Balok tetris tersebut dapat digerakkan ke kiri, ke kanan, dan memutar posisi dan bentuk balok sebesar 90° ke arah kanan. Untuk menggerakkan balok tetris tersebut akan mengimplementasikan pengenalan suara, yaitu pemain menggerakkan balok tetris dengan mengucapkan perintah dengan suaranya.


(57)

Gambar 4.4 Tampilan papan permainan tetris perintah suara

Untuk menggerakkan balok tetris pemain terlebih dahulu menekan tombol ”push to speak” yang terdapat pada layar papan permainan untuk mengaktifkan fungsi perintah pengenalan suara. Pemain mengucapkan kata ”KIRI” untuk menggerakkan ke arah kiri. Kata ”KANAN” menggerakkan balok ke arah kanan dan untuk memutar posisi balok tetris sebesar 90° pemain mengucapkan kata ”PUTAR”

4.2 Pengujian

Pengujian sistem dilakukan untuk memeriksa kekompakam antar komponen sistem dan sub sistemnya dengan tujuan utamanya adalah untuk memastikan elemen-elemen sistem berfungsi sesuai dengan yang diharapkan. Pengujian sistem juga termasuk pengujian program secara menyeluruh. Kumpulan program yang telah terintegerasikan perlu diuji coba atau tes untuk melihat apakah sebuah program dapat menerima dengan baik, memproses dan memberikan keluaran program yang baik pula.


(58)

4.2.1 Pengujian Perangkat

Pengujian perangkat dilakukan untuk mengetahui apakah permainan yang dibangun berhasil atau tidak berjalan baik pada perangkat Android.

Berikut ini adalah tabel hasil uji perangkat keras (smartphone) dan ROM (varian Android) yang digunakan. Penulis tidak menemukan perangkat yang gagal ataupun cacat saat dipasangi aplikasi permainan tetris sehingga isi tabel ini hanya berisi perangkat berhasil.

Tabel 4.1 Hasil uji perangkat

No. Perangkat Keras ROM Hasil

1. Smartfren Andromax C Stock ROM 4.1.2 Jalan

2. Samsung Galaxy Y Stock ROM 2.3.6 Jalan

3. Samsung Galaxy Mini Stock ROM 2.3.6 Jalan

4. Samsung Galaxy S 2 Custom ROM 4.0.3 Jalan

5. SE Xperia Mini Stock ROM 2.3.6 Jalan

6. Samsung Galaxy Ace Custom ROM 2.3.6 Jalan

7. SE Xperia X8 Custom ROM 2.3.7 Jalan

8. Samsung Galaxy Mini Stock ROM 2.2 Jalan

9. SpeedUP Tab Stock ROM 4.0.3 Jalan

10. SE Xperia Arc Stock ROM 2.3.3 Jalan

11. HTC Inspire 4G Custom ROM 4.0.4 Jalan

12. SE Xperia Play Stock ROM 2.3.4 Jalan

4.2.2 Pengujian Sistem Pengenalan Suara

Pengujian sistem pengenalan suara dilakukan untuk melihat tingkat persentase keberhasilan metode pengenalan suara yang diterapkan apakah memenuhi dan berhasil mengimplementasikan pengenalan suara sebagai kontrol dalam memainkan permainan tetris.


(59)

kali untuk tiap kata perintah. Kemudian akan dilihat hasil tingkat keberhasilan sistem pengenalan suara yang dibuat dengan menghitung persentase keberhasilan masing-masing kata.

Berikut adalah tabel hasil pengujian sistem pengenalan suara dari aplikasi game tetris perintah suara.

Tabel 4.2 Hasil uji sistem pengenalan suara

No. Nama

Penguji

Kata Yang Diucapkan

Hasil (Gerak Balok tetris) Jumlah Akurat

Kiri Kanan Putar

1 Penguji_1 Kiri 18 2 0 18

2 Penguji_1 Kanan 1 16 3 16

3 Penguji_1 Putar 2 2 16 16

4 Penguji_2 Kiri 15 4 1 15

5 Penguji_2 Kanan 1 17 2 17

6 Penguji_2 Putar 1 4 15 14

7 Penguji_3 Kiri 17 3 0 17

8 Penguji_3 Kanan 2 13 5 13

9 Penguji_3 Putar 4 6 14 14

10 Penguji_4 Kiri 19 0 1 19

11 Penguji_4 Kanan 2 17 1 17

12 Penguji_4 Putar 1 3 16 16

13 Penguji_5 Kiri 17 1 2 17

14 Penguji_5 Kanan 2 16 2 16

15 Penguji_5 Putar 1 2 17 17

TOTAL JUMLAH AKURAT 242

Dari hasil pengamatan pada tabel diatas maka dapat dihitung tingkat keberhasilan sistem pengenalan suara yang terdapat pada aplikasi permainan tetris ini adalah :

Rumus :

Maka diperoleh :


(60)

BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan pembahasan dan evaluasi dari bab-bab terdahulu, maka dapat diambil kesimpulan sebagai berikut :

1. Aplikasi game tetris perintah suara berhasil dibangun.

2. Hasil rancangan analisa dan desain aplikasi game tetris perintah suara berhasil diimplementasikan dengan baik. Hal ini dapat ditunjukkan dengan fitur-fitur yang telah berjalan dengan baik.

3. Metode sistem pengenalan suara berhasil diimplementasikan sebagai kontrol permainan game tetris dengan tingkat akurasi keberhasilan sebesar 80,66 %.

5.2 Saran

Beberapa saran untuk pengembangan lebih lanjut dari aplikasi game tetris perintah suara pada platform Google Android antara lain:

1. Aplikasi game tetris perintah suara saat ini yang dibuat masih menggunakan tombol untuk aktivasi fungsi perintah suara. Untuk kedepannya perlu dikembangkan sistem yang mampu otomatis mendeteksi perintah suara secara real-time tanpa harus menekan tombol aktivasi.


(61)

2. Metode pengenalan suara yang dibuat menggunakan metode vector quantization dan hiddden markov model. Untuk selanjutnya perlu dikembangkan dengan menggunakan metode pengenalan suara yang lain untuk dapat meningkatkan tingkat akurasi keberhasilan perintah suara.

3. Aplikasi game tetris perintah suara saat ini dibangun pada platform sistem operasi Android. Untuk itu perlu dikembangkan agar dapat dibuat pada sistem operasi smartphone lainnya.


(62)

DAFTAR

PUSTAKA

Anusuya, M.A,. Katti, S.K,. 2009. Speech Recognition by machine : A review. International Journal of Computer Science and Information Security, Vol. 6, No. 3.

Buono, Agus., Jatmiko, Wisnu., Kusumoputro, Benyamin. 2009. Perluasan Metode MFCC 1D KE 2D Sebagai Ekstraksi Ciri Pada Sistem Identifikasi Pembicara Menggunakan Hidden Markov Model (HMM). Makara, Sains, Vol. 13, No. 1, April 2009: 87-93.

Buono, Agus. 2009. Representasi nilai hos dan model MFCC sebagai ekstraksi ciri pada sistem indentifikasi pembicara di lingkungan bernoise

menggunakan HMM. Disertasi, Depok: Program Studi Ilmu Komputer, Universitas Indonesia.

Do, MN. 1994. Digital Signal Processing Mini- Project: An Automatic Speaker Recognition System Audio Visual Communications Laboratory.

Lausanne: Swiss Federal Institute of Technology.

Hidayatno, Achmad., Sumardi. 2006. Pengenalan Ucapan Kata Terisolasi dengan Metode Hidden Markov Model (HMM) melalui Ekstraksi Ciri Linear Predictive Coding (LPC). Penelitian Hibah Bersaing DIKTI Depdiknas, Semarang: Jurusan Teknik Elektro, Universitas Diponogoro.

Hoogeboom, H.J., Kosters, W.A. 2004. Theory Of Tetris. Leiden Institute of Advanced Computer Science Universiteit Leiden,The Netherlands. Ilyas, M.Z., Samad, S.A., Hussain, A., Ishak,K.A. 2007. Speaker Verification

Using Vector Quantization and Hidden Markov Model. The 5th Student Conference on Research and Development –SCOReD 2007.

Jayadi, Sri. 2011. Pengenalan Angka Terisolasi dengan Menggunakan Pemodelan HMM Melalui Ekstraksi Feature Mel-Cepstrum Filter Bank. Semarang:


(63)

Mellisa, Gressia. 2008. Pencocokan Pola Suara (Speech Recognition) Dengan Algoritma FFT dan Divide and Conquer. Tugas Akhir Teknik

Informatika, Bandung : ITB.

Permana, Arief Fajar. 2011. Implementasi Hidden Markov Model Untuk Aplikasi Pengenalan Ucapan Sebagai Kendali Gerak Robot Mobil. Tugas Akhir, Bogor : Departemen Ilmu Komputer, Institut Pertanian Bogor.

Rabiner, L B.H. Juang. 1993. Fundamental of Speech Recognition, Prentice Hall International, Inc..

Safaat, Nazrudin. 2010. Android Pemograman Aplikasi Mobile Smartphone Dan Tablet PC Berbasis Android. Informatika, Bandung.

Soong, F.K., Rosenberg, A.E., Rabiner, L.R., Juang, B.H. 1985. A Vector

Quantization Approach To Speaker Recognition. Proccedings ICASSP’85, Tampa, pp.387-390.


(64)

LAMPIRAN

Tetris.java

package android.tetris;

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;

import android.view.View.OnClickListener; import android.view.Window;

import android.widget.Button;

public class Tetris extends Activity {

private Button btnNewGame, btnHighScores, btnAbout, btnExit;

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) {

//Assign layouts

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main);

//Find and assign buttons

btnNewGame = (Button) findViewById(R.id.buttonNewGame); btnNewGame.setOnClickListener(new OnClickListener(){

public void onClick(View v) {

Intent intent = new Intent(Tetris.this, Game.class);

startActivity(intent);

} });

btnHighScores = (Button) findViewById(R.id.buttonHighScores); btnHighScores.setOnClickListener(new OnClickListener(){

public void onClick(View v) {

Intent intent = new Intent(Tetris.this,

HighScores.class);

startActivity(intent);

} });

btnAbout = (Button) findViewById(R.id.buttonAbout);

//btnResumeGame.setEnabled(false); //Disabled (unimplemented feature) btnAbout.setOnClickListener(new OnClickListener(){


(65)

btnExit = (Button) findViewById(R.id.buttonExit); btnExit.setOnClickListener(new OnClickListener(){

public void onClick(View v) {

finish(); } }); } } Game.java package android.tetris; import java.util.Calendar; import java.util.Date; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.media.AudioFormat; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Vibrator; import android.view.Display; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.io.File; import java.util.ArrayList; import java.util.List; import android.content.res.AssetManager; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Button; import android.tetris.voice.RecordAudio.interp.ConsistentFrequencyDetector;


(66)

import android.tetris.voice.RecordAudio.record.AudioClipRecorder;

import android.tetris.voice.RecordAudio.record.OneDetectorManyObservers; import android.tetris.voice.RecordTask.AudioTaskUtil;

import android.tetris.voice.RecordTask.RecordAudioTask;

import android.tetris.voice.RecordAudio.interp.LoudNoiseDetector;

public class Game extends Activity {

RecordAudioTask recordAudioTask; LoudNoiseDetector lnd;

BoardView gameBoard;

int d; // The side of a box public Box[][] box;

int x, y;

BoardView boardView; Display display; CountDownTimer timer; public Piece currentPiece; public Piece nextPiece; boolean pieceOnGame; ImageView nextPieceImg; //Score and combo TextView textScore; ImageView imageCombo; int score = 0;

int combo = 1; Vibrator vibrator; //The pause indicator boolean game;

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) {

///Assign File Database

cekFileDatabase(); //Assign layouts super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.game);

//Get measures for the board

display = getWindowManager().getDefaultDisplay(); int width = (int) (display.getWidth() * 0.7); int height = (int) (display.getHeight() * 0.9); gameBoard = (BoardView) findViewById(R.id.GameView); d = (int) (width * 0.85 / 10);


(1)

*/

public double getProbability(int testSeq[]) { setObSeq(testSeq);

double temp = computeAlpha(); return temp;

} /**

* calculate forward variable alpha<br> * calls: none<br>

* called by: HiddenMarkov *

* @return probability */

protected double computeAlpha() { /**

* Pr(obSeq | model); Probability of the observation sequence given the

* hmm model */

double probability = 0; // reset scaleFactor[]

for (int t = 0; t < len_obSeq; t++) { scaleFactor[t] = 0;

} /**

* Initialization: Calculating all alpha variables at time = 0

*/

for (int i = 0; i < num_states; i++) {

// System.out.println("current "+i+" crr "+currentSeq[0]);

alpha[0][i] = pi[i] * output[i][currentSeq[0]]; }

rescaleAlpha(0); /**

* Induction: */

for (int t = 0; t < len_obSeq - 1; t++) { for (int j = 0; j < num_states; j++) { /**

* Sum of all alpha[t][i] * transition[i][j] */

double sum = 0; /**

* Calculate sum of all alpha[t][i] * transition[i][j], 0 <= i <

* num_states */


(2)

sum += alpha[t][i] * transition[i][j];

}

alpha[t + 1][j] = sum * output[j][currentSeq[t + 1]];

}

rescaleAlpha(t + 1); }

/**

* Termination: Calculate Pr(obSeq | model) */

for (int i = 0; i < num_states; i++) {

probability += alpha[len_obSeq - 1][i]; }

probability = 0;

// double totalScaleFactor = 1; for (int t = 0; t < len_obSeq; t++) { // System.out.println("s: " + Math.log(scaleFactor[t]));

probability += Math.log(scaleFactor[t]); // totalScaleFactor *= scaleFactor[t]; }

return -probability;

// return porbability / totalScaleFactor; }

/**

* calculate backward variable beta for later use with Re-Estimation method<br>

* calls: none<br>

* called by: HiddenMarkov */

protected void computeBeta() { /**

* Initialization: Set all beta variables to 1 at time = len_obSeq - 1

*/

for (int i = 0; i < num_states; i++) { beta[len_obSeq - 1][i] = 1; }

rescaleBeta(len_obSeq - 1); /**

* Induction: */

for (int t = len_obSeq - 2; t >= 0; t--) { for (int i = 0; i < num_states; i++) {

for (int j = 0; j < num_states; j++) { beta[t][i] += transition[i][j] * output[j][currentSeq[t + 1]] * beta[t + 1][j];

} }


(3)

rescaleBeta(t); }

} /**

* set the number of training sequences<br> * calls: none<br>

* called by: trainHMM *

* @param k

* number of training sequences */

public void setNumObSeq(int k) { num_obSeq = k;

obSeq = new int[k][]; }

/**

* set a training sequence for re-estimation step<br> * calls: none<br>

* called by: trainHMM *

* @param k

* index representing kth training sequence * @param trainSeq

* training sequence */

public void setTrainSeq(int k, int trainSeq[]) { obSeq[k] = trainSeq;

} /**

* set training sequences for re-estimation step<br> * calls: none<br>

* called by: trainHMM *

* @param trainSeq

* training sequences */

public void setTrainSeq(int trainSeq[][]) { num_obSeq = trainSeq.length;

obSeq = new int[num_obSeq][];// /ADDED

// System.out.println("num obSeq << setTrainSeq() "+num_obSeq);

for (int k = 0; k < num_obSeq; k++) { obSeq[k] = trainSeq[k]; }

} /**

* train the hmm model until no more improvement<br> * calls: none<br>

* called by: trainHMM */

public void train() {

// re-estimate 25 times

// NOTE: should be changed to re-estimate until no more improvement


(4)

for (int i = 0; i < 20; i++) { reestimate();

System.out.println("reestimating..."); }

// // oldm= }

/**

* Baum-Welch Algorithm - Re-estimate (iterative udpate and improvement) of

* HMM parameters<br> * calls: none<br> * called by: trainHMM */

private void reestimate() {

// new probabilities that will be the optimized and replace the older

// version

double newTransition[][] = new double[num_states][num_states];

double newOutput[][] = new double[num_states][num_symbols]; double numerator[] = new double[num_obSeq];

double denominator[] = new double[num_obSeq]; // calculate new transition probability matrix double sumP = 0;

for (int i = 0; i < num_states; i++) {

for (int j = 0; j < num_states; j++) { if (j < i || j > i + delta) { newTransition[i][j] = 0; }

else {

for (int k = 0; k < num_obSeq; k++) { numerator[k] = denominator[k] = 0;

setObSeq(obSeq[k]); sumP += computeAlpha(); computeBeta();

for (int t = 0; t < len_obSeq - 1; t++) {

numerator[k] += alpha[t][i] * transition[i][j] * output[j][currentSeq[t + 1]] * beta[t + 1][j];

denominator[k] += alpha[t][i] * beta[t][i];

} }

double denom = 0;

for (int k = 0; k < num_obSeq; k++) { newTransition[i][j] += (1 / sumP) * numerator[k];

denom += (1 / sumP) * denominator[k];


(5)

newTransition[i][j] /= denom; newTransition[i][j] +=

MIN_PROBABILITY;

} }

}

// calculate new output probability matrix sumP = 0;

for (int i = 0; i < num_states; i++) {

for (int j = 0; j < num_symbols; j++) { for (int k = 0; k < num_obSeq; k++) { numerator[k] = denominator[k] = 0; setObSeq(obSeq[k]);

sumP += computeAlpha(); computeBeta();

for (int t = 0; t < len_obSeq - 1; t++) {

if (currentSeq[t] == j) { numerator[k] += alpha[t][i] * beta[t][i];

}

denominator[k] += alpha[t][i] * beta[t][i];

} }

double denom = 0;

for (int k = 0; k < num_obSeq; k++) { newOutput[i][j] += (1 / sumP) * numerator[k];

denom += (1 / sumP) * denominator[k]; }

newOutput[i][j] /= denom;

newOutput[i][j] += MIN_PROBABILITY; }

}

// replace old matrices after re-estimate transition = newTransition;

output = newOutput; }

/**

* set observation sequence<br> * calls: none<br>

* called by: trainHMM *

* @param observationSeq

* observation sequence */

public void setObSeq(int observationSeq[]) { currentSeq = observationSeq;

len_obSeq = observationSeq.length;


(6)

alpha = new double[len_obSeq][num_states]; beta = new double[len_obSeq][num_states]; scaleFactor = new double[len_obSeq]; }

/**

* class constructor - used to create a model from a saved file<br> * calls: none<br>

* called by: volume, trainHMM *

* @param word

* path of the file to load */

public HiddenMarkov(String word) {

DataBase db = new ObjectIODataBase(); db.setType("hmm");

HMMModel model = new HMMModel();

model = (HMMModel) db.readModel(word);// System.out.println(model.getClass());

num_obSeq = model.getNum_obSeq(); output = model.getOutput();//

ArrayWriter.print2DTabbedDoubleArrayToConole(output); transition = model.getTransition(); pi = model.getPi();

num_states = output.length; num_symbols = output[0].length;

// System.out.println("num states :"+num_states+"num symbols :"+num_symbols);

} /**

* class constructor - used to create a left-to-right model with multiple

* observation sequences for training<br> * calls: none<br>

* called by: trainHMM *

* @param num_states

* number of states in the model * @param num_symbols

* number of symbols per state */

public HiddenMarkov(int num_states, int num_symbols) { this.num_states = num_states;

this.num_symbols = num_symbols;

transition = new double[num_states][num_states]; output = new double[num_states][num_symbols]; pi = new double[num_states];

/**

* in a left-to-right HMM model, the first state is always the initial

* state. e.g. probability = 1 */

pi[0] = 1;

for (int i = 1; i < num_states; i++) { pi[i] = 0;