SISTEM PEMBACA PESAN TEXT TO SPEECH BERBASIS ...

117
SISTEM PEMBACA PESAN TEXT TO SPEECH BERBASIS ANDROID MENGGUNAKAN FRAMEWORK GOOGLE API TUGAS AKHIR Disusun dalam rangka memenuhi salah satu persyaratan Untuk menyelesaikan program Strata-1 Departemen Teknik Informatika Fakultas Teknik Universitas Hasanuddin Makassar Disusun Oleh NURPADILA MUSLIMIN D42113031 DEPARTEMEN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS HASANUDDIN MAKASSAR 2017

Transcript of SISTEM PEMBACA PESAN TEXT TO SPEECH BERBASIS ...

SISTEM PEMBACA PESAN TEXT TO SPEECH

BERBASIS ANDROID MENGGUNAKAN

FRAMEWORK GOOGLE API

TUGAS AKHIR

Disusun dalam rangka memenuhi salah satu persyaratan

Untuk menyelesaikan program Strata-1

Departemen Teknik Informatika Fakultas Teknik

Universitas Hasanuddin

Makassar

Disusun Oleh

NURPADILA MUSLIMIN

D42113031

DEPARTEMEN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS HASANUDDIN

MAKASSAR

2017

iii

ABSTRAK

Telegram, Line dan WhatsApp merupakan beberapa pesan instan yang telah

banyak digunakan sebagai pengiriman pesan singkat yang mudah digunakan dan

terpopuler hingga saat ini. Namun dalam berkirim pesan, pengguna biasanya

mengalami keterbatasan saat akan membaca pesan yang masuk. Beberapa

keterbatasan yang terjadi diantaranya sedang berkendaraan, penyandang tunanetra,

dan jarak ponsel dengan pengguna. Aplikasi pembaca pesan yang berjalan pada

sistem operasi Android dan terintegrasi dengan sistem text to speech dapat menjadi

solusi alternatif bagi pengguna yang ingin melihat atau mendengarkan pesan yang

disampaikan kepadanya tanpa harus mengganggu aktifitas. Sistem pembaca pesan

text to speech akan menerima pesan instan dari Telegram, Line dan WhatsApp

menjadi ucapan dan bekerja di belakang layar serta mengkonversi teks pesan yang

diterima jika pesan mengandung singkatan. Dengan menggunakan Android Studio,

bahasa pemograman Java dan sistem manajemen database SQLite serta

NotificationListenerSevice membuat sistem mampu menerima pack, tittle dan text

dari pemberitahuan pesan Telegram, Line dan WhatsApp yang ditampilkan pada

layar smartphone sehingga sistem berjalan dibelakang layar tanpa harus membuka

aplikasi utama. API Google Text to Speech Voice Indonesia membuat sistem

menghasilkan keluaran suara sesuai fonem dengan lafal bahasa Indonesia. Tingkat

akurasi membaca pesan sesuai keluaran yang diharapkan mencapai 78,43%.

Dengan memasukkan kata singkatan dan kata yang dimaksud (kepanjangan) ke

dalam database sistem mampu mengkonversi kata dengan benar sehingga di

peroleh peningkatan akurasi hingga 92,85%.

Kata Kunci: android, text to speech, NotificationListenerService, Line, Telegram,

WhatsApp, SQLite

iv

KATA PENGANTAR

Assalamu Alaikum Warahmatullahi Wabarakatuh

Puji dan rasa syukur mendalam penulis panjatkan kehadirat Allah SWT, karena

berkat limpahan rahmat, hidayah dan inayah-Nya maka skripsi ini dapat

diselesaikan dengan baik. Salam dan salawat semoga selalu tercurah pada baginda

Rasulullah Muhammad SAW.

Skripsi yang berjudul " Sistem Pembaca Pesan Text to Speech Berbasis Android

Menggunakan Framework Google Api " di susun untuk memenuhi persyaratan

kurikulum sarjana strata-1 (S-1) Teknik Informatika Departemen Teknik

Informatika Fakultas Teknik Universitas Hasanuddin.

Penulis mengucapkan rasa terima kasih yang sebesar-besarnya atas semua

bantuan yang telah diberikan, baik secara langsung maupun tidak langsung selama

penyusunan tugas akhir ini hingga selesai. Secara khusus rasa terimakasih tersebut

kami sampaikan kepada:

1. Allah SWT, Tuhan Yang Maha Esa atas segala berkah rahmat dan hidayah-

Nya penulis akhirnya dapat menyelesaikan sistem dan penulisan laporan

tugas akhir ini

2. Kedua Orang Tua dan Keluarga, Muslimin Sirumpa dan Nurhayati yang

tidak pernah henti-hentinya memberikan doa, kasih sayang, dan motivasi

selama masa perkuliahan hingga penyelesaian tugas akhir ini.

3. Ibu Dr.Ir.Ingrid Nurtanio, M.T selaku pembimbing I dan Ibu Dr.Eng.Intan

Sari Areni, ST., MT selaku pembimbing II atas kesabaran dalam

membimbing serta arahan dalam penyusunan tugas akhir ini.

v

4. Bapak Dr. Amil Ahmad Ilham ST.,M.IT., Ph.D selaku Ketua Prodi Teknik

Informatika fakultas Teknik Universitas Hasanuddin.

5. Bapak Robert dan Bapak Zainuddin selaku staff Kantor Prodi Informatika

Universitas Hasanuddin atas segala bantuannya.

6. Arisal Ahmad Saila, M.Takdir, Haryati Amaliyah, Andi Januar Khaerul,

Muhammad Idmaril Amri, Andi Mabrur Abulkhaer, dan Siti Khumaerah

Mufti selaku teman yang telah banyak memberikan kenyamanan, dan segala

bantuannya selama masa perkulihan hingga penyusunan tugas akhir ini.

7. Wardiman Hasbi, Zandy Rizaldi, Surya Adi Tama, Ahmad Rifaldi, Zaldy

Eka Putra, Rahmat Hardian dan Arya Surya Prayoga yang telah

memberikan waktu berharga hingga penyusunan tugas akhir ini.

8. Suharyuni, Andi Febriana, Sri Ayu Putri Ningsi, Hasriana, Sisca Rosari

Putriani, Nurul Fajrin Alifah, Angreyni Devianti, Isnaeni,Ayu Dhiya

Mufidah, Himawan Sandhi, Arfan Almukaddas dan kak Sri Wahyuni selaku

teman seperjuangan menyelesaikan tugas akhir.

9. Teman-teman Prodi Teknik Informatika terhusus angkatan 2013 atas segala

dukungan dan bantuannya.

10. Serta seluruh pihak yang tidak sempat saya sebutkan satu persatu yang telah

banyak meluangkan tenaga, waktu, dan pikiran selama penyusunan Laporan

Tugas Akhir ini.

Akhirnya dengan segala kerendahan hati, penyusun menyadari masih terdapat

kekurangan dalam penyusunan Laporan Skripsi ini baik isi maupun cara penyajian.

Oleh karena itu penyusun mengharapkan adanya saran dan kritik yang bersifat

vi

membangun demi kesempurnaan laporan ini. Penyusun berharap semoga Laporan

Skripsi ini dapat memberikan manfaat bagi pembaca pada umumnya dan manfaat

bagi penyusun pada khususnya.

Wassalamu Alaikum Warahmatutllahi Wabarakatuh

Makassar, November 2017

Penulis

vii

DAFTAR ISI

HALAMAN JUDUL……………………………………………………………………...i

LEMBAR PENGESAHAN SKRIPSI............................................................................ ii

ABSTRAK ........................................................................................................................ iii

KATA PENGANTAR ...................................................................................................... iv

DAFTAR ISI ................................................................................................................... vii

DAFTAR GAMBAR ........................................................................................................ ix

DAFTAR TABEL ............................................................................................................. x

BAB I .................................................................................................................................. 1

PENDAHULUAN ............................................................................................................. 1

1.1 Latar Belakang .................................................................................................. 1

1.2 Rumusan Masalah ............................................................................................ 3

1.3 Tujuan Penelitian .............................................................................................. 3

1.4 Manfaat Penelitian ............................................................................................ 4

1.5 Batasan Masalah ............................................................................................... 4

1.6 Metodologi Penelitian ....................................................................................... 5

1.7 Sistematika Penulisan ....................................................................................... 5

TINJAUAN PUSTAKA .................................................................................................... 7

2.1 Landasan Teori Dasar ...................................................................................... 7

2.1.1 Teknologi Pemrosesan Bahasa ................................................................. 7

2.1.2 Text To Speech (TTS) ................................................................................ 8

2.1.3 Google API ............................................................................................... 10

2.1.5 Bahasa Pemograman .............................................................................. 16

2.1.5.1 Bahasa Java ............................................................................................. 16

2.1.6 Sistem Operasi Android ......................................................................... 17

2.1.6.1 Versi Android .......................................................................................... 17

2.1.6.2 Komponen Aplikasi Android ................................................................. 22

2.1.6.3 Database SQLite ....................................................................................... 24

2.1.7 Software Yang Digunakan ..................................................................... 25

2.1.7.1 Android Studio ........................................................................................ 25

METODOLOGI PENELITIAN .................................................................................... 28

viii

3.1 Tahapan Penelitian ......................................................................................... 28

3.2 Waktu dan Lokasi Penelitian ......................................................................... 29

3.3 Studi Literatur ................................................................................................ 29

3.4 Analisis Kebutuhan Perangkat ...................................................................... 29

3.4.1 Software .................................................................................................... 29

3.4.2 Hardware .................................................................................................. 30

3.5 Rancangan Sistem ........................................................................................... 31

3.5.1 Rancangan Proses ................................................................................... 32

3.5.2 Rancangan Fitur ..................................................................................... 39

3.5.3 Rancangan Basis Data ............................................................................ 42

3.6 Validasi Penelitian .......................................................................................... 43

BAB IV ......................................................................................................................... 45

IMPLEMENTASI DAN PEMBAHASAN ................................................................ 45

4.1 Gambaran Umum Aplikasi ............................................................................ 45

4.2 Implementasi Sistem ....................................................................................... 45

4.2.1 Implementasi Antarmuka ...................................................................... 46

4.3 Pengujian Sistem ............................................................................................. 51

4.3.1 Rencana Pengujian ................................................................................. 51

4.1.1 Kasus dan Hasil Pengujian .................................................................... 52

BAB V .............................................................................................................................. 60

PENUTUP ....................................................................................................................... 60

5.1 Kesimpulan ...................................................................................................... 60

5.2 Saran ................................................................................................................ 61

DAFTAR PUSTAKA ...................................................................................................... 62

LAMPIRAN .................................................................................................................... 63

ix

DAFTAR GAMBAR

Gambar 3.1Tahapan Penelitian ....................................................................................... 28

Gambar 3.2 Flowchart Sistem Secara Umum ................................................................. 32

Gambar 3.3 Inisialisasi Notification Listener Service ..................................................... 33

Gambar 3.4 Inisialisasi TTS ............................................................................................ 34

Gambar 3.5 Objek ke string ............................................................................................ 35

Gambar 3.6 Output suara setelah normalisasi ................................................................. 39

Gambar 3.7 Fragment dalam activity .............................................................................. 40

Gambar 3.8 Flowchart Input Singkatan........................................................................... 41

Gambar 3.9 Option Menu ................................................................................................ 42

Gambar 4.1 layout fragment Telegram ........................................................................... 46

Gambar 4.2 layout fragment Line dan WhatsApp ........................................................... 47

Gambar 4.3 Options menu .............................................................................................. 48

Gambar 4 4 Alert Dialog tambah singkatan .................................................................... 49

Gambar 4.5 Menghapus berdasarkan package ................................................................ 50

Gambar 4 6 Penerimaan Pesan ........................................................................................ 50

x

DAFTAR TABEL

Tabel 2.1 Daftar Android ..................................................................................... 17

Tabel 3.1 Tabel Chat ............................................................................................ 43

Tabel 3.2 Tabel Singkatan .................................................................................... 43

Tabel 4.1 Rencana Pengujian fitur Aplikasi ......................................................... 52

Tabel 4.2 Hasil Pengujian Fitur ............................................................................ 53

Lanjutan Tabel 4.2 Hasil Pengujian Fitur ........................................................... 54

Tabel 4.3 Hasil Membaca Pesan .......................................................................... 55

Lanjutan Tabel 4.3 Hasil Membaca Pesan ......................................................... 56

Lanjutan Tabel 4.3 Hasil Membaca Pesan.…………………………………….57

1

BAB I

PENDAHULUAN

1.1 Latar Belakang

Menurut lembaga riset pasar e-Marketer, populasi netter Tanah Air mencapai

83,7 juta orang pada 2014. Angka yang berlaku untuk setiap orang yang mengakses

internet setidaknya satu kali setiap bulan itu mendudukkan Indonesia di peringkat

ke-6 terbesar di dunia dalam hal jumlah penggunaan internet. Pada 2018, e-

marketer memperkirakan netter Indonesia bakal mencapai 123 juta orang,

mengalahkan Jepang di peringkat ke-5 yang pertumbuhan jumlah pengguna

internetnya lebih lambat (KOMINFO, 2014).

Marius dan Sapto menyatakan bahwa ada tiga alasan orang Indonesia

menggunakan internet. Tiga alasan itu adalah untuk mengakses sarana sosial/

komunikasi (72%), sumber informasi harian (65%) dan mengikuti perkembangan

jaman (51%). Tiga alasan utama mengakses internet itu dipraktikan melalui empat

kegiatan utama, yaitu menggunakan jejaring sosial (87%), mencari informasi

(69%), instant messaging (60%) dan mencari berita terbaru (60%) (Marius and

Sapto, 2014).

Dalam artikel yang dibahas oleh Scott Jeffrey ada tiga instant messaging yang

memiliki kelebihan yang berbeda menjadi daya tarik bagi pengguna ponsel

diantaranya Telegram dengan kelebihan lebih ringan dan berbasis cloud yang

mempunyai proses sinkronisai yang mulus, Line dengan kelebihan memiliki fitur

2

yang menarik serta menyajikan berita-berita terbaru dan WhatsApp dengan

kelebihan tampilan yang mudah dengan sistem enkripsi dan menjadi instant

messaging terpopuler (Jeffrey, 2014).

Berkomunikasi menggunakan instant messaging biasanya pengguna

mengalami beberapa keterbatasan dalam membaca pesan yang diterima sehingga,

menghambat informasi yang diterima dan tidak tersampaikan dengan cepat.

Beberapa keterbatasan tersebut seperti jarak ponsel dengan pengguna, penyandang

tunanetra, berkendaraan dan keterbatasan aktivitas lainnya. Dengan teknologi Text-

To-Speech (TTS) keterbatasan tersebut menjadi solusi yang baik untuk

mempermudah pengguna.

Text-To-Speech merupakan suatu sistem yang melakukan dua konversi yaitu

konversi teks ke fonem dan konversi fonem ke ucapan yang dilakukan secara

berurutan dengan input teks dan menghasilkan output ucapan. Namun, dalam

mengkonversi teks menjadi suara dibutuhkan fonem dan prosodi untuk

menghasilkan pengucapan yang dapat dimengerti sehingga membutuhkan

penyimpanan yang sangat besar untuk data fonem dan prosodi dalam bahasa

Indonesia.

Penelitian yang telah dilakukan Dodi Sireger, terkait dengan sistem text to

speech bahasa Indonesia pada pesan SMS dengan konverter PDU. Dari hasil

penelitian yang telah dilakukan memiliki beberapa batasan masalah dimana

menggunakan Personal Computer (PC) sebagai pengambil pesan SMS yang ada

3

pada ponsel serta menggunakan MBROLA Speech Engine sebagai pembangkit

ucapan dengan database diphone bahasa Indonesia (Siregar, 2015).

Maka dari pembahasan yang telah dilakukan, diusulkan sistem pembaca pesan

yang akan akan menerima teks pesan dari Telegram, Line dan WhatsApp kemudian

mengubahnya menjadi ucapan dengan menggunakan google API text-to-speech

voice bahasa Indonesia. Sehingga dalam penelitian ini penulis menyusun tugas

akhir yang berjudul “Sistem Pembaca Pesan Text to Speech Berbasis Android

Menggunakan Framework Google Api”

1.2 Rumusan Masalah

Berdasarkan pada latar belakang, maka rumusan masalah pada tugas akhir ini

adalah:

1. Bagaimana membuat sistem text to speech dari pesan instan Telegram, Line

dan WhatsApp dan bekerja di belakang layar pada android?

2. Bagimana mengkonversi teks pesan yang diterima jika output ucapan yang

diterima tidak sesuai (mengandung singkatan)?

1.3 Tujuan Penelitian

Tujuan akhir dari penelitian ini adalah :

1. Membuat sistem text to speech dari pesan instan Telegram, Line dan

WhatsApp dan bekerja di belakang layar pada android.

2. Membuat konversi teks pesan yang diterima jika output ucapan yang

diterima tidak sesuai (mengandung singkatan)

4

1.4 Manfaat Penelitian

Manfaat akhir dari penelitian ini adalah :

1. Mempermudah dan membantu user ketika mendapat hambatan dalam

menerima pesan dari Telegram, Line dan WhatsApp tanpa harus melihat dan

membaca pesan yang diterima.

2. Memberikan esensi baru dalam hal penggunaan sistem yang berbasis

android serta, membantu penelitian lebih lanjut dalam pengembangan

sistem text to speech.

1.5 Batasan Masalah

Yang menjadi batasan masalah dalam tugas akhir ini adalah :

1. Sistem ini akan berjalan di Operating System Android.

2. Mengaktifkan aplikasi pembaca pesan pada akses notifikasi yang berada

pada pengaturan di smartphone.

3. Mengaktifkan dan mengatur Bahasa keluaran google TTS pada pengaturan

di smartphone untuk voice Indonesia.

4. Aplikasi ini akan membaca pesan Line, Telegram dan WhatsApp.

5. Pesan yang dibaca adalah pesan baru yang diterima dan muncul sebagai

peberitahuan pada layar smartphone.

6. Pesan yang diterima sebagai pemberitahuan akan di simpan pada aplikasi

pembaca pesan sebagai tanda pesan diterima dan dapat mendengarkan

kembali pesan yang ada.

5

7. Pesan singkatan akan dibaca ketika singkatan telah di input dan sudah

terdapat dalam database singkatan.

8. Menyelesaikan pesan yang dibaca pertama kemudian mengkonversi pesan

selanjutnya sampai pesan dalam antrian selesai.

9. Database yang digunakan adalah SQLite

1.6 Metodologi Penelitian

Adapun metodologi penelitian pada pengerjaan proyek tugas akhir ini adalah :

1. Studi literatur

Pada tahap ini dilakukan kajian terhadap berbagai literatur yang dapat

menunjang perancangan proyek tugas akhir ini.

2. Diskusi dan konsultasi

Pada tahap ini dilakukan proses diskusi dan konsultasi dengan dosen

pembimbing serta berbagai pihak yang kompeten dalam bidang ini.

3. Perancangan system

Pada tahap ini dilakukan analisis kerja dan perancangan aplikasi.

1.7 Sistematika Penulisan

Sistematika penulisan tugas akhir ini terbagi menjadi 5 (lima) bab dengan

beberapa sub bab. Berikut ini adalah sistematika penulisannya:

6

BAB I. PENDAHULUAN

Bab ini terdiri dari tujuh sub bab, yaitu Latar Belakang, Rumusan Masalah, Batasan

Masalah, Tujuan Penelitian, Manfaat Penelitian, Metodologi Penelitian dan

Sistematika Penulisan.

BAB II. TINJAUAN PUSTAKA

Bab ini berisi teori-teori yang digunakan dalam Aplikasi Pembaca Pesan Text to

Speech yang berjalan pada android.

BAB III. METODOLOGI PENELITIAN

Bab ini menguraikan secara rinci tentang Tahapan Penelitian, Waktu Dan Lokasi

Penelitian, Studi Literatur, Analisis Kebutuhan Perangkat, Rancangan Sistem,

Rancangan Basis Data dan Validasi Penelitian.

BAB IV. IMPLEMENTASI DAN PEMBAHASAN

Bab ini terdiri dari empat sub bab yang membahas mengenai Gambaran Umum

Aplikasi, Implementasi Sistem dan Pengujian Sistem.

BAB V. PENUTUP

Bab ini merupakan penutup yang berisi kesimpulan tentang hasil pemecahan

masalah yang diperoleh selama penyusunan tugas akhir ini dan beberapa saran

untuk pengembangan lebih lanjut.

7

BAB II

TINJAUAN PUSTAKA

2.1 Landasan Teori Dasar

2.1.1 Teknologi Pemrosesan Bahasa

Bahasa dapat dibedakan menjadi dua, yaitu bahasa alami dan bahasa buatan.

Bahasa alami adalah bahasa yang biasa digunakan untuk berkomunikasi antar

manusia, misalnya bahasa Indonesia, Inggris, Jepang dan sebagainya. Bahasa

Buatan adalah bahasa yang dibuat secara khusus untuk memenuhi kebutuhan

tertentu, misalnya bahasa pemograman komputer.

Suatu sistem pemrosesan bahasa alami secara lisan dapat dibentuk dari tiga sub-

sistem (Pramono, 2013):

a. Sub-Sistem Natural Language Processing (NLP), berfungsi untuk

melakukan pemrosesan secara simbolik terhadap bahasa tulisan. Beberapa

bentuk aplikasi sub-sistem ini adalah translator bahasa alami, sistem

permeriksaan sintak bahasa, sistem yang dapat menyimpulkan suatu narasi

dan sebagainya.

b. Sub-Sistem Text-to-Speech (TTS), berfungsi untuk mengubah teks (tulisan)

menjadi ucapan (bahasa lisan).

c. Sub-Sistem Speech Recognition (SR), yaitu sistem yang berfungsi untuk

mengubah atau mengenali suatu ucapan (bahasa lisan) menjadi teks (bahasa

tulisan).

8

2.1.2 Text To Speech (TTS)

TTS dapat didefinisikan sebagai sistem yang dapat mengubah suatu teks

menjadi ucapan secara otomatis dengan cara fonetisasi (penyusunan fonem-fonem

untuk membentuk ucapan). Tujuan dari text-to-speech (TTS) adalah untuk

mengkonversi input berupa teks menjadi ucapan yang dimengerti oleh pendengar.

Jadi, text-to-speech mengirimkan informasi dari mesin kepada manusia.

Membaca adalah proses men-decode-kan signal tulisan menjadi message, lalu

berusaha memahami message tersebut untuk mendapatkan suatu pengertian

(pemahaman). Membaca dengan bersuara (reading aloud) berarti proses

mengkonversi signal telisan menjadi signal dalam bentuk yang lain, yaitu ucapan

(speech).

Dalam tulisan ada satu hal yang paling penting yang diabaikan, yaitu prosodi.

Prosodi berfungsi untuk membentuk emosi dari pembicara. Dalam bahasa tulisan,

prosodi ini memiliki komponen yang terbatas karena tidak adanya cara untuk

mengekspresikan beberapa fitur di dalam posodi tersebut. Kita memang dapat

memberikan tanda baca seperti tanda seru, tanda tanya dan sebagainya untuk

memberi penekanan, namun hal-hal seperti kemarahan, kesakitan, atau sarkasme,

tidak ada acara yang khusus untuk mengutarakannya.

Dalam tulisan terkandung bahasa yang bukan merupakan bagian dari

linguistik, misalnya bahasa matematika. Ketika menemui suatu bahasa

matematika, mesin harus dapat membedakan dengan bahasa natural (natural

language). Kita ambil sebagai contoh, x2 + y2. Kita tahu bahwa angka 2 diatas

9

huruf x dan y menyatakan pemangkatan, sehingga kalimat kalimat ini dibaca

sebagai, x kuadrat ditambah y kuadrat.

Permasalahan tersebut termasuk di dalam masalah semiotik. Bahasa natural

dikenal sebagai sistem semiotik. Mesin harus menginterpretasikan kalit yang

mengandung lambang semiotik ketika menemui kalimat yang mengandung

lambang tersebut. Agar mesin dapat memproses tulisan seperti itu, mesin harus

dapat mengidentifikasi bagian mana dari teks yang berhubungan dengan masalah

semiotik.

Masalah-masalah yang dibahas di atas merupakan beberapa masalah yang

sering ditemui di dalam proses membaca. Sehingga dapat diidentifikasi model dari

TTS yang mampu melakukan proses yang dinginkan (Wundari, 2009).

Pada dasarnya Text-to-Speech adalah suatu sistem yang dapat mengubah teks

menjadi ucapan. Suatu pensintesa ucapan atau Text to Speech pada prinsipnya

terdiri dari dua sub sistem, yaitu:

a. Bagian konverter teks ke fonem (Text to Phoneme)

b. Bagian konverter fonem ke ucapan (Phoneme to Speech)

Phonem adalah istilah linguistik dan merupakan satuan terkecil dalam sebuah

bahasa yang masih bisa menunjukkan perbedaan makna. Bagian konverter teks ke

fonem berfungsi untuk mengubah kalimat masukan dalam suatu bahasa tertentu

yang berbentuk teks menjadi rangkaian kode-kode bunyi yang biasanya

direpresentasikan dengan kode phonem, durasi serta pitch-nya.

10

Bagian konverter phonem ke ucapan akan menerima masukan berupa kode-

kode phonem serta pitch dan durasi yang dihasilkan oleh bagian sebelumnya.

Berdasarkan kode-kode tersebut, bagian konverter phonem ke ucapan akan

menghasilkan bunyi atau sinyal ucapan yang sesuai dengan kalimat-kalimat yang

ingin diucapkan.

Konversi dari teks ke phonem sangat dipengaruhi oleh aturan-aturan yang

berlaku dalam suatu bahasa. Pada prinsipnya proses ini melakukan konversi dari

simbol-simbol tersebut menjadi simbol-simbol phonetik yang

memperesentasikan unit bunyi terkecil dalam suatu bahasa (Pramono, 2013).

2.1.3 Google API

Google API merupakan bagian dari Framework Google. Google

menyediakan berbagai API (Application Programming Interface) yang sangat

berguna bagi pengembang aplikasi baik web, mobile, maupun desktop untuk

memanfaatkan berbagai fitur yang disediakan oleh Google seperti: AdSense,

Search Engine, Translation, YouTube dan lain sebagainya. API secara sederhana

bisa diartikan sebagai kode program yang merupakan antarmuka atau penghubung

antara aplikasi atau web yang dibuat dengan fungsi-fungsi yang dikerjakan.

Misalnya dalam hal ini Google API berarti kode program yang dapat ditambahkan

pada aplikasi untuk memanfaatkan fungsi atau fitur yang disediakan Google.

Contohnya developer dapat menambahkan fitur Google Map pada apliaksi yang

sedang dibangun. Google API dapat dipelajari langsung melalui Google Code.

11

Melalui Google Code, developer dapat belajar tentang Google API dan dapat

mengimplementasikan pada aplikasi yang sedang dikembangkan. Ada banyak

API yang disediakan oleh Google, beberapa diantaranya adalah (Irawan, 2014).

1. Language API: memanfaatkan fitur translation yang dimiliki Google

2. Earth API: memanfatkan fitur yang ada pada Google Earth

3. Maps API: memanfaatkan fitur yang ada pada Google Maps

4. Search API: memanfaatkan fitur pencarian pada Google Search

5. Visualization API: membuat grafik maupun chart dengan Google API

6. YouTube API: memanfaatkan fitur yang ada pada YouTube misalnya

untuk pencarian video.

2.1.4 Google Text To Speech API

Penggunaan Google Text To Speech API memungkinkan developer untuk

mengkonversi teks ke dalam ucapan (suara). Untuk dapat menggunakan fitur

tersebut, developer android dapat menggunakan interface dan class yang telah

disediakan Google API (package android.speech.tts) (Irawan, 2014).

1. Interface

Terdapat beberapa interface yang terdapat pada package

android.speech.tts, diantaranya:

a. SynthesisCallback

b. TextToSpeech.OnInitListener

c. TextToSpeech.OnUtteranceCompletedListener

12

2. Classes

Terdapat beberapa class yang terdapat pada package android.speech.tts,

diantaranya:

a. SynthesisRequest, berisi data yang dibutuhkan oleh mesin untuk

mensintesis ucapan,

b. TextToSpeech, mensintesis ucapan dari teks untuk diputar langsung

atau untuk membuat file suara,

c. TextToSpeech.Engine, konstanta dan nama parameter untuk

mengendalikan text-to-speech,

d. TextToSpeech.EngineInfo, informasi tentang terpasangnya mesin

text-to-speech,

e. TextToSpeechService, kelas abstrak dasar untuk implementasi mesin

TTS.

Untuk dapat memanfaatkan fitur Google Text To Speech API pada program

diperlukan beberapa langkah, diantaranya mengimpor class yang berhubungan

dengan text to speech, yaitu android.speech.tts.TextToSpeech;

Untuk menggunakan kelas TextToSpeech, perlu menginisialisasi sebuah objek

dari class TextToSpeech dan menentukan initListenere.

Private EditText write;

tts = new TextToSpeech(getApplicationContext(),

new TextToSpeech.OnInitListener() {

13

@Override

public void onInit(int status) {

}

}

);

Pada listener ini, harus menentukan properti untuk objek text to speech,

seperti bahasa, pitch dan lain sebagainya. Bahasa dapat diatur dengan memanggil

method setLanguage(), yaitu

tts.setLanguage(Locale.UK);

Method setLanguage mengambil objek lokal sebagai parameter. Berikut

contoh daftar dari beberapa objek lokal (tergantung masing-masing device):

US, CANADA_FRENCH, GERMANY, ITALY, JAPAN, CHINA.

Setelah mengatur bahasa, dapat memanggil method speak

tts.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);

Terlepas dari method speak, ada beberapa method lain yang disediakan pada

class text to speech yaitu addSpeech(String text, String filename), getLanguage(),

isSpeaking(), setPitch(floatpitch), setSpeechRate(float speechRate), shutdown()

dan stop().

14

Berikut Gambar 2.1 merupakan alur diagram proses Google Text to Speech

Gambar 2.1 Diagram blok sistem sintesis text-to-speech dan diagram blok sistem

text-to-speech klien/server

(a)

(b)

15

Pada Gamabr 2.1 dapat dilihat teks di konversi ke ucapan melalui sejumlah unit

pemrosesan. Teks masukan biasanya berisi tanda baca, singkatan, akronim dan

simbol tanpa kata. Pada unit normalisasi teks masukan semua teks kalimat akan

diubah menjadi teks yang hanya berisi urutan kata-kata tanpa disingkat. Sebagian

besar tanda baca berguna untuk menunjukkan keakuratan yang sesuai sehinga teks

normalisasi tanda baca digunakan sebagai masukkan pada ke unit prosody.

Singkatan dan akronim diubah menjadi urutan kata yang mungkin atau tidak

bergantung pada teks. Fungsi utama dari normalisasi teks adalah mengkonversi

simbol ke kata. Misalnya, angka, jumlah mata uang, tanggal, waktu dan alamat

email terdeteksi, diklasifikasikan dan kemudian dikonversi menjadi teks yang

bergantung pada posisi simbol dalam kalimat. Teks dari normalisasi dikirim pada

unit pronunciation sebagai awal analisa setiap kata untuk menentukan

representasi morfolosisnya. Kata-kata yang dihasilkan kemudian diubah menjadi

urutan fonem. Terdapat 3 aturan yang digunakan oleh unit pronunciation untuk

melakukan konversi diantaranya letter-to-sound, representasi statistik yang

mengubah urutan huruf ke urutan fonem berdasarkan bahasa yang ada dan kamus.

Kumpulan aturan ini akan membentuk database yang besar.

Fonem yang dihasilkan akan dikirim ke unit prosody bersama dengan tanda

baca yang diambil dari unit normalization. Unit prosody akan menghasilkan

infomasi timing dan pitch yang dibutuhkan untuk speech synthesis dari struktur

kalimat, tanda baca, kata-kata tertentu dan beberapa kalimat. Tanggal, waktu dan

mata uang adalah contoh bagian kalimat yang didefinisikan khusus, nada masing-

16

masing ditentukan dari seperangkat aturan model statistik yang dibuat untuk jenis

informasi tersebut. Ritme, atau durasi fonem, tanggal dan nomor telpon biasanya

berbeda satu sama lain. Kumpulan aturan atau model statistik ini juga

membutuhkan database cukup besar

Unit acoustic signal synthesis, menggabungkan pitch, durasi dan fonem dari

unit pronunciation dan unit prosody untuk menghasilkan signal akustik yang

baik. Ada beberapa metode dalam speech synthesize, yang pertama adalah formant

synthesize, merupakan pemodelan suara manusia dan fonem synthesize, untuk

menghasilkan kata yang diperlukan teknik synthesize berkualitas tinggi yang

digunakan secara luas adalah synthesize gabungan, dimana suara seorang artis

direkam untuk menghasilkan database, menentukan urutan unit yang digunakan

dan menggabungkannya sedemikian rupa sehingga durasi dan pitch dimodifikasi

untuk mendapatkan prosody yang diinginkan (Hillsboro and Sunnyvale, 2004).

2.1.5 Bahasa Pemograman

2.1.5.1 Bahasa Java

Program Android umumnya dibuat menggunakan bahasa Java. Setiap bahasa

pemrograman memiliki aturan-aturan tersebut saat menulis suatu program, maka

komputer tidak akan mampu memahaminya. Spesifikasi bahasa Java dan Java API

mendefinisikan standar baku pemograman Java.

API (application programning interface) memuat kelas dan antarmuka yang

telah didefinisikan untuk mengembangkan program Java. Spesifikasi bahasa Java

stabil, tetapi API masih terus berkembang.

17

Java merupakan bahasa pemograman yang tangguh dan terbukti handal pada

banyak aplikasi (Sianipar, 2013).

2.1.6 Sistem Operasi Android

2.1.6.1 Versi Android

Android telah mengalami sejumlah pembaruan sejak pertama kali dirilis. Rata-

rata, versi terbaru dari Android dirilis setiap enam bulan. Table 2.1 menunjukkan

beberapa jenis Android dan nama kodenya. Penamaan kode menggunakan nama

makanan dan huruf depannya urut sesuai abjad.

Tabel 2.1 Daftar Android

Versi Tanggal Rilis Kode

1.1 9 Februari 2009

1.5 30 April 2009 Cupcake

1.6 15 September 2009 Donut

2.0/2.1 26 Oktober 2009 Éclair

2.2 20 Mei 2010 Frozen Yoghurt(Froyo)

2.3 6 Desember 2010 Glingerbread

3.0 22 Februari 2011 Honeycomb

4.0 19 Oktober 2011 Ice Cream Sandwich

4.1 27 Juni 2012 Jelly Bean

4.2 29 Oktober 2012 Jelly Bean

4.3 24 Juli 2013 Jelly Bean

4.4 3 September 2013 Kitkat

5.0 25 Juli 2014 Lolipop

6.0 17 Agustus 2015 Marshmallow

7.0 1 Juli 2016 Nougat

18

Berikut beberapa jenis Android dan penjelasannya:

a. Cupcake

Android 1.5 (API Level 3) yang dikenal dengan nama kode Cupcake ini dirilis

pada April 2009. Api level 3 membawa perbaikan dari versi sebelumnya dan

tentu saja fitur baru. Misalnya, dukungan On-screen keyboard, video

recording, home screen widget, fitur auto pairing pada Bluetooth, Karnel

Linux versi 2.6.7 dan kemampuan memperbaikiki filesystem SD card yang

rusak.

b. Donut

Android 1.6 (Api level 4) yang dirilis pada Oktober 2009 ini merupakan rilis

minor dengan fitur utama dukungan teknologi CDMA, gesture, text-to-speech

engine dan fitur pencarian cepat yang memungkinkan anda mencari semua hal

seperti kontak, riwayat jelajah internet, bookmark dan lainnya.

c. Éclair

Android 2.1 (Api level 7) yang dirilis pada Januari 2010 ini mengusung fitur

baru seperti live wallpaper dan beberapa fitur baru seperti Android 2.0,

misalnya menggunakan banyak akun kontak cepat, Bluetooth 2.1 dan profil

Bluetooth baru yaitu Object Push Profile (OPP) dan Phone Book Access Profile

(OBAP).

d. Froyo

Android 2.2 (API level 8) dirilis pada Mei 2010. Fitur baru yang dibawa adalah

dukungan OpenGL ES 2.0, instalasi aplikasi penyimpanana eksternal (SD card)

19

dan Android Cloud to Device Messanging yang memungkinkan aplikasi

melakukan push messanging dan portable hostspot yang memungkinkan

piranti Android menjadi hostspot Wi-Fi untuk berbagia koneksi internet.

e. Gingerbread

Android 2.3 (API Level 9 dan 10) mrngudung beberapa fitur baru, antara lain

dukungan banyak kamera, Near Field Communicarion (NFC), download

manager service, dukungan terhadap sensor lain seperti giroskop dan

barometer.

f. Honeycomb

Andoid 2.3 (API Level 11) membawa perubahan besar terutama pada tampilan

UI yang berubah derastis supaya optimal untuk piranti layar besar seperti

tablet. Pada versi ini diperkenalkan fragment, action bar, sistem clipboard dan

kursor loader.

g. Ice Crem Sandwich

Andoid 4.0 (API Level 14) membawa perubahan besar terutama pada tampilan

UI Android 3.0 supaya cocok pada layar kecil sehingga memungkinkan

aplikasi anda tampak konsisten di tablet maupun ponsel. Fitur baru seperti

Android Beam dan Wi-Fi Direct juga ditambahkan.

h. JellyBean

Android 4.1 (API Level 16) adalah rilis minor yang membawa perbaikan

fusionalitas dan performa rendering User-Interface (UI). Versi 4.2(API Level

17) mengusung fitur baru seperti gesture typing dan dukungan multiuser di

20

piranti tablet. Versi 4.3 (API Level 18) membawa perbaikan berupa dukungan

Bluetooth low energy dan OpeGL ES 3.0. Beberapa fitur baru antara lain

dukungan terhadap Bahasa internasional dan penulisan teks dua arah (kiri

kekanan atau kanan ke kiri untuk bahasa-bahasa tertentu seperti bahasa Arab).

i. Kitket

Android 4.4 (API Level 19) ini mengusung sejumlah perbaikan dan fitur baru,

terutama dukungan teknologi Near Field Communication (NFC) melalui host

card emulation, pencetakan ke printer nirkabal, WebView dengan rendering

engine Chromium, dan dukungan yang lebih baik bagi piranti yang

menggunakan RAM rendah.

j. Lollipop

Di Android 5.0 (API Level 21) versi L yang merupakan ‘Lollipop’, Google

lebih memfokuskan pada sisi desain dan performa. Dari segi performa,

Android 5.0 sudah mensupport prosseor 64 bit dan juga Android 5.0 memiliki

runtime, grafis dan daya tahan baterai yang lebih baik dibanding Android versi

sebelumnya. Sebagai catatan bahwa dalam jangka waktu 3 tahun ini Google

hanya menerbitkan versi Android baru dengan perubahan kecil saja, yaitu pada

Android Ice Cream Sandwich hingga Android Kitkat.

k. Marshmallow

Android 6.0 (API Level 23) Marshmallow memiliki penguatan sistem

keamanan lebih baik dasri versi sebelumnya, sehingga pengguna bisa memilih

untuk menolak atau menerima permintaan akses keamanan dari aplikasi yang

21

dipasang ke perangkatnya. Versi ini membuat settingan aplikasi yang sudah

dipasang di ponsel tidak akan bisa sembarangan mengambil informasi lokasi

atau kamera, tanpa mendapatkan izin terlebih dahulu dari pengguna. Kelebihan

Android 6.0 Marshmallow juga memiliki fitur bernama Doze, yaitu sebuah

pengelola daya yang dipakai ponsel. Misalnya, jika ponsel sedang tidak

digunakan sama sekali, Doze akan otomatis mematikan aplikasi yang aktif.

Selain itu, memiliki fitur Android Pay. Dengan adanya fitur ini, para pengguna

akan dengan mudah melakukan pembayaran baik di aplikasi dengan

menggunakan ponsel saja.

l. Nougat

Versi Android 7.0 (API Level 24) Nougat umumkan pada tanggal 1 Juli 2016,

dan diluncurkan pada 23 Agustus 2016. Android Nougat menyediakan banyak

fitur baru yang menarik bagi pengempang Android. Fitur-fitur tersebut

meliputi:

- Dukungan multi-window yang memungkinkan pengguna membuka dua

aplikasi di layar sekaligus,

- Notification yang telah diperbaharui. Sistem notifikasi yang didesain ulang di

Android Nougat mencakup fitur Direct Reply (Balasan langsung) dari UI

notifikasi. Selain itu juga terdapat fitur bundle notifikasi yang dapat

mengelompokkan notifikasi-notifikasi tertentu,

22

- Data saver. Fitur ini adalah layanan sistem baru yang membantu mengurangi

pengguna data seluler oleh aplikasi. Aplikasi ini memungkinkan pengguna

memberi kontrol bagaimana apliksi menggunakan data seluler.

Selain itu, Android Nougat juga membawa banyak perangkat tambahan

yang menarik bagi pengembang aplikasi seperti fitur konfigurasi keamanan

jaringan baru, Doze on the Go, pengesahan kunci, pengaturan API cepat yang

baru, dukungan multi-lokal, API ICU4J, penambahan WebView, akses ke Java

8 fitur bahasa, akses direktori scoped, API penunjuk kustom, dukungan

platform VR, file virtual dan pengoptimalan prosesan latar belakang.

2.1.6.2 Komponen Aplikasi Android

Aplikasi Android ditulis dengan bahasa pemograman java. Semua file kode

intermediate dan asset disatukan dalam satu paket berupa file berekstensi. APK,

sebuah file yang dapat didistribusi. Tiap file APK adalah sebuah aplikasi tunggal.

Komponen aplikasi Android terdiri dari beberapa jenis, antara lain (Juhara, 2016):

a) Activity

Activity adalah istilah yang digunakan dalam pemograman Android untuk

mengacu pada satuan interaksi dengan penguna melalui antarmuka grafis

(graphiacal user- interface, GUI). Tiap aplikasi dapat terdiri dari nol atau lebih

activity.

23

b) Intent

Intent adalah istilah yang digunakan dalam pemograman Android untuk

mengacu pada mekanisme berbagai pesan pemberitahuan atau bertukar data

Activity atau untuk menjalankan aplikasi lain.

c) Service

Service adalah komponen aplikasi yang berjalan di belakang layar tanpa

user- interface untuk menyediakan layanan seperti mengecek RSS feed secara

kontinu atau memainkan musik. Service tetap bejalan meski Activity yang

mengendalikannya telah berhenti. Media player adalah sebuah contoh aplikasi

yang menggunakan service.

d) Content Provider

Content provider membuat suatu aplikasi dapat berbagi sejumlah data

tertentu kepada aplikasi lain. Jika membutuhkan nama-nama kontak, aplikasi

anda tinggal meminta data tersebut.

e) Broadcast Receiver

Broadcast Receiver adalah komponen yang memantau, menerima, dan

beraksi terhadap pesan yang disebarkan, baik sistem maupun aplikasi lain.

Misalnya, ketika baterai lemah, Android akan mengirim pesan “baterai lemah”

kepada semua broadcast receiver yang ingin diberitahu pesan ini. Untuk

menggunakan broadcast receiver, pada dasarnya perlu membuat turunan tipe

broadcast receiver, melengkapi method onReceive(), dan mendaftrkan di

AndroidMsnifest.xml atau dengan method Content.registerReceiver(). Intance

24

broadcast receiver hanya valid selama pemanggilan method onRecive()

sehingga tidak boleh menyimpan referensi ke instance ini.

2.1.6.3 Database SQLite

Android menyediakan sistem manajemen database SQLite. Berikut beberapa

alasan menggunakan SQLite (Juhara, 2016):

a) Sistem database yang ringan

SQLite adalah sistem manajemen database yang ringan yang cocok

diterapkan pada perangkat dengan sumber daya terbatas seperti ponsel. SQLite

dirancang sebagai pustaka yang berdiri sendiri dengan ketergantungan pada

pustaka lain seminimal mungkin.

b) Tidak menggunakan server

SQLite tidak mengadopsi model client-server. SQLite disediakan sebagai

pustaka yang menyediakan funsionalitas pengelolaan database. Melalui

pustaka SQLite, aplikasi dapat langsung mengelola database di file tanpa

melalui server. Keuntungannya, langkah setup akan lebih mudah. Tidak akan

menemukan kerumitan konfigurasi server seperti pada sistem manjemen

database lain. Kekurangannya, karena dikelola sendiri oleh aplikasi, integritas

database sangat terpengaruh pada praktik pemograman yang baik.

c) Tanpa aturan tipe data ketat

SQLite adalah sistem manajemen database yang mengadopsi aturan tipe

data yang longgar (typeless). Meskipun mendeklarasikan kolom sebuah table

bertipe integer, dapat diizinkan memasukkan data bertipe lain.

25

d) Integritas referensi tidak dikelola

SQLite tidak mengelola integritas referensi. Tidak ada batasan FEREIGN

KEY. Anda dapat mengacu sebuah record pada kolom tabel lain meskipun tabel

tersebut sudah tidak lagi valid. Lalu bagaimana mengelola integritas refernsi?

Anda dapat mengelolanya sendiri menggunakan TRIGGER.

2.1.7 Software Yang Digunakan

2.1.7.1 Android Studio

Android studio adalah IDE (Integrated Development Envirinment) resmi untuk

pengembangan aplikasi Android dan bersifat open source atau gartis. Peluncuran

Android Studio ini diumumkan oleh Google pada 16 Mei 2013 pada event Google

I/O Conference untuk tahun 2013. Sejak itu, Android Studio menggantikan

Eclipse sebagai IDE resmi untuk mengembangkan aplikasi Android. Android

studio sendiri dikembangkan berdasarkan Intelli JIDEA yang mirip dengan

Eclipse disertai dengan ADT plugin (Android Development Tools). Android

studio memiliki fitur (Juansyah, 2015):

a. Projek berbasis pada Gradle Build

b. Refactory dan pembenahan bug yang cepat

c. Tool baru yang bernama “Lint” diklaim dapat memonitor kecepatan,

kegunaanm serta kompetibelitas apkiasi dengan cepat

d. Menfukung Proguard And App-sinning untuk keamanan

e. Memiliki GUI apliasi android lebih mudah

f. Dukungan C++ dan NDK

26

g. Didukung oleh Google Cloud Platfrom untuk setiap aplikasi yang

dikembangkan

Struktur folder Project Android Studio dapat dilihat pada gambar dibawah:

1. Manifest

Pada folder pertama yaitu manifest, yang berisi file AndroidManifest.xml

File ini berisi informasi tentang package (paket) pada projek, yang didalamnya

terdapat komponen Aplikasi seperti, Activity, Service, User Permission,

Content Provider dan lain-lain.

2. Java

Pada folder kedua yaitu Java, yang terdapat nama package berisi class

Activity java, biasanya berisi:

- package sebagai pengelompokkan beberapa file class Activity java

- import yang digunakan untuk mengimpot library untuk komponen

Aplikasi

- public class MainActivity extends AppCompactActivity dimana, public

class adalah modifier yang digunakan dalam pemograman java untuk

mneyatakan bahwa class/method/attribute tersebut dapat diakses oleh

kelas lain. Main Activity adalah nama dari kelas tersebut dan extends

AppCompatActivity menyatakan bahwa Class Main Activity akan

mewariskan sifat dari library yang bernama AppCompactActivity, yang

merupakan sifat dari program java yaitu inheritance (pewarisan).

27

- Protected void, protected adalah modifiler yang digunakan dalam

pemograman java untuk menyatakan bahwa kelas tersebut dapat diakses

dari kelas turunannya. Sedangkan void adalah method yang digunakan

dalam pemograman java untuk menyatakan bahwa, tipe data tersebut tidak

mempunyai nilai balik (return value).

- onCreate, fungsi ini akan dipanggil ketika sebuah class baru dibuat, untuk

menampilkan Activity yang di olah di (Bundle savedInstanceState) dan

akan menampilkan sebuah halaman user interface pada layout yang

bernama activity_main yang belokasi di R.layout.activity_main.

3. Res

Res berisi semua sumber daya untuk menyimpan file-file gambar, menu,

file layout sebagai tempat membuat User Interface (antarmuka), mipmap

untuk menyimpan file icon launcher dan values yang digunakan untuk

menyimpan file-file seperti string.xml, styles.xml dan color.xml

4. Gradle

Gradle adalah buid tools yang digunakan pada Android Studio, untuk men

coplile-run project Aplikasi. Pada build.gradle digunakan untuk

mengidentifikasi versi OS SDK, library yang akan digunakan.

28

BAB III

METODOLOGI PENELITIAN

3.1 Tahapan Penelitian

Gambar 3.1Tahapan Penelitian

Berdasarkan Gambar 3.1 secara umum tahapan penelitian dijelaskan sebagai

berikut:

a. Studi literatur terkait, pada tahap ini dilakukan kajian terhadap berbagai

literatur yang dapat menujang perancangan sistem text to speech.

b. Analisis kebutuhan perangkat, tahap ini dilakukan untuk mengetahui

kebutuhan dalam perancangan sistem.

c. Rancangan sistem, tahap ini dilakukan untuk membuat rancangan proses serta

database yang diperlukan.

d. Implementasi sistem, tahap ini merupakan tahap penerjemah rancangan sistem

serta penerapan perangkat lunak yang dibagun.

29

e. Pengujian sistem, tahap ini bertujuan untuk menemukan kesalahan-kesalahan

dalam memenuhi kriteria perancangan perangkat lunak.

f. Kesimpulan penelitian, merupahan hasil akhir yang didapat dalam sistem yang

dibuat

3.2 Waktu dan Lokasi Penelitian

Penelitian ini dilaksanakan sejak disetujuinya proposal penelitian pada bulan

Januari 2017 sampai bulan Oktober 2017. Lokasi penelitian dilakukan di

Laboratorium Kecerdasan Buatan Departemen Teknik Informatika UNHAS

3.3 Studi Literatur

Pada tahap ini dilakukan kajian terhadap berbagai literatur yang dapat

menunjang perancangan proyek tugas akhir ini seperti mengkaji beberapa jurnal

yang membahas mengenai sistem text-to-speech dan sistem penerimaan pesan

Telegram, Line dan Whatsapp.

3.4 Analisis Kebutuhan Perangkat

Pada penelitian ini perangkat yang dibutuhkan untuk mengimplementasikan

sistem pembaca pesan meliputi software dan hardware dapat dilihat sebagai

berikut:

3.4.1 Software

Software atau perangkat lunak yang digunakan dalam pembangunan sistem ini

antara lain:

30

1. Pada Desktop

Spesifikasi software yang digunakan antara lain:

a. Sistem Operasi Windows 10 pro

b. Android Studio 2.2.3

c. Android SDK (Software Development Kit) Manager,

2. Pada Smatphone

Software yang digunakan adalah adalah sistem operasi Android versi 6.0

Marshmallow.

Spesifikasi minimum perangkat lunak Smatphone yang dibutuhkan untuk dapat

menjalankan aplikasi ini adalah menggunakan sistem operasi Android versi 5.0

Lollipop.

3.4.2 Hardware

Hardware atau perangkat keras yang dibutuhkan dalam mengimplementasikan

sistem yang akan dibuat antara lain:

1. Pada Desktop

Spesifikasi desktop yang digunakan antara lain:

a. Leptop Lenovo,

b. Processor: Intel(R)Core(TM)i5-4200U CPU @ 1.60GHz(4 CPUs),

~2.3GHz,

c. RAM 4GB,

d. Hardisk 500GB.

31

2. Pada Smartphone

Spesifikasi smartphone yang digunakan antara lain:

a. ASUS Zenfine Selfie,

b. Processor: Qualcomm Snapdragon 615 octa core 1,7 GHz,

c. RAM 3GB,

d. Media penyimpanan internal 10GB,

e. Media penyimpanan eksternal 16GB,

f. Koneksi internet.

Spesifikasi minimum perangkat keras Smartphone yang dibutuhkan untuk

dapat menjalankan aplikasi ini adalah:

a. Processor600MHz,

b. RAM 512 MB,

c. Media penyimpanan internal free space 10MB dan data voice Google

TTS 10MB,

d. Media penyimpanan eksternal 1 GB,

e. Koneksi internet.

3.5 Rancangan Sistem

Rancangan sistem bertujuan untuk memberikan gambaran perancangan sistem

yang akan dibangun dan dikembangkan, serta untuk memahami alur proses dalam

sistem. Rancangan sistem yang dilakukan pada sistem meliputi:

32

3.5.1 Rancangan Proses

Tahap rancangan proses untuk mempresentasikan setiap proses aliran data di

dalam suatu sistem akan ditunjukkan pada Gambar 3.2 berikut:

Gambar 3.2 Flowchart Sistem Secara Umum

Berdarkan Gambar 3.2 Flowchart sistem secara umum dijelaskan sebagai

berikut:

1) Inisialisasi Notifikasi dan Text to Speech

2) Pada tahap ini sebelum aplikasi dapat mengkonversi teks menjadi suara,

diperlukan inisialisasi. Inisialisasi pada tahap ini ada dua macam yaitu

33

inisialisasi Notification Listener Service dan Text to Speech Google API.

Aplikasi ini membutuhkan izin dari user untuk menjalankan Notification

Listener Service yang biasanya diakses pada "Settings" -> "Security" ->

"Notification access" di Smartphone.

Gambar 3.3 Inisialisasi Notification Listener Service

Gambar 3.3 merupakan source code untuk mendapatkan izin menerapkan

Notification Listener Service yang ditempatkan pada file AndroidManifest.

Inisialisasi Notification Listener Service merupakan proses yang berjalan di

belakang (background thread) berfungsi untuk mengambil segala informasi dari

pemberitahuan atau notifikasi yang masuk ke smartphone Android. Inisialisasi

ini dilakukan ketika aplikasi pertama kali dijalankan.

Pada saat Notification Listener Service terinisialisasi, selanjutnya sistem

melakukan inisialisasi Text to Speech (TTS).

<service android:name="NotificationService"

android:label="@string/app_name"

android:permission="android.permission.BIND_NOTIFICATION_LISTENER_S

ERVICE">

<intent-filter>

<action

android:name="android.service.notification.NotificationListenerServ

ice" />

</intent-filter>

</service>

public class NotificationService extends NotificationListenerService

implements TextToSpeech.OnInitListener

34

Gambar 3.4 Inisialisasi TTS

Gambar 3.4 source code untuk menerapkan Text to Speech ke dalam class

NotificationService dengan turunan dari NotificationListenerService. Class

NotificationService akan dibahas pada tahap selanjutnya. Kemudian mengatur

bahasa yang digunakan:

tts.setLanguage(new Locale("id","ID"));

Namun inisialisasi ini membutuhkan voice data yang diunduh dari Google

TTS. Saat inisialisasi berhasil sistem akan mengatur bahasa yang digunakan

bahasa Indonesia.

3) Notifikasi Masuk

Pada Gambar 3.4 class NotificationService digunakan untuk membaca

pemberitahuan pada StatusBar. Dengan menggunakan method

onNotificationPosted dari NotificationListenerService memungkinkan

pemberitahuan yang di posting pada StatusBar akan dijadikan sebagai objek

dengan StatusBarNotification. Kemudian objek yang diterima akan

diproses pada tahap selanjutnya. Ini merupakan tahap untuk input pesan yang

diambil dari notifikasi sosial media seperti Telegram, Line ataupun WhatsApp.

4) Pesan dari Notifikasi

Tahap ini merupakan proses dari onNotificationPosted yang

memungkinkan objek yang telah diterima diproses dengan memisahkan string

menjadi bagian-bagian pesan yang terdiri dari pack, tittle dan text. Proses

35

pertama yang dilakukan adalah mendapatkan pack atau asal aplikasi dengan

method getPackageName, kemudian mendapatkan tittle atau judul dengan nama

variabel “android.title” dan mendapatkan text dengan nama varibel

“android.text”.

Gambar 3.5 Objek ke string

Jika pack yang diterima bernilai "org.telegram.messenger",

"jp.naver.line.android" dan "com.whatsapp". Kemudian

membuat intent baru menggunakan intent filter “Msg” untuk mengirim nilai

yang diperoleh sebagai pesan Broadcast menggunakan method:

LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);

Pesan Broadcast yang diterima yaitu string pack, tittle, text dan juga date and

time. Sting Date and time didapatkan dari hasil ketika pesan ditampilkan pada

StatusBar sesuai waktu menerima pesan menggunakan method

SimpleDateFormat("dd-MM-yyyy HH:mm:ss"). Kemudian nilai dari

sendBroadcast (msgrcv) akan dikirim dan diterima sesuai fragment yang

dibuat.

String pack = sbn.getPackageName();

Bundle extras = sbn.getNotification().extras;

String title = extras.getString("android.title");

String text =

extras.getCharSequence("android.text").toString();

36

5) Tambahkan ke Database Pesan

Ketika pack yang diterima sesuai dengan nilai yang ditentukan maka pack,

title, text, date dan time pesan akan disimpan kedalam table chat yang berada

pada database SQLite. Pesan yang tersimpan diperlukan untuk mendukung

fasilitas pengolahan data ataupun validasi hasil konversi teks ke ucapan.

6) Menampilkan Pesan

Pesan yang telah disimpan pada database akan ditampikan pada menu

utama aplikasi.

7) Normalisasi Pesan

Pada tahap ini akan dilakukan proses pemecahan kalimat kemudian

menggabungkan kembali menjadi satu kalimat dengan membuat fungsi

parseSingkatan. Flowchart parsing kata dapat dilihat pada Gambar 3.6:

37

Gambar 3.6 Parsing Kalimat

Berikut penjelasan Gambar.3.6 Parsing Kalimat:

- Memecah kalimat

Pada tahap ini string isi pesan yang telah diterima dari proses sebelumnya

akan di pecah menjadi beberapa kata dengan karakter spasi sebagai

pembatas. Dengan fungsi words.split("\\s+"). Sebagai contoh

teks pesan “Ndk/ ku/ lupa/ jih/ cmn/ nanti/ salah/ org/ ”.

- Mengambil satu kata

Tahap ini akan memproses kata pertama yaitu “Ndk” yang diterima dari

pemecahan pada tahap sebelumnya sampai dengan kata terakhir pada

kalimat yang didapatkan.

38

- Cek kata singkatan

Tahap cek kata singkatan ini akan memproses kata pertama kemudian

membandingkan kata tersebut dengan yang ada pada database tabel

singkatan. Jika kata sama dengan kata yang terdapat pada tabel singkatan

maka sistem akan melakukan tahap konversi kepanjangan. Namun jika kata

tidak sama dengan kata yang terdapat dalam tabel singkatan maka sistem

akan mengecek apakah masih ada kata saat proses pemecahan.

- Konversi kepanjangan

Tahap ini merupakan tahap kondisi dimana jika ditemukan kata yang sama

dengan kata yang berada pada database tabel singkatan. Maka kata

singkatan tersebut akan dikonversi berdasarkan kepanjangan yang

dimaksud. Sebagai contoh kata singkatan “org” sama dengan kata singkatan

yang terdapat dalam database ”org” dengan kepanjangan kata “orang”.

Sehingga sistem akan mengkonversi “org” menjadi “orang”.

- Apakah masih terdapat kata?

Tahap ini merupakan tahap perulangan jika masih ada kata dalam kalimat

yang telah dipecah pada tahap memecah kalimat maka sistem akan kembali

ketahap mengambil satu kata sesuai banyaknya panjang kata yang telah

dipecah.

- Gabungkan kata

Proses pada tahap ini adalah menggabungkan kembali semua kata dari

tahap-tahap sebelumnya sehingga membuat kalimat yang utuh.

39

8) Suarakan pesan

Gambar 3.6 Output suara setelah normalisasi

Pada tahap ini isi teks yang telah melalui proses normalisasi pada pesan yang

diterima, selanjutnya dikonversi menjadi suara oleh Text to Speech dengan

menyebutkan [Pengirim], [title] atau yang mengirimkan dan [text] yang

merupakan isi pesan masuk. API Google TTS memungkinkan untuk

mengatur antrian pemrosesan konversi teks menjadi suara. Terdapat dua

jenis pengaturan antrian yaitu QUEUE_ADD dimana jenis antrian ini akan

menyelesaikan proses konversi satu persatu sebelum memproses pesan baru

yang masuk pada antrian. Selanjutnya adalah antrian QUEUE_FLUSH

dimana jenis antrian ini akan memproses pesan baru pada antrian dan

menghentikan proses konversi pesan yang sedang berjalan.

3.5.2 Rancangan Fitur

Pada rancangan fitur digunakan Method setupViewPager untuk menampilkan

fragment kedalam activity sehingga satu tampilan akan menampilkan tiga buah

tab untuk melihat pesan dari Telegram, Line dan WhatsApp.

ParseSingkatan parser = new ParseSingkatan(context);

text = parser.parseSingkatan(text);

text = parser.parseDatabase(text);

tts.speak("Pengirim,"+title+".

"+text,TextToSpeech.QUEUE_ADD,null);

40

Gambar 3.7 Fragment dalam activity

Pada class ChatAdapter extends android.support.v7.widget.RecyclerView

memungkinkan mengatur tata letak ketika menaruh package, tittle, text, date

and time serta dapat menampung lebih banyak data.

Adapun beberapa fitur pada activity ini diantaranya:

1) Menu Input Singkatan

Input singkatan dibuat untuk membetulkan output suara yang sesuai dengan

tata bahasa yang benar. Input Singkatan menggunakan method

onOptionsItemSelected yang terdapat pada options menu kemudian

ditampilkan menggunakan AlertDialog yang didalamnya terdapat dua Edit

Text untuk proses input. Proses input singkatan dimulai dari input kata

singkatan, kemudian input kata yang dimaksud. Sebagai contoh singkatan

“Rmh” dan kepanjangan “rumah”. Setelah proses input selesai user dapat

menekan tombol simpan dan tidak. Jika pilihan simpan maka singkatan dan

juga kepanjangan akan tersimpan kedalam database pada tabel singkatan dapat

dilihat pada Gambar 3.8:

private void setupViewPager(ViewPager viewPager) {

ViewPagerAdapter adapter = new

ViewPagerAdapter(getSupportFragmentManager());

adapter.addFragment(new Telegram(), "Telegram");

adapter.addFragment(new Line(), "Line");

adapter.addFragment(new Whatsapp(), "Whatsapp");

viewPager.setAdapter(adapter);

}

41

Gambar 3.8 Flowchart Input Singkatan

2) Hapus Pesan

Hapus pesan dibuat untuk memudahkan dalam manajemen pesan ketika data

yang diterima terlalu banyak. Menghapus pesan terbagi menjadi dua pilihan

diantaranya menghapus berdasarkan Id dan pack pada tabel Chat. Menghapus

berdasarkan Id memungkinkan menghapus satu pesan, dengan menekan lama

pesan yang ingin dihapus kemudian menekan pilihan “YES” pada AlertDialog

yang muncul maka pesan telah terhapus. Menghapus berdasarkan pack dari

Telegram, Line dan WhatsApp. Pilihan menghapus ini terdapat pada options

menu kemudian menekan pilihan “YES” ketika AlertDialog tampil.

42

Gambar 3.9 Option Menu

3) Suarakan

Tahap ini memungkinkan user dapat mendengarkan kembali pesan yang

diterima. Pilihan ini terdapat pada class ChatAdapter yang akan ditampilkan terus

menerus sebanyak jumlah ListChat yang diterima dengan icon button voice. Ketika

tombol ditekan method setOnClickListener diaktifkan, maka event onClick akan

menjalankan fungsi text to speech pada pesan yang dipilih.

3.5.3 Rancangan Basis Data

Rancangan basis data pada sistem diberi nama autospeech.db dan terdiri dari dua

tabel. Tabel 3.1 dibuat untuk mendapatkan package, title, text dan datetime ketika

menerima pesan serta berfungsi sebagai pengelolah dalam memanajemen pesan

nantinya. Tabel 3.2 dibuat untuk menyimpan kata singkatan dan kepanjangan yang

nantinya digunakan sebagai pembanding dan hasil keluaran. Sistem database yang

digunakan adalah SQLite dengan menggunakan turunan dari SQLiteAssetHelper

untuk mendapatkan akses penyimpanan database baca dan tulis ke database yang

memungkinkan dalam manipulasi data seperti mencari, menambah, mengubah atau

43

menghapus satu atau lebih record pada table. SQLite ini telah tersedia built-in pada

Android SDK.

Berikut adalah tabel yang digunakan dalam database:

Tabel 3.1 Tabel Chat

Field Type Atribut Fungsi

id Integer Primary key, auto

increment

Sebagai indeks

untuk pengurutan

pesan

Pengirim Text - Identitas pengirim

pesan

Pesan Text - Isi Pesan

Pack Text Nama package asal

aplikasi

DateTime Text - Waktu penerimaan

Tabel 3.2 Tabel Singkatan

Field Type Atribut Fungsi

Id Integer Primary key,

auto increment

Sebagai indeks

untuk pengurutan

Word Text -

Sebagai masukan

kata

Meaning Text - Kata yang nantinya

diucapkan

3.6 Validasi Penelitian

Pengujian validasi digunakan untuk mengetahui apakah sistem yang dibangun

sudah benar sesuai dengan yang dibutuhkan. Item-item yang telah dirumuskan

dalam daftar kebutuhan dan merupakan hasil analisis kebutuhan akan menjadi

acuan untuk melakukan pengujian validasi. Pengujian pertama menggunakan

44

metode pengujian Black Box untuk mengetahui kerja beberapa item dan

pengujian keberhasilan sesuai dengan keluaran yang nantinya diharapkan serta

pengujian tidak berhasil dengan keluaran yang tidak diharapkan. Tingkat

keberhasilan sistem dapat dinyatakan dalam persamaan 1 sebagai berikut:

𝑨𝒌𝒖𝒓𝒂𝒔𝒊 =𝑗𝑢𝑚𝑙𝑎ℎ 𝑝𝑒𝑛𝑔𝑢𝑗𝑖𝑎𝑛 𝑏𝑒𝑟ℎ𝑎𝑠𝑖𝑙

𝑡𝑜𝑡𝑎𝑙 𝑝𝑒𝑛𝑔𝑢𝑗𝑖𝑎𝑛× 100% (1)

45

BAB IV

IMPLEMENTASI DAN PEMBAHASAN

4.1 Gambaran Umum Aplikasi

Dalam berkirim pesan, pengguna biasanya mengalami berberapa hambatan

saat akan membaca pesan yang masuk. Beberapa hambatannya yaitu

berkendaraan, tunanetra dan terbatasan aktivitas jarak pengguna dengan ponsel.

Aplikasi mobile yang diintegrasikan dengan penggunaan Text to Speech dapat

menjadi solusi alternatif bagi pengguna yang ingin melihat atau mendengarkan

pesan yang disampaikan kepadanya tanpa harus menggangu aktifitas yang sedang

dikerjakan. Keunggulan teknologi Text to Speech yaitu mengubah teks menjadi

ucapan. Data-data yang diambil berupa teks pesan dari pemberitahuan yang

diterima dari pemberitahuan pada aplikasi Telegram, Line dan WhatsApp. Selain

itu aplikasi ini dilengkapi dengan fitur manajemen pesan seperti menghapus dan

mendengarkan kembali pesan yang telah diterima serta memasukkan singkatan

untuk menghasilkan keluaran yang baik.

4.2 Implementasi Sistem

Tahap implementasi sistem merupakan tahap penerjemahan rancangan

berdasarkan hasil analisis ke dalam suatu bahasa pemograman tertentu serta

penerapan perangkat lunak yang dibangun pada lingkungan yang sesungguhnya.

46

4.2.1 Implementasi Antarmuka

Implementasi antarmuka dilakukan dengan sebuah layout berekstensi .xml.

berikut adalah implementasi dari setiap layout yang terdapat pada aplikasi

Gambar 4.1 layout fragment Telegram

47

Gambar 4.2 layout fragment Line dan WhatsApp

Gambar 4.1 dan gambar 4.2 merupakan antarmuka pada aplikasi saat

pengguna menjalankan aplikasi. Dalam satu tampilan terdapat tiga tabLayout

yang dibagi menjadi fragment halamam Telegram, fragment halaman Line dan

fragment halaman WhatsApp sehingga tampilan pada layout activity menjadi lebih

sederhana.

Halaman antarmuka ini terdapat fitur action bar dan options menu. Action

bar adalah elemen UI yang terletak di layar bagian kanan atas sedangkan options

menu ditampilkan ketika pengguna menekan tombol atau ikon menu untuk

48

menampilkan perintah-perintah umum yang tersedia. Berikut Gambar 4.3 untuk

menampilkan option menu:

Gambar 4.3 Options menu

Gambar 4.3 menampilkan beberapa pilihan dalam mengelola pesan diantranya,

- Tambah singkatan yang merupakan menu untuk input singkatan dan input

kepanjangan kata yang nantinya sebagai output ucapan yang benar. Ketika

memilih option tambah singkatan Alert Dialog akan ditampilkan yang di

dalamnya terdapat dua edittext untuk melakukan input kata singkatan dan

kepanjangan kata yang dimaksud serta dua pilihan simpan untuk menyimpan

49

input singkatan dan kepanjangan dan tidak untuk mebatalkan pilihan. Gambar

4.4 merupakan implementasi dari tambah singkatan.

Gambar 4 4 Alert Dialog tambah singkatan

- hapus pesan WhatsApp, Telegram, Line merupakan pilihan untuk menghapus

seluruh pesan berdasarkan package yang dipilih dengan menekan tombol

pilihan “YES” untuk menghapus dan tombol pilihan “NO” untuk

membatalkan yang muncul sebagai alert dialog pada layar aplikasi

50

Gambar 4.5 Menghapus berdasarkan package

Gambar 4 6 Penerimaan Pesan

Ketika mendapatkan pemberitahuan pesan masuk maka sistem akan

mengkonversi teks isi pesan yang diterima menjadi ucapan, kemudian activity

akan menerima (BroadcastReceiver) dari sendBroadcast sehingga membuat

51

pesan yang diterima ditampilkan secara real time pada tiap fragment yang dituju.

Gambar 4.6 menunjukkan pesan baru telah diterima dari package Line, tittle

(pengirim) dan text (isi pesan). Selanjutnya sistem text to speech menerjemahkan

isi pesan tersebut menjadi suara [pe-ngi-rim di-la se-la-mat pa-gi], kemudian

pesan secara real time akan tampil dengan nama pengirim “dila”, isi pesan

“selamat pagi” dan waktu terima “15-10-2017 15:20:58”

Pesan yang diterima akan tersimpan ke dalam database pada tabel Chat

kemudian ditampilkan pada setiap fragment Telegram, fragment Line dan

fragment WhatsApp. Setiap pesan yang ditampilkan dapat didengarkan kembali

ketika gambar tombol suara ditekan dan apabila pesan ditekan lama akan

menampilkan menu popup peringatan untuk memilih menghapus pesan atau tidak.

4.3 Pengujian Sistem

Pengujian sistem merupakan hal terpenting yang bertujuan untuk mengetahui

tercapai atau tidaknya tujuan dibuatnya aplikasi, menemukan kesalahan-kesalahan

atau kekurangan-kekurangan pada perangkat lunak yang dibuat dalam memenuhi

kriteria yang sesuai dengan tuiuan perancangan perangkat lunak tersebut.

4.3.1 Rencana Pengujian

Pengujian dilakukan dengan menguji setiap view, service dan text to speech.

Pengujian ini dilakukan secara Black Box, yaitu dilakukan dengan memperhatikan

masukan ke sistem dan keluaran dari sistem. Rencana pengujian yang dilakukan

terbagi dua yaitu pengujian fitur dan pengujian membaca pesan yang diterima.

Rencana pengujian fitur aplikasi ini dapat dilihat pada Tabel 4.1

52

Tabel 4.1 Rencana Pengujian fitur Aplikasi

No Fitur yang di uji Detail Pengujian Jenis Uji

1 Service Menjalankan tugas aplikasi

yang bekerja di belakang layar

Black Box

Menerima pesan Telegram,

Line, & WhatsApp

2 Text To Speech Menkoversi teks ke ucapan

dari pesan yang diterima

Black Box

Mendengarkan pesan yang

diterima

3 View Message Menampilkan pesan yang telah

diterima

Black Box

Menampilkan pesan

perhalaman

4 Sound Menekan tombol untuk

menjalankan fungsi text to

speech

Black Box

5 Delete Menghapus pesan berdasarkan

beberapa pilihan

Black Box

Menampilkan peringatan

menghapus atau tidak

6 Input Singkatan Menampilkan dialog input

singkatan dan kepanjangan

Black Box

Memasukkan ke dalam

database

4.1.1 Kasus dan Hasil Pengujian

Berdasarkan rencana pengujian pada Aplikasi Pembaca Pesan berbasis mobile

yang mengimplementasikan text to speech yang dapat dilihat pada Tabel 4.2 dan

Tabel 4.3 sebagai berikut:

53

Tabel 4.2 Hasil Pengujian Fitur

Kasus dan Hasil Uji (Data Normal)

Aksi/Data

Masukan

Yang

Diharapkan

Pengamatan Kesimpulan

Mengaktifkan

Pengaturan

Notification

Acces pada

smatphone

Menerima pesan

dari Telegram,

Line dan

WhatsApp tanpa

membuka

Aplikasi Pembaca

Pesan

Aplikasi

menerima pesan

dari Telegram,

Line dan

WhatsApp tanpa

membuka

Aplikasi Pembaca

Pesan

[ √ ] Diterima

[ ] Ditolak

Mendownload

voice suara

Bahasa

Indonesia pada

Google Text To

Speech

Menerima pesan

notification dari

Telegram, Line

dan WhatsApp

kemudian

mengubah teks

pesan menjadi

ucapan

Aplikasi

menerima pesan

notification dari

Telegram, Line

dan WhatsApp

kemudian

mengubah teks

pesan menjadi

ucapan

[ √ ] Diterima

[ ] Ditolak

View Message

ketika membuka

Aplikasi

Pembaca Pesan

Menampilkan

pesan yang

diterima dari

Telegram, Line

dan WhatsApp

Aplikasi

menampilkan

pesan yang

diterima dari

Telegram, Line

dan WhatsApp

[ √ ] Diterima

[ ] Ditolak

Menekan

tombol Sound

pada tiap pesan

yang diterima

Pesan teks

dikonversi

menjadi ucapan

berdasarkan teks

pilihan pesan

Aplikasi

menkonversi teks

pesan berdasarkan

teks pesan yang

dipilih

[ √ ] Diterima

[ ] Ditolak

54

Lanjutan Tabel 4.2 Hasil Pengujian Fitur

Kasus dan Hasil Uji(Data Normal)

Aksi/Data

Masukkan

Yang

Diharapkan

Pengamatan Kesimpulan

Delete Pesan Memilih pesan

yang akan

dihapus

berdasarkan

beberapa pilihan

hapus

Aplikasi memilih

pesan yang akan

dihapus

berdasarkan

beberapa pilihan

hapus

[ √ ] Diterima

[ ] Ditolak

Input Singkatan Memasukkan kata

singkatan dan

kepanjangan pada

dialog yang

ditempilkan dan

mendapatkan kata

dari database

Aplikasi dapat

memasukkan kata

singkatan dan

kepanjangan pada

dialog serta

mendapatkan kata

dari database

[ √ ] Diterima

[ ] Ditolak

55

Tabel 4.3 Hasil Membaca Pesan

No Input Output Line Output Telegram Output WhatsApp Output yang

Diharapkan

Keterangan

1 Artikel ini

diterjemahkan

menggunakan

perangkat lunak

penerjemah

otomatis bukan

penerjemah

manusia.

[Ar-ti-kel i-ni di-ter-

je-mah-kan meng-

gu-na-kan pe-rang-

kat lu-nak pe-ner-je-

mah o-to-ma-tis bu-

kan pe-ner-je-mah

ma-nu-si-a.]

[Ar-ti-kel i-ni di-ter-

je-mah-kan meng-

gu-na-kan pe-rang-

kat lu-nak pe-ner-je-

mah o-to-ma-tis bu-

kan pe-ner-je-mah

ma-nu-si-a.]

[Ar-ti-kel i-ni di-ter-

je-mah-kan meng-

gu-na-kan pe-rang-

kat lu-nak pe-ner-je-

mah o-to-ma-tis bu-

kan pe-ner-je-mah

ma-nu-si-a.]

[Ar-ti-kel i-ni di-ter-

je-mah-kan meng-

gu-na-kan pe-rang-

kat lu-nak pe-ner-je-

mah o-to-ma-tis bu-

kan pe-ner-je-mah

ma-nu-si-a.]

Berhasil

2 : [Ti-tik du-a] [Ti-tik du-a] [Ti-tik du-a] [Ti-tik du-a] Berhasil

3 Jgn prg dari situ [Ja-ngan per-gi da-ri

si-tu]

[Ja-ngan per-gi da-ri

si-tu]

[Ja-ngan per-gi da-ri

si-tu]

[Ja-ngan per-gi da-ri

si-tu]

Berhasil

4 Saya mau

transfer uang di

atm bri

[Sa-ya ma-u trans-

fer u-ang di- a-tm b-

ri]

[Sa-ya ma-u trans-

fer u-ang di- a-tm b-

ri]

[Sa-ya ma-u trans-

fer u-ang di- a-tm b-

ri]

[Sa-ya ma-u trans-

fer u-ang di- a-tm b-

ri]

Tidak

berhasil

5 Saya mau

transfer uang di

ATM BRI

[Sa-ya ma-u trans-

fer u-ang di A-T-M

B-R-I]

[Sa-ya ma-u trans-

fer u-ang di A-T-M

B-R-I]

[Sa-ya ma-u trans-

fer u-ang di A-T-M

B-R-I]

[Sa-ya ma-u trans-

fer u-ang di A-T-M

B-R-I]

Berhasil

6 0411-584806 [ko-song em-pat sa-

tu sa-tu li-ma de-la-

pan em-pat de-la-pan

ko-song e-nam]

[ko-song em-pat sa-

tu sa-tu li-ma de-la-

pan em-pat de-la-pan

ko-song e-nam]

[ko-song em-pat sa-

tu sa-tu li-ma de-la-

pan em-pat de-la-pan

ko-song e-nam]

[ko-song em-pat sa-

tu sa-tu li-ma de-la-

pan em-pat de-la-pan

ko-song e-nam]

Tidak

berhasil

56

Lanjutan Tabel 4.3 Hasil Membaca Pesan

No Input Output Line Output

Telegram

Output

WhatsApp

Output yang

Diharapkan

Keterangan

7 5000 IDR [Li-ma ri-bu ru-

pi-ah]

[Li-ma ri-bu ru-

pi-ah]

[Li-ma ri-bu ru-

pi-ah]

[Li-ma ri-bu ru-

pi-ah]

Berhasil

8 No 9A RT 02

/RW 05

[No-mor sem-

bi-lan A RT nol

du-a/RW nol li-

ma]

[No-mor sem-bi-

lan A RT nol du-

a/RW nol li-ma]

[No-mor sem-bi-

lan A RT nol du-

a/RW nol li-ma]

[No-mor sem-bi-

lan A RT nol du-

a/RW nol li-ma]

Berhasil

9 10.000.000 [Se-pu-luh ju-ta] [Se-pu-luh ju-ta] [Se-pu-luh ju-ta] [Se-pu-luh ju-ta] Berhasil

10 Dengan

memanjatkan puji

syukur kehadirat

Allah SWT, Saya

mengundang

teman-teman

untuk datang di

acara syukuran

wisuda saya

[De-ngan me-

man-jat-kan pu-

ji syu-kur ke-ha-

di-rat Al-lah S-

W-T, Sa-ya me-

ngun-dang te-

man-te-man un-

tuk da-tang di a-

ca-ra syu-ku-ran

wi-su-da sa-ya]

[De-ngan me-

man-jat-kan pu-ji

syu-kur ke-ha-di-

rat Al-lah S-W-T,

Sa-ya me-ngun-

dang te-man-te-

man un-tuk da-

tang di a-ca-ra

syu-ku-ran wi-su-

da sa-ya]

[De-ngan me-

man-jat-kan pu-ji

syu-kur ke-ha-di-

rat Al-lah S-W-T,

Sa-ya me-ngun-

dang te-man-te-

man un-tuk da-

tang di a-ca-ra

syu-ku-ran wi-su-

da sa-ya]

[De-ngan me-

man-jat-kan pu-ji

syu-kur ke-ha-di-

rat Al-lah S-W-T,

Sa-ya me-ngun-

dang te-man-te-

man un-tuk da-

tang di a-ca-ra

syu-ku-ran wi-su-

da sa-ya]

Berhasil

11 Ndk ku lupa jih,

cmn nanti salah

org ka

[N-d-k ku-lu-pa

jih-cmn na-nti

sa-lah o-rg ka]

[N-d-k ku-lu-pa

jih-cmn na-nti sa-

lah o-rg ka]

[N-d-k ku-lu-pa

jih-cmn na-nti sa-

lah o-rg ka]

[N-d-k ku-lu-pa

jih-cmn na-nti sa-

lah o-rg ka]

Tidak berhasil

57

Lanjutan Tabel 4.3 Hasil Membaca Pesan

No Input Output Line Output

Telegram

Output

WhatsApp

Output yang

Diharapkan

Keterangan

12 Hari/Tanggal:

Sabtu, 9

September 2017

Waktu : 12.30-

selesai

Tempat : Jalan.

Sepakat

Panggentungan

(Depan Gudang

Kopi)

[Ha-ri Tang-gal

Sab-tu tang-gal

sem-bi-lan Sep-

tem-ber du-a ri-

bu tu-juh be-las

Wak-tu pu-kul

du-a be-las se-

le-sai

Tem-pat Ja-lan

Se-pa-kat Pang-

gen-tu-ngan De-

pan Gu-dang

Ko-pi]

[Ha-ri Tang-gal

Sab-tu tang-gal

sem-bi-lan Sep-

tem-ber du-a ri-bu

tu-juh be-las

Wak-tu pu-kul

du-a be-las se-le-

sai

Tem-pat Ja-lan

Se-pa-kat Pang-

gen-tu-ngan De-

pan Gu-dang Ko-

pi]

[Ha-ri Tang-gal

Sab-tu tang-gal

sem-bi-lan Sep-

tem-ber du-a ri-bu

tu-juh be-las

Wak-tu pu-kul

du-a be-las se-le-

sai

Tem-pat Ja-lan

Se-pa-kat Pang-

gen-tu-ngan De-

pan Gu-dang Ko-

pi]

[Ha-ri Tang-gal

Sab-tu tang-gal

sem-bi-lan Sep-

tem-ber du-a ri-bu

tu-juh be-las

Wak-tu pu-kul

du-a be-las se-le-

sai

Tem-pat Ja-lan

Se-pa-kat Pang-

gen-tu-ngan De-

pan Gu-dang Ko-

pi]

Berhasil

13 Tiada kesan tanpa

kehadiran ta.

[Ti-a-da ke-san

tan-pa ke-ha-di-

ran ta]

[Ti-a-da ke-san

tan-pa ke-ha-di-

ran ta]

[Ti-a-da ke-san

tan-pa ke-ha-di-

ran ta]

[Ti-a-da ke-san

tan-pa ke-ha-di-

ran ta]

Berhasil

14 Microsoft,

Windows, Acer,

Coca Cola,

Google, Yahoo,

Iphone, Pizza hut

[Microsoft,

Windows, Acer,

Coca Cola,

Google, Yahoo,

Iphone, Pizza

hut]

[Microsoft,

Windows, Acer,

Coca Cola,

Google, Yahoo,

Iphone, Pizza hut]

[Microsoft,

Windows, Acer,

Coca Cola,

Google, Yahoo,

Iphone, Pizza hut]

[Microsoft,

Windows, Acer,

Coca Cola,

Google, Yahoo,

Iphone, Pizza hut]

Berhasil

58

Dari hasil pengamatan pada tabel 4.2 aplikasi menerima pesan dari Telegram, Line

dan WhatsApp tanpa membuka apliksi Pembaca Pesan berjalan dengan baik sehingga

pengguna akan menerima setiap pesan yang masuk . Aplikasi menerima pesan

notification dari Line, Telegram dan WhatsApp kemudian mengubah teks pesan

menjadi suara bejalan dengan baik sehingga pengguna dapat mendengarkan isi pesan

yang telah diterima. Aplikasi menampilkan pesan yang diterima dari Line, Telegram

dan WhatsApp berjalan dengan baik. Aplikasi menkonversi teks pesan berdasarkan teks

pesan yang dipilih berjalan dengan baik sehingga pengguna dapat mendengarkan ulang

pesan ketika tidak memiliki waktu untuk membaca dan bagi penulis sebagai hasil

validasi untuk teks yang telah dikonversi. Aplikasi memilih pesan yang akan dihapus

berdasarkan pilihan yang ada berjalan dengan baik sehingga pengguna dapat

memanajemenkan data yang telah diterima tidak terlalu besar. Serta aplikasi dapat

memasukkan kata singkatan dan kepanjangan yang nantinya akan digunakan dalam

perbandingan kata sebagai keluaran.

Bedasarkan pengujian hasil pembaca pesan pada tabel 4.3 yang telah dilakukan

dari 14 pesan terdapat 11 pengujian berhasil dan 3 pengujian yang tidak berhasil.

Pengujian dinyatakan berhasil menggunakan persamaan 1 diperoleh akurasi =11

14×

100 = 78,57%, diantaranya semua kata baku yang terdapat di dalam kamus besar

bahasa Indonesi (KKBI), angka, simbol, tanggal, waktu, beberapa nama perusahaan

besar dan produk, penyebutan satuan bilangan sampai dengan bilangan mencapai

59

satuan kuadtriliun, beberapa singkatan sesuai dengan ejaan yang disempurnakan serta

kata singkatan yang terdapat dalam database singkatan. Namun 21,43% pengujian

dinyatakan tidak sesuai karena kata [atm bri] merupakan singkatan dengan

menggunakan huruf kecil dan kata tersebut tidak terdapat dalam database kata-kata

khusus maupun dalam KBBI, singkatan akan terbaca jika menggunakan huruf kapital

[ATM BRI] dengan menyebutkan tiap huruf yang ada sesuai penulisan singkatan nama

resmi lembaga, angka nol terbaca kosong [0411-584806] ketika penulisan nomor

telepon. Kata singkatan yang belum dimasukkan kedalam database tidak terbaca baik

dikarenakan belum memiliki maksud kata (kepanjangan). Setelah proses input kata

singkatan yang tidak terbaca dengan baik seperti kata [a-tm b-ri] menjadi [A-T-M B-

R-I] dan kalimat [N-d-k ku-lu-pa jih -cmn nan-ti sa-lah o-rg ka] menjadi [Ti-dak ku lu-

pa ji, cu-man nan-ti sa-lah o-rang ka] menghasilkan sistem dapat mengenali kata

dengan baik sehingga persentase keberhasilan mencapai 92,85 %.

Namun penyebutan angka 0 [nol] terbaca [ko-song] ketika penulisan nomor

telepon tidak dapat diperbaiki disebabkan database voice yang digunakan. Selain

singkatan yang terdapat pada database akan dikonversi sesuai penulisan pesan yang

diterima. Pengaplikasian pada smartphone dengan versi Android 5.0 Lollipop dan 6.0

Marshmallow serta memiliki akses ke "Notification access".

60

BAB V

PENUTUP

5.1 Kesimpulan

Berdasarkan hasil penelitian dan pembahasan yang telah diuraikan pada bab

sebelumnya, maka dapat disimpulkan beberapa hal sebagai berikut:

1. Sistem pembaca pesan text to speech berjalan pada operating system android yang

dibuat menggunakan Android Studio dengan bahasa pemograman Java dan

menggunakan sistem manajemen database SQLite. Sistem pembaca pesan text to

speech dapat menerima pack, tittle dan text dari Telegram, Line dan WhatsApp

sebagai masukkan kemudian teks dikonversi menjadi suara sebagai keluaran. Dari

hasil uji yang telah dilakukan akurasi keberhasilan membaca pesan mencapai

78.57%. Sistem pembaca pesan text to speech dengan turunan dari

NotificationListenerService mampu menerima langsung pesan setiap

pemberitahuan dari pesan Telegram, Line dan WhatsApp yang ditampilkan pada

layar smartphone dengan isi pesan sebagai masukan dan langsung dikonversi

menjadi suara yang membuatnya bekerja dibelakang layar tanpa harus membuka

aplikasi utama. Dengan fungsi antrian QUEUE_ADD pada API Gooogle TTS

memungkinkan pesan yang diterima akan diproses satu persatu.

2. Sistem pembaca pesan text to speech menyediakan masukkan kata singkatan dan

kata yang dimaksud (kepanjangan) jika beberapa kata tidak sesuai dengan yang

diucapkan dengan membandingkan kata singkatan yang telah dimasukkan ke

61

dalam database dan membuat sistem mengeluarkan kepanjangan kata tersebut.

Dari hasil uji yang telah dilakukan persentase keberhasilan setelah memasukkan

kata singkatan mencapai 92.85%.

5.2 Saran

Adapun saran untuk pengembangan sistem selanjutnya sebagai berikut:

1. Dikembangkan agar dapat dijalankan pada smartphone dengan sistem operasi

selain Android seperti IOS, Windows Phone, Color OS dan sebagainya.

2. Mengembangkan sistem dengan keluaran suara yang berbeda tergantung dengan

teks yang tertulis seperti teks dalam bahasa Inggris, bahasa Arab, bahasa Jepang

dan beberapa bahasa lainnya.

62

DAFTAR PUSTAKA

Hillsboro, P.V., Sunnyvale, T.F.M., 2004. Client/server architecture for text-to-speech

synthesis.

Irawan, A., 2014. Implementasi Speech To Text Dan Text To Speech Pada Aplikasi

Traveling Conversations Assistance Berbasis Mobile.

Jeffrey, S., 2014. WhatsApp vs Line vs Telegram: the best instant messenger apps

compared - TorrApk [WWW Document]. URL

https://www.torrapk.com/en/blog/apps-comparison/whatsapp-vs-line-vs-

telegram (accessed 11.23.17).

Juansyah, A., 2015. Pembangunan Aplikasi Child Tracker Berbasis Assisted-Global

Positioning System(A-GPS) Dengan Platform Android. J. Ilm. Komput. Dan

Inform.

Juhara, Z.P., 2016. Panduan Lengkap Pemograman Android. Andi, Yogyakarta.

KOMINFO, P., 2014. Pengguna Internet Indonesia Nomor Enam Dunia [WWW

Document]. Website Resmi Kementeri. Komun. Dan Inform. RI. URL

https://kominfo.go.id:443/content/detail/4286/pengguna-internet-indonesia-

nomor-enam-dunia/0/sorotan_media (accessed 11.23.17).

Marius, P., Sapto, A., 2014. Profil Penggunaan Internet Indonesia, pertama, Maret

2015. ed. Asosiasi Penyelenggaraan Jasa Internet Indonesia, Jakarta.

Pramono, J.A., 2013. Racang Bangunan Aplikasi Text to Speech Sebagai Alat Bantu

Pembelajaran Bahasa Inggris. Yogyakarta.

Sianipar, R.., 2013. Teori dan Impplementasi Java. Informatika, Bandung.

Siregar, D., 2015. Text To Speech Bahasa Indonesia Pada Pesan SMS Dengan

Konverter PDU. J. TIMES 3, 6–12.

Wundari, B.G., 2009. Sistem Text-to-Speech Dengan Metode Unit Selection Synthesis

Untuk Bahasa Indonesia. Univ. Indones.

63

LAMPIRAN

64

Class NotificationServic. java

package com.example.nurpadilamuslimin.pembacapesan;

import android.app.Notification;

import android.content.Context;

import android.content.Intent;

import android.os.Build;

import android.os.Bundle;

import android.service.notification.NotificationListenerService;

import android.service.notification.StatusBarNotification;

import android.speech.tts.TextToSpeech;

import android.support.v4.content.LocalBroadcastManager;

import android.util.Log;

import android.widget.Toast;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Locale;

/*

Inisialisasi TTS & Notification Service

*/

public class NotificationService extends

NotificationListenerService implements TextToSpeech.OnInitListener

{

public static TextToSpeech getTts() {

return tts;

}

public void setTts(TextToSpeech tts) {

this.tts = tts;

}

DataBase db;

// variabel tts

public static TextToSpeech tts;

private String mPreviousNotificationKey = "";

private Notification mPreviousNotification = null;

Context context;

boolean bicara = false;

@Override

public void onCreate() {

65

super.onCreate();

//inisialisasi context, penghubung service dengen context

context = getApplicationContext();

//inisialisasi text to speech

tts = new TextToSpeech(context,this);

Log.d("NOTIFICASERV","On Created " + bicara);

db = new DataBase(context);

}

//Mengambil pesan dari notif

public void onNotificationPosted(StatusBarNotification sbn) {

if(bicara){

bicara = false;

} else {

Log.i("NotifyService", "got notification");

String pack = sbn.getPackageName();

Bundle extras = sbn.getNotification().extras;

String title = extras.getString("android.title");

String text = extras.getString("android.text");

//menghilangkan pesan terduplikat

mPreviousNotificationKey = sbn.getKey();

mPreviousNotification = sbn.getNotification();

Log.i("Package",pack);

Log.i("Title",title);

Log.i("Text",text);

// mendapatkan pesan dari line, telegram dan whatsapp

if (pack.equals("jp.naver.line.android") ||

pack.equals("org.telegram.messenger")||

pack.equals("com.whatsapp")){

// mengambil package, judul, teks, dan waktu pesan

diterima

Intent msgrcv = new Intent("Msg");

msgrcv.putExtra("package", pack);

msgrcv.putExtra("title", title);

msgrcv.putExtra("text", text);

Calendar calendar = Calendar.getInstance();

SimpleDateFormat dateFormat = new

SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String created_at =

dateFormat.format(calendar.getTime());

//menambahkan ke database pada tabel chat

db.addChat(title,text,pack, created_at);

/* ADD:menyelesaikan pembicaraan lalu menambah, FLUSH : membaca

pesan terakhir yang diterima */

66

if(tts != null){

//parsing text sebelum diterjemahkan

ParseSingkatan parser = new

ParseSingkatan(context);

text = parser.parseSingkatan(text);

text = parser.parseDatabase(text);

// pesan dikonversi menjadi suara

tts.speak("Pengirim,"+title+".

"+text,TextToSpeech.QUEUE_ADD,null);

}

// mengirim pesan ke aktiviti

LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);

bicara = true;

}

}

}

@Override

// method untuk memberhentikan pembacaan pesan

public void onNotificationRemoved(StatusBarNotification sbn) {

tts.stop();

Log.i("Msg","Notification Removed");

}

//FUNGSI yang dipanggil pada saat inisialisasi tts

@Override

public void onInit(int status) {

if (status == TextToSpeech.SUCCESS){

//kalo berhasil

tts.setLanguage(new Locale("id","ID"));

} else {

//kalo tidak berhasil

Toast.makeText(context,"Inisialisasi TTS tidak

berhasil",Toast.LENGTH_LONG).show();

}

}

}

67

Class ParseSingkatan. java

package com.example.nurpadilamuslimin.pembacapesan;

import android.content.Context;

import android.text.TextUtils;

import java.util.List;

public class ParseSingkatan {

DataBase db;

List<KataSingkatan> kataSingkatan;

public ParseSingkatan(Context context){

db = new DataBase(context);

kataSingkatan = db.getKata();

}

public String parseSingkatan(String words){

String[] s = words.split("\\s+");

for ( int i = 0; i < s.length; i++) {

s[i].replaceAll("[^a-zA-Z0-9]", "");

}

String parsed = TextUtils.join(" ",s);

return parsed;

}

public String parseDatabase(String words){

kataSingkatan = db.getKata();

String[] s = words.split("\\s+");

for (int i =0; i< s.length;i++){

for (KataSingkatan kata: kataSingkatan) {

if (s[i].equals(kata.getSingkatan())){

s[i] = kata.getKepanjangan();

}

}

}

String parsed = TextUtils.join(" ",s);

return parsed;

}

}

68

Class DataBase.java

public class DataBase extends SQLiteAssetHelper {

private static final String TAG =

DataBase.class.getSimpleName();

public static final String LINE_PACK =

"jp.naver.line.android";

public static final String TELGRAM_PACK =

"org.telegram.messenger";

public static final String WHATSAPP_PACK="com.whatsapp";

// Database Version

private static final int DATABASE_VERSION = 1;

// Database Name

private static final String DATABASE_NAME = "autospeech.db";

// Table chat

private static final String TABLE_CHAT = "chat";

//table singkatan

private static final String TABLE_SINGKATAN = "singkatan";

// kolom chat

private static final String KEY_ID = "_id";

private static final String KEY_PENIRIM = "pengirim";

private static final String KEY_PESAN = "pesan";

private static final String KEY_PACKAGE = "pack";

private static final String KEY_DATETIME = "created_at";

//kolom singkatan

private static final String KEY_IDS = "_id";

private static final String KEY_SINGKATAN = "word";

private static final String KEY_KEPANJANGAN = "meaning";

public DataBase(Context context) {

super(context,DATABASE_NAME, null, DATABASE_VERSION);

}

/*

* Add chat

*/

public void addChat( String pengirm,String pesan,String

pack,String datetime){

SQLiteDatabase db = this.getWritableDatabase();

ContentValues chat = new ContentValues();

chat.put(KEY_PENIRIM,pengirm);

chat.put(KEY_PESAN,pesan);

chat.put(KEY_PACKAGE,pack);

chat.put(KEY_DATETIME,datetime);

long id = db.insert(TABLE_CHAT,null,chat);

db.close();

69

Log.d(TAG, "Chat baru masuk ke database " + id);

}

/*

* tambahkan singkatan

* */

public void addKata (String singkatan, String kepanjangan){

SQLiteDatabase db = this.getWritableDatabase();

ContentValues kata = new ContentValues();

kata.put(KEY_SINGKATAN, singkatan);

kata.put(KEY_KEPANJANGAN, kepanjangan);

long kta = db.insert(TABLE_SINGKATAN,null,kata);

db.close();

Log.d(TAG,"kata yang masuk " + kta);

}

/**

* Getting user data from database

* */

public List<ChatModel> getChatDetails(String pack) {

HashMap<String, String> chat = new HashMap<String,

String>();

//memasukkan data

String selectQuery = "SELECT * FROM " + TABLE_CHAT + "

WHERE " +KEY_PACKAGE + " = '" + pack+ "' ORDER BY " + KEY_ID+ "

DESC" ;

List<ChatModel> chatList = new ArrayList<>();

ChatModel model;

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery,null);

// Move to first row

cursor.moveToFirst();

for (cursor.moveToFirst(); !cursor.isAfterLast();

cursor.moveToNext()) {

// do what you need with the cursor here

model = new

ChatModel(String.valueOf(cursor.getLong(0)),cursor.getString(1),cu

rsor.getString(2),cursor.getString(4));

chatList.add(model);

}

cursor.close();

db.close();

// return chat

Log.d(TAG, "Mengambil chat dari sqlite: " +

chatList.toString());

70

return chatList;

}

public List<KataSingkatan> getKata(){

HashMap<String, String> singkatan = new HashMap<String,

String>();

String selectQuery = "SELECT * FROM " + TABLE_SINGKATAN ;

List<KataSingkatan> kataSingkatanList = new ArrayList<>();

KataSingkatan model;

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery,null);

// Move to first row

cursor.moveToFirst();

for (cursor.moveToFirst(); !cursor.isAfterLast();

cursor.moveToNext()) {

// do what you need with the cursor here

model = new

KataSingkatan(String.valueOf(cursor.getLong(0)),cursor.getString(1

),cursor.getString(2));

kataSingkatanList.add(model);

}

cursor.close();

db.close();

// return chat

Log.d(TAG, "Mengambil kata dari sqlite: " +

kataSingkatanList.toString());

return kataSingkatanList;

}

/**

* Menghapus

*

* @param id*/

public void deleteChat(String id) {

SQLiteDatabase db = this.getWritableDatabase();

// Delete All Rows

db.delete(TABLE_CHAT, null, null);

db.close();

Log.d(TAG, "Deleted all chat info from sqlite");

}

public void deleteChatById(String id) {

SQLiteDatabase db = this.getWritableDatabase();

// Delete Id

db.delete(TABLE_CHAT,KEY_ID + " = ?",new String[]{id});

71

db.close();

Log.d(TAG,"Delete Chat Id"+id);

}

public void deleteChatByPack(String pack) {

SQLiteDatabase db = this.getWritableDatabase();

// Delete Pack

db.delete(TABLE_CHAT,KEY_PACKAGE + " = ?",new

String[]{pack});

db.close();

Log.d(TAG,"Delete Chat Pack"+pack);

}

}

72

Class ChatAdapter.java

package com.example.nurpadilamuslimin.pembacapesan;

import android.content.Context;

import android.content.DialogInterface;

import android.speech.tts.TextToSpeech;

import android.support.v7.app.AlertDialog;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageButton;

import android.widget.TextView;

import java.util.List;

import static

com.example.nurpadilamuslimin.pembacapesan.NotificationService.tts

;

/**

* Created by Nurpadila Muslimin on 4/7/2017.

*/

public class ChatAdapter extends

android.support.v7.widget.RecyclerView.Adapter<ChatAdapter.ViewHol

der> {

private Context context;

private List <ChatModel> daftarchat;

//MendengarPesan mendengarPesan;

//tambahan

TextToSpeech textToSpeech;

// private DataBase dataBase;

DataBase db;

List<KataSingkatan> kataSingkaten;

ParseSingkatan parser;

public ChatAdapter(Context context,List<ChatModel>daftarchat){

this.context=context;

this.daftarchat=daftarchat;

textToSpeech = NotificationService.getTts();

db = new DataBase(context);

kataSingkaten = db.getKata();

parser = new ParseSingkatan(context);

}

73

@Override

public ChatAdapter.ViewHolder onCreateViewHolder(ViewGroup

parent, int viewType) {

Context context = parent.getContext();

LayoutInflater inflater = LayoutInflater.from(context);

View list =

inflater.inflate(R.layout.barischat,parent,false);

ViewHolder viewHolder = new ViewHolder(list);

return viewHolder;

}

@Override

public void onBindViewHolder(ChatAdapter.ViewHolder holder,

final int position) {

final ChatModel model = daftarchat.get(position);

holder.pengirim.setText(model.getPengirim());

holder.pesan.setText(model.getPesan());

holder.datetime.setText(model.getDatetime());

String parsed = parser.parseSingkatan(model.getPesan());

parsed = parser.parseDatabase(parsed);

final String finalParsed = parsed;

holder.btnSuara.setOnClickListener(new

View.OnClickListener() {

@Override

public void onClick(View v) {

tts.speak(finalParsed,textToSpeech.QUEUE_ADD,null) ;

}

});

// //Alert mengapus pesan

//

holder.itemView.setOnLongClickListener(new

View.OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

AlertDialog.Builder alert = new

AlertDialog.Builder(v.getContext());

alert.setTitle("Konfirmasi");

alert.setMessage("Anda akan menghapus pesan ini ?");

alert.setIcon(R.drawable.ic_add_alert_black_24dp);

final AlertDialog.Builder yes = alert.setPositiveButton("YES", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

74

db.deleteChatById(model.getId());

daftarchat.remove(position);

notifyDataSetChanged();

}

});

alert.setNegativeButton("NO", new

DialogInterface.OnClickListener() {

@Overrid

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

}

});

alert.show();

return false;

}

});

}

@Override

public int getItemCount() {

return daftarchat.size();

}

public class ViewHolder extends RecyclerView.ViewHolder{

TextView pengirim;

TextView pesan;

ImageButton btnSuara;

TextView datetime;

public ViewHolder(View itemView) {

super(itemView);

pengirim = (TextView) itemView.findViewById(R.id.text_pengirim);

pesan = (TextView) itemView.findViewById(R.id.text_pesan);

datetime = (TextView) itemView.findViewById(R.id.txt_datetime);

btnSuara = (ImageButton)itemView.findViewById(R.id.btnBunyi);

}

}

}

75

class ChatModel.java

public class ChatModel {

String id;

String pengirim;

String pesan;

String datetime;

public ChatModel(){};

public ChatModel(String id, String pengirim, String pesan,

String datetime) {

this.id = id;

this.pengirim = pengirim;

this.pesan = pesan;

this.datetime = datetime;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getPengirim() {

return pengirim;

}

public void setPengirim(String pengirim) {

this.pengirim = pengirim;

}

public String getPesan() {

return pesan;

}

public void setPesan(String pesan) {

this.pesan = pesan;

}

public String getDatetime() {

return datetime;

}

public void setDatetime(String datetime) {

this.datetime = datetime;

}

}

76

class KataSingkatan.java

public class KataSingkatan {

String ids ;

String singkatan;

String kepanjangan;

public KataSingkatan(){

}

public KataSingkatan (String id, String singkatan, String

kepanjangan){

this.ids = ids;

this.singkatan = singkatan ;

this.kepanjangan = kepanjangan;

}

public String getIds(){

return ids;

}

public void setIds(String ids){

this.ids = ids;

}

public String getSingkatan(){

return singkatan;

}

public void setSingkatan(String singkatan){

this.singkatan = singkatan;

}

public String getKepanjangan(){

return kepanjangan;

}

public void setKepanjangan(String kepanjangan){

this.kepanjangan =kepanjangan;

}

}

77

class Line.java

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.content.LocalBroadcastManager;

import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.DividerItemDecoration;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

public class Line extends Fragment{

RecyclerView pesan;

List<ChatModel> listChat = new ArrayList<>();

ChatAdapter mAdapter;

DataBase db;

public Line() {

// Required empty public constructor

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup

container,Bundle savedInstanceState) {

View view= inflater.inflate(R.layout.line, container,

false);

db= new DataBase(getContext());

listChat = db.getChatDetails(db.LINE_PACK);

pesan = (RecyclerView) view.findViewById(R.id.rcv_line);

mAdapter = new

ChatAdapter(getActivity().getApplicationContext(),listChat);

pesan.setLayoutManager(new

78

LinearLayoutManager(getActivity().getApplicationContext()));

pesan.setItemAnimator(new DefaultItemAnimator());

pesan.setHasFixedSize(true);

pesan.addItemDecoration(new

DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL));

pesan.setAdapter(mAdapter);

LocalBroadcastManager.getInstance(getActivity().getApplicationCont

ext())

.registerReceiver(onNotice,new IntentFilter("Msg"));

return view;

}

private BroadcastReceiver onNotice = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String pack = intent.getStringExtra("package");

String title = intent.getStringExtra("title");

String text = intent.getStringExtra("text");

Calendar calendar = Calendar.getInstance();

SimpleDateFormat dateFormat = new

SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String created_at =

dateFormat.format(calendar.getTime());

if(pack.equals("jp.naver.line.android")){

listChat.add(0,new

ChatModel("",title,text,created_at));

mAdapter.notifyDataSetChanged();

}

}

};

}

79

class Telegram.java

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.content.LocalBroadcastManager;

import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.DividerItemDecoration;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

public class Telegram extends Fragment{

RecyclerView pesan;

List<ChatModel> listChat = new ArrayList<>();

ChatAdapter mAdapter;

DataBase db;

public Telegram() {

// Required empty public constructor

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup

container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.telegram, container,

false);

pesan = (RecyclerView)

view.findViewById(R.id.rcv_telegram);

db = new DataBase(getContext());

listChat = db.getChatDetails(db.TELGRAM_PACK);

mAdapter = new

ChatAdapter(getActivity().getApplicationContext(),listChat);

80

pesan.setLayoutManager(new

LinearLayoutManager(getActivity().getApplicationContext()));

pesan.setItemAnimator(new DefaultItemAnimator());

pesan.setHasFixedSize(true);

pesan.addItemDecoration(new

DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL));

pesan.setAdapter(mAdapter);

LocalBroadcastManager.getInstance(getActivity().getApplicationCont

ext())

.registerReceiver(onNotice,new

IntentFilter("Msg"));

return view;

}

private BroadcastReceiver onNotice = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String pack = intent.getStringExtra("package");

String title = intent.getStringExtra("title");

String text = intent.getStringExtra("text");

Calendar calendar = Calendar.getInstance();

SimpleDateFormat dateFormat = new

SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String created_at =

dateFormat.format(calendar.getTime());

if(pack.equals("org.telegram.messenger")){

listChat.add(0,new

ChatModel("",title,text,created_at));

mAdapter.notifyDataSetChanged();

}

}

};

}

81

class Whatsapp.java

import android.support.v4.app.Fragment;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.support.v4.content.LocalBroadcastManager;

import android.support.v7.widget.DefaultItemAnimator;

import android.support.v7.widget.DividerItemDecoration;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

public class Whatsapp extends Fragment {

RecyclerView pesan;

List<ChatModel> listChat = new ArrayList<>();

ChatAdapter mAdapter;

DataBase db;

public Whatsapp(){

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup

container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.whatsapp, container,

false);

pesan = (RecyclerView)

view.findViewById(R.id.rcv_whatsapp);

db = new DataBase(getContext());

listChat = db.getChatDetails(db.WHATSAPP_PACK);

82

mAdapter = new

ChatAdapter(getActivity().getApplicationContext(),listChat);

pesan.setLayoutManager(new

LinearLayoutManager(getActivity().getApplicationContext()));

pesan.setItemAnimator(new DefaultItemAnimator());

pesan.setHasFixedSize(true);

pesan.addItemDecoration(new

DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL));

pesan.setAdapter(mAdapter);

LocalBroadcastManager.getInstance(getActivity().getApplicationCont

ext())

.registerReceiver(onNotice,new

IntentFilter("Msg"));

return view;

}

private BroadcastReceiver onNotice = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String pack = intent.getStringExtra("package");

String title = intent.getStringExtra("title");

String text = intent.getStringExtra("text");

Calendar calendar = Calendar.getInstance();

SimpleDateFormat dateFormat = new

SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

String created_at =

dateFormat.format(calendar.getTime());

if(pack.equals("com.whatsapp")){

listChat.add(0,new

ChatModel("",title,text,created_at));

mAdapter.notifyDataSetChanged();

}

}

};

}

83

class MainActivity.java

import android.content.DialogInterface;

import android.os.Bundle;

import android.speech.tts.TextToSpeech;

import android.support.design.widget.TabLayout;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.EditText;

import android.widget.TableLayout;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;

private TabLayout tabLayout;

private ViewPager viewPager;

private TextToSpeech tts;

private TextView textPesan;

List<ChatModel> listChat = new ArrayList<>();

ChatAdapter mAdapter;

DataBase db;

ChatAdapter Chatmasuk;

TableLayout tab;

private int[] tabIcons = {

R.mipmap.icon_telegram,

R.mipmap.icon_line,

R.mipmap.icon_whatsapp

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mainmain);

db = new DataBase(getApplicationContext());

84

mAdapter = new

ChatAdapter(getApplicationContext(),listChat);

viewPager = (ViewPager) findViewById(R.id.viewpager);

setupViewPager(viewPager);

tabLayout = (TabLayout) findViewById(R.id.tabs);

tabLayout.setupWithViewPager(viewPager);

setTabIcons();

tab = (TableLayout) findViewById(R.id.tab);

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.context_menu,menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()){

case R.id.hapus_pesanL:

AlertDialog.Builder alert = new

AlertDialog.Builder(this);

alert.setTitle("Konfirmasi");

alert.setMessage("Anda akan menghapus semua pesan

Line ?");

alert.setIcon(R.drawable.ic_add_alert_black_24dp);

alert.setPositiveButton("YES", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

db.deleteChatByPack(db.LINE_PACK);

mAdapter.notifyDataSetChanged();

setupViewPager(viewPager);

}

});

alert.setNegativeButton("NO", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

}

});

alert.create();

alert.show();

break;

case R.id.hapus_pesanW:

AlertDialog.Builder alert1 = new

AlertDialog.Builder(this);

alert1.setTitle("Konfirmasi");

85

alert1.setMessage("Anda akan menghapus semua pesan

WhatsApp ?");

alert1.setIcon(R.drawable.ic_add_alert_black_24dp);

alert1.setPositiveButton("YES", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

db.deleteChatByPack(db.WHATSAPP_PACK);

listChat = new ArrayList<ChatModel>();

mAdapter.notifyDataSetChanged();

setupViewPager(viewPager);

}

});

alert1.setNegativeButton("NO", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

dialog.cancel();

}

});

alert1.create();

alert1.show();

break;

case R.id.hapus_pesanT:

AlertDialog.Builder alertt = new

AlertDialog.Builder(this);

alertt.setTitle("Konfirmasi");

alertt.setMessage("Anda akan menghapus semua pesan

Telegram ?");

alertt.setIcon(R.drawable.ic_add_alert_black_24dp);

alertt.setPositiveButton("YES", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

db.deleteChatByPack(db.TELGRAM_PACK);

listChat = new ArrayList<ChatModel>();

mAdapter.notifyDataSetChanged();

setupViewPager(viewPager);

}

});

alertt.setNegativeButton("NO", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

86

int which) {

dialog.cancel();

}

});

alertt.create();

alertt.show();

break;

case R.id.add_database_singkatan:

AlertDialog.Builder alertdbs = new

AlertDialog.Builder(this);

LayoutInflater inflater = getLayoutInflater();

final View dialogView =

inflater.inflate(R.layout.tambah_data_singkatan,null);

alertdbs.setView(dialogView);

alertdbs.setCancelable(true);

alertdbs.setPositiveButton("SIMPAN", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

final EditText singkatan = (EditText)

dialogView.findViewById(R.id.in_singkatan);

final String textsingkatan =

singkatan.getText().toString();

final EditText kata = (EditText)

dialogView.findViewById(R.id.in_kata);

final String textkata =

kata.getText().toString();

db.addKata(textsingkatan,textkata);

}

});

alertdbs.setNegativeButton("NO", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

dialog.cancel();

}

});

alertdbs.create();

alertdbs.show();

break;

}

87

return super.onOptionsItemSelected(item);

}

private void setTabIcons(){

tabLayout.getTabAt(0).setIcon(tabIcons[0]);

tabLayout.getTabAt(1).setIcon(tabIcons[1]);

tabLayout.getTabAt(2).setIcon(tabIcons[2]);

}

private void setupViewPager(ViewPager viewPager) {

ViewPagerAdapter adapter = new

ViewPagerAdapter(getSupportFragmentManager());

adapter.addFragment(new Telegram(), "Telegram");

adapter.addFragment(new Line(), "Line");

adapter.addFragment(new Whatsapp(), "Whatsapp");

viewPager.setAdapter(adapter);

}

class ViewPagerAdapter extends FragmentPagerAdapter {

private final List<Fragment> mFragmentList = new

ArrayList<>();

private final List<String> mFragmentTitleList = new

ArrayList<>();

public ViewPagerAdapter(FragmentManager manager) {

super(manager);

}

@Override

public Fragment getItem(int position) {

return mFragmentList.get(position);

}

@Override

public int getCount() {

return mFragmentList.size();

}

public void addFragment(Fragment fragment, String title) {

mFragmentList.add(fragment);

mFragmentTitleList.add(title);

}

@Override

public CharSequence getPageTitle(int position) {

return mFragmentTitleList.get(position);

}

}

}

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107