SISTEM PEMBACA PESAN TEXT TO SPEECH BERBASIS ...
-
Upload
khangminh22 -
Category
Documents
-
view
0 -
download
0
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
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
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.
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);
}
}
}