You are on page 1of 116

PROYEK AKHIR

ALGORITMA PENGUBAH DARI TEKS KE SUARA UNTUK


APLIKASI ALAT BANTU BICARA

TEXT TO SPEECH ALGORITHM FOR SPEAKING AID


APPLICATION

Oleh:

MAPOLA ABDIA RAYANA


NRP. 7105.040.018

Dosen Pembimbing :

Eru Puspita, S.T., M.Kom.


NIP. 19691231.199501.1.001

JURUSAN TEKNIK ELEKTRONIKA


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
SURABAYA
2009
PROYEK AKHIR

ALGORITMA PENGUBAH DARI TEKS KE SUARA UNTUK


APLIKASI ALAT BANTU BICARA

TEXT TO SPEECH ALGORITHM FOR SPEAKING AID


APPLICATION

Oleh:

MAPOLA ABDIA RAYANA


NRP. 7105.040.018

Dosen Pembimbing :

Eru Puspita, S.T., M.Kom.


NIP. 19691231.199501.1.001

JURUSAN TEKNIK ELEKTRONIKA


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
SURABAYA
2009
ALGORITMA PENGUBAH DARI TEKS KE SUARA UNTUK
APLIKASI ALAT BANTU BICARA

Oleh :

MAPOLA ABDIA RAYANA


NRP. 7105.040.018

Proyek Akhir ini Diajukan Sebagai Salah Satu Syarat Untuk


Memperoleh Gelar Sarjana Sains Terapan (S.ST.)
di
Politeknik Elektronika Negeri Surabaya
Institut Teknologi Sepuluh Nopember Surabaya

Disetujui Oleh
Dosen Penguji Proyek Akhir : Dosen Pembimbing:

1. 1.

Ir.Moch.Rochmad, M.T. Eru Puspita, S.T., M.Kom.


NIP. 19620304.199103.1.002 NIP. 19691231.199501.1.001
2.

Ardik Wijayanto, S.T., M.T.


NIP. 19770620.200212.1.002
3.

Eko Henfri B., S.ST., M.Eng.


NIP. 19791223.200312.1.002
Mengetahui :
Ketua Jurusan Teknik Elektronika

Ir. Rika Rokhana, M.T.


NIP. 19690905.199802.2.001
ABSTRAK
Komunikasi merupakan hal yang vital dalam kehidupan sehari-hari. Para
penyandang cacat tunawicara akan sangat kesulitan dalam
berkomunikasi dengan orang yang tidak menguasai bahasa isyarat.
Sehubungan dengan hal di tersebut maka alat portabel ini dapat
mengkonversi isi kalimat menjadi suara. Seorang tunawicara dapat
memasukan kalimat yang ingin dikatakan melalui keypad kemudian
memperdengarkan hasil konversi yang berupa suara kepada lawan
bicara.
Software pada sistem ini terdiri dari software akses ke hardware antara
lain Keypad, LCD (Liquid Crystal Display), Mikrokontroler ATmega8,
MMC (Multi Media Card) dan software pengolah data yaitu software
konversi Teks ke Fonem dan Fonem ke Suara.
MMC digunakan untuk menyimpan database suara 1170 fonem dalam
format *.WAV. Untuk merekonstruksi sinyal digital menjadi sinyal
analog digunakan PWM (Pulse Width Modulation) dengan frekuensi
sampling 8KHz, 8bit dan mono.
Hasil pengujian persentase suara output dikenali oleh lawan bicara
adalah 81.62% dari 10 sample kalimat. Beberapa kata yang tidak
dikenali disebabkan masih adanya suara diam pada penggabungan antar
fonem.

Kata kunci: Text to speech, ATmega8, MMC, PWM-DAC, LPF (Low


Pass Filter) aktif orde 4
ABSTRACT

Communications represent the vital matter in everyday life. All dumb


people will very difficulty in communicating with one who do not master
the sign language. Hence this portable appliance can convert the
sentence content become the voice. A dumb people can enter of sentence
wish to told through keypad, then sound off result of conversion as a
voice to opponent speak.
Software at this system is consist of software access to the hardware for
example Keypad, LCD ( Liquid Crystal Display ), Microcontroller
ATmega8, MMC ( Multi of Media Card) and software data processor
that is software convert the Text to Phoneme and Phoneme to Voice.
MMC is used as the storage of 1170 phoneme voice database in format
*. WAV. To reconstruct the digital signal become analogous signal,
PWM ( Pulse Width Modulation) with the sampling frequency 8KHz,
8bit and mono is used.
The output percentage result of voice examination recognized by
opponent speak is 81.62% from 10 sample sentence. Some words which
not recognized are be caused by silence interrupt between phoneme
concatenation.

Keyword: Text to speech, ATmega8, MMC, PWM-DAC, Order 4 of


active LPF ( Low Pass Filter)
KATA PENGANTAR

Puji Syukur Alhamdulillah kehadlirat Allah SWT yang


senantiasa selalu memberikan Ridho dan RahmatNya sehingga penulis
dapat menyelesaikan proyek akhir ini dengan judul:

“ALGORITMA PENGUBAH DARI TEKS KE SUARA


UNTUK APLIKASI ALAT BANTU BICARA”
Penulis berharap semoga tugas akhir ini dapat memberi
manfaat bagi penulis dan rekan-rekan mahasiswa pada khususnya serta
seluruh pembaca pada umumnya.

Terima kasih.

Surabaya, Juli 2009

Penulis
UCAPAN TERIMA KASIH

Alhamdulillah, atas segala limpahan rahmat, taufik, hidayah


serta inayah-Nya sehingga proyek akhir ini dapat kami selesaikan
dengan baik. Kami menyadari bahwa terwujudnya proyek akhir ini tak
lepas dari bantuan, bimbingan dan dukungan dari berbagai pihak. Oleh
karena itu dengan segala kerendahan hati kami sampaikan terima kasih
kepada :

1. Ibuku Sri Rahayu, Ayahku Mudjiono, Adikku Arafi’u S.P. dan


Kakakku Yoyok S.
2. Dosen Pembimbing Eru Puspita, S.T., M.Kom.
3. Dwi Lisnasari (tim proyek akhir bagian hardware).
4. Dosen Penguji proyek akhir.
5. Dosen-dosen Pengajar Elektronika.
6. Teman-teman.

Serta semua pihak yang telah membantu baik secara langsung


maupun tidak langsung.

Surabaya, Juli 2009

Penulis
DAFTAR ISI

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


HALAMAN PENGESAHAN ......................................................... ii
ABSTRAK ....................................................................................... iii
ABSTRACT ...................................................................................... iv
KATA PENGANTAR ..................................................................... v
UCAPAN TERIMA KASIH........................................................... vi
DAFTAR ISI.................................................................................... vii
DAFTAR GAMBAR....................................................................... ix
DAFTAR TABEL............................................................................ xi

BAB I. PENDAHULUAN
1.1. Latar Belakang ........................................................................... 1
1.2. Tujuan ........................................................................................ 1
1.3. Permasalahan.............................................................................. 2
1.4. Batasan Masalah......................................................................... 2
1.4. Metodologi ................................................................................. 2
1.5. Sistematika Pembahasan ............................................................ 3

BAB II. TEORI PENUNJANG


2.1. Sistem Text To Speech................................................................ 5
2.2. Mikrokontroler ATmega8 .......................................................... 5
2.3. MMC (Multi Media Card)
2.3.1. SPI(Serial Peripheral Interface) Mode............................ 7
2.3.2. Command dan respon....................................................... 7
2.3.3. SPI Command Set............................................................. 7
2.3.4. SPI Respon....................................................................... 8
2.3.5. Write/Read MMC............................................................ 8
2.4. SPI (Serial Peripheral Interface)................................................ 9
2.5. Ace of WAV............................................................................... 10
2.6. WinHex....................... ............................................................... 11
2.7. CodeVision AVR ...............................................................…… 11
2.8. PWM (Pulse Width Modulation)................................................ 13

BAB III PERENCANAAN DAN PEMBUATAN SOFTWARE


3.1. Diagram sistem..................................................................... .... 17
3.2. Flowchart sistem...................................................................... 19
3.3. Pembuatan database suara fonem............................................ 20
3.4. Perancangan software konversi teks ke fonem…. ................... 26
3.5. Pembuatan software konversi teks ke fonem........................... 30
3.6. Perancangan software untuk mencari alamat fonem di dalam
MMC......................................................................................... 33
3.7. Pembuatan software untuk mencari alamat fonem di dalam
MMC......................................................................................... 35
3.8. Perancangan software akses ke MMC...................................... 38
3.9. Pembuatan software akses ke MMC ........................................ 42
3.10.Perencanaan software konversi ke sinyal analog (PWM) ........ 44
3.11.Pembuatan software konversi ke sinyal analog (PWM)........... 48

BAB IV PENGUJIAN ALAT DAN ANALISA


4.1. PENGUJIAN PER BLOK
4.1.1. ketepatan penyusunan database suara.............................. 51
4.1.2. software konversi teks ke fonem..................................... 53
4.1.3. software untuk mencari alamat fonem pada MMC......... 55
4.1.4. software akses ke MMC.................................................. 56
4.1.5. software konversi ke sinyal analog (PWM).................... 59
4.2 PENGUJIAN SECARA KESELURUHAN
4.2.1. Pengukuran waktu akses ke keypad................... .............. 60
4.2.2. Pengukuran waktu rata-rata output suara per fonem....... 61
4.2.3. Tampilan output sinyal suara sistem................................ 62
4.2.4. Pengujian kualitas output suara ………………………... 65

BAB V PENUTUP
5.1. Kesimpulan......………...…………………………………….... 69
5.2. Saran......……………………...……………………………….. 69

DAFTAR PUSTAKA
LAMPIRAN
DAFTAR GAMBAR

Gambar 2.1. Sistem Text To Speech……………………….…........ 5


Gambar 2.2. Konfigurasi pin ATmega8………………………....... 6
Gambar 2.3. Konfigurasi Pin MMC................................................. 7
Gambar 2.4. Command Frame MMC........................................... ... 7
Gambar 2.5. R1 Respon dari MMC............................................ .... 8
Gambar 2.6. Read single blok...................................................... .... 8
Gambar 2.7. Format paket data…………………………….…. ...... 9
Gambar 2.8. Satu Master Satu Slave................................................ 9
Gambar 2.9. Ace of Wav.................................................................. 10
Gambar 2.10. WinHex................................................................... .... 11
Gambar 2.11. Tampilan CodeVisionAVR..................................... .... 12
Gambar 2.12. Sinyal PWM dengan berbagai Duty Cycle.................. 13
Gambar 2.13. Pulsa PWM.................................................................. 13
Gambar 3.1. Diagram sistem……………………………….…....... 15
Gambar 3.2. Aliran data dari MMC ke speaker………………....... 16
Gambar 3.3. Proses rekonstruksi sinyal analog…………….…. ..... 16
Gambar 3.4. Flowchart sistem keseluruhan……………….…..... 19
Gambar 3.5. Metode pembuatan database suara.......................... .. 21
Gambar 3.6. Sinyal fonem ........................................................... ... 22
Gambar 3.7. Bagian sinyal yang akan dihapus............................. ... 23
Gambar 3.8. Sinyal setelah diatur……………………………... ..... 24
Gambar 3.9. Mengatur nilai threshold………………….……... ..... 25
Gambar 3.10. Sinyal yang telah diberi data 1……………………. ... 26
Gambar 3.11. Flowchart Konverter Teks ke Fonem..................... .. 27
Gambar 3.12. Tampilan Microsoft Visual C++ 6.0……………….. . 30
Gambar 3.13. Deklarasi referensi pembanding…………….……..... 31
Gambar 3.14. Deklarasi fonem KKVK, KKV dan VKK………....... 31
Gambar 3.15. Program konversi ke pola konsonan dan vokal…....... 32
Gambar 3.16. Program konversi ke fonem untuk 4 huruf………...... 32
Gambar 3.17. Cuplikan tabel seluruh fonem beserta alamatnya........ 34
Gambar 3.18. Struktur format *.wav……………………………. .... 34
Gambar 3.19. Tool “search” software WinHex………………... .... 35
Gambar 3.20. Cuplikan program menentukan alamat untuk 1 huruf. 36
Gambar 3.21. Penentuan alamat untuk pola “vk”………………. ..... 36
Gambar 3.22. Penentuan alamat untuk pola “kv”………………. ..... 37
Gambar 3.23. Penentuan alamat untuk pola “vkk”……………... ..... 38
Gambar 3.24. Register SPCR ATmega8………………………........ 38
Gambar 3.25. Register SPSR ATmega8………………………… .... 40
Gambar 3.26. Flowchart inisialisasi MMC……………………...... 40
Gambar 3.27. Flowchart membaca data dari MMC……………. ... 41
Gambar 3.28. Inisialisasi ATmega8 pada mode SPI……………...... 42
Gambar 3.29. Inisialisasi MMC pada mode SPI…………….…....... 43
Gambar 3.30. Mengambil data dari MMC………………………..... 43
Gambar 3.31. Register TCCR1A……………………………….. ..... 44
Gambar 3.32. Register TCCR1B……………………………… ....... 46
Gambar 3.33. Register OCR1A……………………………….… .... 47
Gambar 3.34. Timing Diagram Mode Fast PWM…………….…..... 48
Gambar 3.35. Inisialisasi PWM……………………………….… .... 49
Gambar 3.36. Program konversi ke sinyal analog…………….… .... 49
Gambar 4.1. Pengujian penyusunan database suara……….…...... 52
Gambar 4.2. Pengujian software konversi teks ke fonem……....... 53
Gambar 4.3. Pengujian software penentu alamat fonem………..... 55
Gambar 4.4. Alamat data “<data_MMC>” di MMC……….… ...... 56
Gambar 4.5. Pengujian pengambilan data dari MMC……….......... 57
Gambar 4.6. Program pengambilan data dari MMC……….…....... 57
Gambar 4.7. Program pembangkit PWM duty cycle 50%…… ....... 59
Gambar 4.8. Tampilan suara “selamat pagi” sistem………….. ...... 63
Gambar 4.9. Tampilan fonem “se-la-mat pa-gi” database .… ........ 64
Gambar 4.10. Tampilan suara “selamat pagi” IndoTTS….…... ........ 64
DAFTAR TABEL

Tabel 2.1. Command Set MMC…………………………………..... 8


Tabel 3.1. Hubungan Frekuensi SCK dan Oscillator……………. ... 39
Tabel 3.2. Pola keluaran pin OC1A/OC1B Mode Fast PWM.….. ... 45
Tabel 3.3. Mode Timer 1…………………………………….….. ... 45
Tabel 3.4. Skala Clock Timer 1…………………………………. .. 46
Tabel 4.1. Hasil pengujian penyusunan database suara…….…… .. 52
Tabel 4.2. Hasil pengujian konversi teks ke fonem……………… ... 54
Tabel 4.3. Hasil pengujian software penentu alamat fonem…….. ... 55
Tabel 4.4. Hasil pengambilan data dari MMC…………………... ... 58
Tabel 4.5. Pengujian PWM……………………………………… ... 59
Tabel 4.6. Waktu untuk memasukkan teks melalui keypad……... ... 41
Tabel 4.7. Waktu rata-rata per fonem…………………………….... 42
Tabel 4.8. Hasil identifikasi pendengar dari 10 kalimat beraturan.... 66
Tabel 4.9. Hasil identifikasi pendengar dari 10 kalimat tidak
beraturan….…………………………………............... ... 66
BAB I
PENDAHULUAN

1.1. LATAR BELAKANG

Jumlah penyandang cacat bisu (tunawicara) di Indonesia


menurut Susenas 2003 adalah sebanyak 118.293 orang [8,hal.1]. Kita
tahu pentingnya komunikasi adalah sarana untuk berhubungan dengan
orang lain yaitu sebagai makhluk sosial yang tidak dapat hidup sendiri
tanpa bantuan orang lain. Komunikasi dapat digunakan untuk membeli
sesuatu yang kita butuhkan,menyampaikan perasaan atau keinginan kita,
menyampaikan keadaan darurat kepada orang lain dan banyak lagi yang
dapat kita lakukan. Sebagai orang yang dianugerahi kesempurnaan
organ tubuh,kita tentu mudah melakukan komunikasi dengan orang lain
tetapi hal ini berbeda bagi para penderita cacat tunawicara, dalam
kehidupan sehari-hannya akan sangat kesulitan dalam berkomunikasi.
Mereka mungkin akan dapat menyampaikan pesan kepada orang lain
melalui bahasa isyarat atau tulisan tetapi tidak dengan suara. Padahal
pada saat ini banyak orang normal yang tidak menguasai bahasa isyarat
sehingga tidak akan terjadi komunikasi antara penyandang cacat
tunawicara dan orang normal yang tidak menguasai bahasa isyarat.
Saat ini masih jarang alat yang murah dan mudah dibawa untuk
mengkonversikan dari tulisan ke suara sehingga mampu membantu para
penyandang cacat tunawicara dalam melakukan komunikasi.
Berdasarkan permasalahan di atas maka dibuatlah alat bantu
bicara portabel untuk tunawicara yang dapat mengubah masukan
sebuah tulisan ke suara.

1.2. TUJUAN

1.2.1. Tujuan Umum

Tujuan umum dari pembuatan Proyek akhir ini adalah :

• Mendesain dan membuat alat yang murah dan mudah


dibawa (portabel ) sebagai alat bantu bicara untuk penyandang
tuna wicara.
• Membuat alat konversi dari teks ke suara berbasis
mikrokontroler

Dengan selesainya proyek akhir ini diharapkan dapat


menghasilkan suatu alat yang dapat mengubah isi teks manjadi suara
sehingga bermanfaat untuk membantu interaksi penyandang tuna wicara
yang memiliki keterbatasan untuk berkomunikasi.

1.2.2. Tujuan Khusus

Tujuan khusus dari proyek akhir ini adalah untuk


melengkapi kurikulum studi pada program Diploma IV di
Politeknik Elektronika Negeri Surabaya Institut Teknologi Sepuluh
Nopember Surabaya.

1.3. PERMASALAHAN

Adapun permasalahan pada pembuatan sistem ini adalah :

1. Membuat database suara dan menyimpannya di MMC (Multi


Media Card).
2. Mengakses database suara dari MMC.
3. Membuat software konversi dari teks ke fonem.
4. Membuat software konversi dari fonem ke suara.

1.4. BATASAN MASALAH

Batasan masalah dalam proyek akhir ini adalah :

1. Alat hanya dapat membaca kata-kata yang sesuai dengan isi


database fonem.
2. Tulisan yang dapat dibaca dengan tepat hanya yang sesuai
dengan ejaan bahasa indonesia yang benar (bukan berupa
singkatan).
3. Sistem ini tidak menampilkan pilihan untuk penerapan intonasi.
4. Sistem tidak dapat membaca tulisan berupa angka.
1.5. METODOLOGI

Metode yang digunakan dalam perencanaan dan penyelesaian


proyek akhir ini adalah :

1. Studi literatur
2. Pembuatan database fonem
3. Perancangan software untuk mengakses MMC
4. Perancangan software konverter teks ke fonem
5. Perancangan software konverter fonem ke suara
6. Integrasi sistem dan pengujian
7. Analisa sistem
8. Pembuatan laporan

1.6. SISTEMATIKA PEMBAHASAN

Sistematika pembahasan dalam proyek akhir ini adalah sebagai


berikut :

Bab I Pendahuluan

Menguraikan tentang latar belakang, tujuan, perumusan


masalah, batasan masalah, metodologi, dan sistematika pembahasan
masalah yang digunakan dalam pembuatan proyek akhir ini.

Bab II Teori Penunjang

Teori – teori berisi tentang pembahasan secara garis besar


sistem text to speech, mikrokontroller AVR ATmega8 , SPI,
MMC, PWM-DAC dan tools pendukung lainnya.

Bab III Perencanaan dan Pembuatan Software

Menguraikan tentang tahap-tahap perencanaan dan pembuatan


software dari protokol akses MMC, konversi teks ke fonem dan
konversi fonem ke suara.
Bab IV Pengujian Alat dan Analisa

Membahas tentang pengujian alat dan analisa software dari


sistem yang telah dibuat.

Bab V Penutup

Berisi tentang kesimpulan dan saran yang berdasarkan analisa


hasil data yang diperoleh.
BAB II
TEORI PENUNJANG

2.1. SISTEM TEXT TO SPEECH

Sistem Text to Speech pada prinsipnya terdiri dari dua sub


sistem, yaitu :

a) bagian Konverter Teks ke Fonem (Text to Phoneme), serta


b) bagian Konverter Fonem ke Ucapan (Phoneme to Speech).

Text to Phoneme to
Text Phoneme Speech Speech
(a) (b)

Gambar 2.1. Sistem Text To Speech

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 fonem, durasi serta pitch-nya. Bagian ini bersifat sangat
language dependant. Untuk suatu bahasa baru, bagian ini harus
dikembangkan secara lengkap khusus untuk bahasa tersebut.
Bagian Konverter Fonem ke Ucapan akan menerima masukan
berupa kode-kode fonem serta pitch dan durasi yang dihasilkan oleh
bagian sebelumnya. Berdasarkan kode-kode tersebut, bagian Konverter
Fonem ke Ucapan akan menghasilkan bunyi atau sinyal ucapan yang
sesuai dengan kalimat yang ingin diucapkan[4,hal.1].

2.2. MIKROKONTROLER ATmega8

Kontrol utama dari keseluruhan sistem pada proyek akhir ini


diproses oleh mikrokontroler ATmega8. Kelebihan dari ATmega8
sehingga digunakan sebagai kontrol utama adalah sebagai berikut:

ƒ Mempunyai performa yang tinggi (berkecapatan akses


maksimum 16MHz) dan tetapi hemat daya
ƒ Dimensi yang relatif kecil (28 pin)
ƒ Memori untuk program flash cukup besar yaitu 8K
Byte
ƒ Memori internal SRAM sebesar 1K Byte
ƒ EEPROM sebesar 512 byte yang dapat diprogram saat
operasi
ƒ Port komunikasi SPI
ƒ Komunikasi serial standar USART
ƒ Tersedia 3 chanel PWM
ƒ Tersedia 3 chanel timer/counter (2 untuk 8 bits dan 1
untuk 16 bits)
ƒ Dapat beroperasi pada tegangan rendah 4.5 - 5.5V.

Konfigurasi pin dan fungsinya tampak pada gambar 2.2.

Gambar 2.2. Konfigurasi pin ATmega8[5,hal.2]

2.3. MMC (Multi Media Card) [7,hal.1]

Penggunaan MMC semakin populer, tidak hanya untuk


menyimpan data digital pada kamera digital, handycam, mp3, mp4 dan
handphone. Bahkan teknologi mikrokontroler pun sudah mulai
menggunakan MMC sebagai media penyimpanan data menggantikan
EEPROM(Electrically Erasable Programmable Read Only Memory).
Konfigurasi pin-pinnya tampak pada gambar 2.3.

Gambar 2.3. Konfigurasi Pin MMC

2.3.1. SPI(Serial Peripheral Interface ) Mode

Merupakan cara mengkoneksikan MMC dengan


mikrokontroler. MMC dan mikrokontroler sudah memiliki fasilitas SPI
sehingga sangat mudah untuk menguhubungkannya. Kecepatan
aksesnya pun cukup tinggi yaitu mencapai 8 MHz.

2.3.2. Command dan respon

Untuk mengontrol kerja dari MMC diperlukan beberapa


command. Selain itu untuk mengetahui kondisi MMC setelah diberi
suatu command, dapat dilihat pada kondisi respon R1, R2, R3. Proses
transfer data dari MMC ke mikrokontroler atau sebaliknya dapat dilihat
pada gambar
Gambar 2.4. Command Frame MMC

2.3.3. SPI Command Set

Setiap command memiliki fungsi yang spesifik dan


menghasilkan respon(response ) yang berbeda. Ada beberapa command
yang terdapat pada MMC. Pada tabel 2.1. merupakan command
digunakan untuk mengakses MMC pada sistem ini.

Tabel 2.1. Command Set MMC

CMD Response Argument Fungsi


CMD0 R1 None(0) Reset
CMD1 R1 None(0) Proses inisialisasi card
CMD16 R1 Block Length (31:0) Mengatur panjang blok
CMD17 R1 Address 4 Bytes (31:0) Membaca blok MMC

2.3.4. SPI Respon

Setiap MMC memperoleh command maka MMC akan


memberikan respon. Pada MMC terdapat 3 macam format respon R1,
R2 dan R3. Untuk command-command diatas hanya menghasilkan
respon R1. Dari respon tersebut dapat diketahui jenis Error yang
terjadi, ditandai dengan nilai 1 pada bit yang bersesuaian. Jika tidak ada
Error maka R1 akan bernilai 00000000(biner).

Gambar 2.5. R1 Respon dari MMC


2.3.5. Write/Read MMC

Proses Write/Read ada 2 macam cara yaitu per blok (single


blok) atau multiple blok. Perbedaan dari kedua macam cara ini terletak
pada besar data yang ditransfer dalam sekali memberikan command.
Pada sistem ini hanya digunakan proses pembacaan (Read) dengan
metode single blok.

Gambar 2.6. Read single blok


Format paket data dari MMC tampak pada gambar 2.7.

Gambar 2.7. Format paket data

2.4 SPI (Serial Peripheral Interface Bus)

Serial Peripheral Interface Bus yaitu suatu terminal yang


menghubungkan antara terminal komunikasi data dari suatu peralatan ke
terminal komunikasi data peralatan lain[1,hal.28]. Fungsi dari Serial
Peripheral Interface Bus adalah untuk menjalankan pertukaran data
biner secara serial. Ada 2 macam mode SPI yaitu

1. Satu master, satu slave


2. Satu master, beberapa slave
Gambar 2.8. adalah hubungan Serial Peripheral Interface Bus
antara satu master dan satu slave.

Gambar 2.8. Satu Master Satu Slave

Keterangan:

¾ SCLK adalah serial clock . Sumber clock antara master dan


slave berasal dari satu sumber, sehingga rangkaian dapat lebih
sederhana. Slave mendapat clock dari Output master.
¾ MOSI (master Output , slave input) merupakan jalur
komunikasi data Output pada master yang dihubungkan ke jalur input
slave.
¾ MISO (master input, slave Output ) merupakan jalur
komunikasi data Output pada slave yang dihubungkan ke jalur input
master.
¾ SS (slave select) berfungsi sebagai jalur pengaktifan slave. SS
aktif low, slave akan aktif jika jalur SS ini mendapat sinyal low dari
Output master.
¾ Yang berfungsi sebagai master dalam komunikasi ini adalah
mikrokontroler sedangkan yang berfungsi sebagai slave adalah media
penyimpanan database suara (MMC).

Keuntungan lainnya jika di menggunakan SPI adalah


1. Hardware interface sederhana
2. Kecepatan transfer data sangat tinggi
3. Sedikit sekali menggunakan jumper (wire)
4. Tidak terbatas pada komunikasi 8 bits

2.5. Ace of WAV

Ace of WAV merupakan salah satu software yang mempunyai


kemampuan untuk mengolah suatu sinyal suara digital berformat WAV .
Properti yang dimiliki sebuah sinyal suara seperti amplitudo, frekuensi,
ukuran bit dan sebagaianya dapat dimodifikasi dengan mudah melalui
software ini. Software ini dapat di download secara gratis versi evaluasi
di http://www.polyhedric.com/software/ace[9].
Pada proyek akhir ini digunakan sebagai alat bantu untuk
melakukan perekaman, mengatur jumlah sampling sebanyak 2000
sample dan untuk menandai akhir data dari tiap-tiap fonem. Gambar 2.9.
menunjukkan tampilan dari Ace of WAV dan tampilan dari
samplingnya.

Gambar 2.9. Ace of WAV

2.6. WINHEX

WinHex dibuat oleh X-Ways Software Technology AG.


Merupakan sofware yang dapat menampilkan data sekaligus alamat
biner dari sebuah file. Selain itu juga dapat digunakan untuk
memanipulasi data per Byte dari sebuah file. Software ini dapat di
download secara gratis versi evaluasi di
http://winhex.en.softonic.com/download[10].
Pada proyek akhir ini digunakan sebagai alat bantu untuk
melihat alamat awal database suara yang tersimpan di MMC. Pada
gambar 2.10. merupakan tampilan WinHex .
Gambar 2.10. WinHex

2.7. CodeVisionAVR

CodeVisionAVR merupakan salah satu software compiler yang


khusus digunakan untuk mikrokontroler keluarga AVR. Meskipun
CodeVisionAVR termasuk software komersial, namun kita tetap dapat
menggunakannya dengan mudah karena terdapat versi evaluasi yang
disediakan secara gratis walaupun dengan kemampuan yang dibatasi.
CodeVisonAVR versi evaluasi ini dapat didownload di
http://www.hpinfotech.ro/html/download.htm[2,hal.122].
Beberapa kelebihan yang dimiliki oleh CodeVisionAVR antara
lain:

1. Menggunakan IDE(integrated Development Environment).


2. Fasilitas yang disediakan lengkap(mengedit program, meng-
compile program, mendownload program) serta tampilannya
terlihat menarik dan mudah dimengerti.
3. Mampu membangkitkan kode program secara otomatis dengan
fasilitas CodeWizardAVR.
4. Memiliki fasilitas untuk mendownload program langsung ke
mikrokontroler dengan hardware tambahan.
5. Meiliki fasilitas debugger sehingga dapat menggunakan
software compiler lain untuk mengecek kode assemblernya,
contohnya AVRStudio.
6. Memiliki terminal komunikasi serial yang terintegrasi dalam
CodeVisionAVR.

Pada gambar 2.11. merupakan tampilan dari software CodeVisionAVR.

Gambar 2.11. Tampilan CodeVisionAVR

2.8. PWM (Pulse Width Modulation)

Pulse Width Modulation (PWM) adalah sebuah cara


memanipulasi lebar dari pulsa dalam perioda yang konstan untuk
mendapatkan tegangan rata-rata yang berbeda[13].
Gambar 2.12. Sinyal PWM dengan berbagai Duty cycle

Pada gambar 2.12. menunjukkan tiga sinyal PWM yang


berbeda. Sinyal yang paling atas menunjukkan sinyal PWM dengan duty
cycle 20%. Artinya sinyal on selama 20% dari periode sinyal dan off
selama 80 % sisanya. Gambar yang lainnya menunjukkan sinyal dengan
duty cycle 50% dan 90%. Ketiga sinyal PWM tersebut akan
menghasilkan sinyal analog yang berbeda. Sebagai contoh jika supply
tegangan sebesar 9V dan duty cycle 20%, maka menghasilkan (20% x
9V) 1,8V.

Gambar 2.13. Pulsa PWM

Untuk mengetahui nilai duty cycle dan tegangan Output ,


digunakan persamaan 2.1.
t
V0 = 1 VS ...........................................2.1.
T
Vo : Tegangan Output (Volt)
VS : Tegangan Pulsa PWM (Volt)
t1 : Periode Pulsa high (Second)
T : Priode Pulsa (Second)
”Halaman ini sengaja dikosongkan”
BAB III
PERENCANAAN DAN PEMBUATAN SOFTWARE

Pada bab ini akan dibahas mengenai perencanaan dan


pembuatan database suara, software konversi teks ke fonem, akses ke
MMC dan konversi ke sinyal analog.

3.1. Diagram sistem

Diagram sistem proyek akhir ini dapat dilihat pada gambar 3.1.

KEYPA LCD
MIKRO
KONTROLER
MMC
FILTE

SPI PWM

SPEAKER AMPLIFIE
: ruang lingkup software yang dikerjakan dalam proyek akhir ini

Gambar 3.1. Diagram sistem

Mikrokontroler akan mengambil data teks kalimat dari keypad


untuk dipecah menjadi per kata kemudian dipecah lagi menjadi per suku
kata(fonem). Setelah itu mikrokontroler akan mencari alamat database
suara fonem yang ada di dalam MMC. Sebelumnya telah dilakukan
proses pembuatan database suara tiap-tiap fonem ynag disimpan dalam
MMC dalam format WAV . Jika alamat database fonem sudah
ditemukan maka dilakukan proses pengambilan 1Byte data suara dari
MMC ke RAM mikrokontroler melalui SPI.
Untuk mengubah data suara digital ini ke analog menggunakan
metode PWM dengan frekuensi PWM 62.5Khz. Data suara digital
diambil dari MMC dan dikonversi ke analog dilakukan dengan periode
125us yaitu sesuai frekuensi sampling yang digunakan 8Khz.
Setelah satu proses konversi selesai, mikrokontroler akan
mengkonversi 1byte data suara selanjutnya dan terus demikian sampai
semua fonem suara selesai dikonversi. Pada Gambar 3.2. merupakan
aliran data sekuensial dari MMC ke speaker.

ATmega

Gambar 3.2. Aliran data dari MMC ke speaker

Sedangkan untuk proses konversi ke sinyal analog tampak pada


gambar 3.3.

ATmega8 membaca Mengkonversi ke 4 orde LPF


Data dari MMC via SPI sinyal PWM Sallen-Key

Rekonstruksi sinyal
melalui speaker

Gambar 3.3. Proses rekonstruksi sinyal analog


Pada gambar 3.3. Atmega8 akan mengambil 1Byte data dari
MMC via SPI kemudian akan dikonversi menjadi nilai duty cycle pada
Output PWM. Sinyal yang masih kasar ini akan dihaluskan dengan 4
orde LPF(Low Pass Filter) sehingga suara yang dihasilkan melalui
speaker lebih halus.

3.2. Flowchart sistem

start

inisialisasi

Baca keypad

Tampilkan ke LCD

Ubah ke N
suara?
Y

Konversi teks
ke fonem

Ambil database
MMC

DAC
(PWM)

Filter &Ampli

speaker

end

Gambar 3.4. Flowchart sistem keseluruhan


Pada gambar flowchart 3.4. mikrokontroler akan menampilkan
hasil tulisan yang diketik melalui keypad pada LCD. Jika tombol
ENTER ditekan maka kalimat yang ada pada LCD akan dikonversi
menjadi suara. Setelah itu proses akan kembali ke awal lagi.

3.3. Pembuatan database suara fonem(suku kata)

Proses pembentukan suara dari suatu suatu kata dilakukan


dengan cara penggabungan per suku kata. Misalnya kata “saya” maka
untuk menghasilkan suara dari kata tersebut diperlukan suara “sa” dan
“ya”.
Berdasarkan hal tersebut pembuatan database fonem dilakukan
dengan mendata kemungkinan-kemungkinan kombinasi dari suku kata
yang muncul dalam suatu kata. Berikut ini beberapa kemungkinan
fonem-fonem dalam bahasa Indonesia :

1. KVKK : peng, rang… (peng-ha-sil-an, pe-rang-kat,…)


2. KKVK : gram, krab… (di-a-gram, a-krab,…)
3. KVK : ban, kan… (ban-ding, i-kan,…)
4. KKV : pro, kla… (pro-kla-ma-si,…)
5. VKK : ang, ong… (ang-sa, ong-kos,…)
6. KV : sa, ya… (sa-ya,…)
7. VK : al, an… (al-qur-an,…)
8. V : a, i, u… (a-ku, i-tu, u-lar,…)
Daftar fonem selengkapnya dapat dilihat di lampiran 1.

Setelah semua fonem ditentukan maka dikelompokan menurut


jumlah huruf dan susunan konsonan-vokalnya. Kemudian diurutkan
secara alphabetic, hali ini dilakukan agar terbentuk pola yang teratur
sehingga memudahkan dalam pemrogramannya. Dalam proyek akhir ini
fonem yang dibuat berjumlah 1170.
Perekaman dapat dilakukan dengan menggunakan microphone
yang dihubungkan ke komputer. Kemudian mengucapkan suatu kata
yang mengandung fonem yang diinginkan. Diucapkan per kata agar
struktur fonem terdengar alami. Hasil rekaman tadi kemudian dipotong
dan diambil bagian fonem yang diinginkan dengan bantuan software
Ace of WAV . Pada saat mengucapkan hendaknya dilakukan dengan
jelas dan sedatar mungkin(tanpa intonasi). Selain itu agar didapatkan
rekaman yang jernih sebaiknya menggunakan perangkat perekaman
berkualitas tinggi.
Metode pembuatan database suara diatas telah dicoba tetapi
mengingat jumlah fonem sebanyak 1170 maka kualitas hasil perekaman
kurang optimal. Kesulitannya terletak pada pengucapan tanpa intonasi
tetapi harus sejelas mungkin dan durasi waktu yang normal, hal ini tentu
berlawanan dengan kebiasaan pengucapan sehari-hari yaitu jika ingin
jelas maka menggunakan intonasi dengan durasi yang lama. Kesulitan
yang lainnya adalah amplitudo yang berubah-rubah saat kata diucapkan
dan adanya noise.
Berdasarkan alasan tersebut dilakukan metode pembuatan
database dengan bantuan software IndoTTS V0.9.24. IndoTTS adalah
software Text To Speech berbahasa Indonesia, dalam proyek ini
digunakan untuk menghasilkan suara yang kemudian direkam dalam
format WAV dengan software Ace of WAV. Suara direkam dengan
kualitas 8 bit, mono, kecepatan sampling 8KHz.

Audio Out
Teks Indo TTS
Keyboard
Ace of WAV Audio In

MMC

USB
PC
Gambar 3.5. Metode pembuatan database suara

Semua fonem disimpan dalam satu file. untuk fonem yang


berpola KKVK, KKV dan VKK dijadikan satu file dan disimpan dalam
file yang berbeda, disebabkan fonem-fonem ini memiliki kombinasi
huruf yang tidak sama sehingga tidak bisa dicari polanya.
Fonem diatur agar memiliki ukuran maksimal yang sama yaitu
2000 sample, bertujuan agar terbentuk pola yang teratur pada nilai
alamat database fonem sehingga memudahkan pemrogramannya. Nilai
2000 dipilih karena rata-rata lebar sample dari satu fonem tidak lebih
dari 2000 sample. Untuk mengatur ukuran sample digunakan alat bantu
software Ace of WAV . Pada gambar 3.6. dapat dilihat data rekaman
fonem.

Gambar 3.6. Sinyal fonem

Pada gambar 3.6. terlihat 3 buah sinyal fonem ditunjukkan


dengan gambar sinyal yang berwarna merah.Terlihat yang ditandai
dengan pola oval berwarna hitam merupakan alamat sample 2000
sampai dengan 4000. Ini menunjukkan alamat sinyal pada daerah yang
diblok dengan warna biru muda. Untuk mengatur agar fonem berada
pada range kelipatan 2000 sesuai urutan perekamannya maka perlu
membuang bagian sinyal yang datar.
Teknik membuang bagian sinyal yang datar dengan cara
memblok bagian awal dari informasi sinyal sebenarnya(ditunjukkan
dengan adanya fluktuasi amplitudo). Bagian yang diblok dapat
dihilangkan dengan cara menekan tombol Delete pada keyboard atau
pada tool bar. Pada gambar 3.7. terlihat bagian yang akan dihilangkan.
Gambar 3.7. Bagian sinyal yang akan dihapus

Selanjutnya pada gambar 3.8. akan didapatkan gambar sinyal


pertama dengan alamat awal sample 0 dan sinyal kedua dengan alamat
awal sample 2000. Sehingga akhir dari sinyal kedua berada di alamat
sample 4000 yang ditunjukkan oleh tanda oval berwarna hitam.
Proses tersebut terus dilakukan sampai semua fonem memiliki
range lebar yang sama yaitu 2000 sample tiap fonem. Untuk
memudahkan pengecekan alamatnya dengan jenis fonemnya maka
terlebih dahulu dibuat daftar urutan fonem-fonem dalam format excel
beserta nilai alamatnya dalam kelipatan 2000. Tabel ini dapat dilihat
pada lampiran1.
Gambar 3.8. Sinyal setelah diatur

Mengingat panjang informasi fonem sebenarnya kurang dari


2000 sample dan antara fonem satu dan lain ukurannya berbeda maka
perlu diberi tanda akhir data suatu fonem. Penandaan ini dapat dilakukan
dengan menyisipkan data bernilai 1 sepanjang 1 sample di akhir sinyal
dari fonem. Nilai 1 ini akan dikenali sebagai akhir data dari sebuah
fonem. Agar tidak terjadi kesamaan nilai antara tanda akhir fonem dan
nilai amplitudo dari sinyal, maka nilai sinyal dibatasi tidak boleh kurang
dari 48. Hal ini dapat dilakukan dengan menghapus nilai amplitudo
sinyal yang kurang dari 48.
Pada software Ace of WAV dapat dengan mudah dilakukan
dengan menggunakan command “clip” pada tool bar. Properti command
ini dapat diatur dengan cara right-click pada command tersebut. Pada
gambar 3.9. terlihat beberapa properti yang digunakan untuk menghapus
nilai amplitudo sinyal yang berada diatas atau dibawah nilai threshold.
Gambar 3.9. Mengatur nilai threshold

Untuk menyisipkan data bernilai 1 sepanjang 1 sample di akhir


sinyal dari fonem dengan menggunakan command “copy” kemudian
“paste mix”. Command “copy” digunakan untuk menduplikasi nilai 1
dari sinyal lain kemudian dengan menggunakan command “paste mix”
hasil duplikasi tersebut dimasukkan pada akhir bunyi dari fonem sebagai
tanda akhiran. Pada gambar 3.10. semua nilai maksimum sinyal adalah
175 sedangkan nilai minimum sinyal adalah 48. Selain itu juga telah
diberi tanda di setiap akhir bunyi suatu fonem.
Gambar 3.10. Sinyal yang telah ditandai

Semua sinyal yang sudah diatur ini kemudian disimpan di


MMC sebagai database suara fonem.

3.4. Perancangan software konversi teks ke fonem

Kalimat yang diketik melalui keypad akan dipecah menjadi per


kata kemudian akan dipecah lagi menjadi per suku kata. Untuk
memecah kalimat menjadi per bagian kata dapat dilakukan dengan
melihat tanda spasi antar kata yang satu dengan kata yang lain.
Sedangkan untuk memecah kata menjadi menjadi suku kata memerlukan
algoritma khusus.
Misal kalimat: “aku sedang makan” jika dipecah per suku kata
menjadi “a-ku se-dang ma-kan”. Pada bahasa Indonesia satu suku kata
dapat terdiri dari 1 huruf sampai dengan 4 huruf. Berikut ini adalah
kemungkinan fonem-fonem dalam bahasa Indonesia berdasarkan jumlah
huruf dan susunan vokal-konsonannya.

Aturan(rule ):
1. KVKK : peng, rang… (peng-ha-sil-an, pe-
rang-kat,…)
2. KKVK : gram, krab… (di-a-gram, a-krab,…)*
3. KVK : ban, kan… (ban-ding, i-kan,…)
4. KKV : pro, kla… (pro-kla-ma-si,…)*
5. VKK : ang, ong… (ang-sa, ong-kos,…)*
6. KV : sa, ya… (sa-ya,…)
7. VK : al, an… (al-qur-an,…)
8. V : a, i, u… (a-ku, i-tu, u-lar,…)
(*) : menggunakan look up table

Berdasarkan karakteristik fonem-fonem tersebut dapat


digunakan untuk mengenali fonem dari suatu kata. Untuk fonem yang
berpola(*) KKVK, KKV dan VKK menggunakan look up table karena
jenis fonem ini memerlukan perlakuan khusus disebabkan komposisi
hurufnya tidak beraturan. Pada gambar 3.11. merupakan Flowchart
Konverter Teks ke Fonem.

start

N=4

Ambil sebanyak N huruf dari


belakang

N
N huruf = rule N--
(K-V) untuk N

Y
N huruf=fonem
geser pointer ke kiri

N
Huruf habis?

end

Gambar 3.11. Flowchart Konverter Teks ke Fonem


Penjelasan dari flowchart pada gambar 3.11. adalah sebagai
berikut:

1. N=4.
Jumlah huruf maksimum suatu fonem adalah 4 karakter.
Dimulai dari nilai maksimum untuk menghindari kesalahan
pengelompokan jenis fonem dengan nilai yang kurang dari 4.
Oleh sebab itu nilai maksimum diprioritaskan terlebih dahulu.
2. Ambil sebanyak N huruf dari belakang.
Hal ini dilakukan untuk memprioritaskan jenis akhiran yang
terdiri dari 4 huruf, seperti “ri-ngan” dan sebagainya.
3. N huruf = rule (K-V) untuk N huruf?.
Huruf yang sudah diambil sebanyak N buah susunan konsonan
dan vokalnya akan dibandingkan dengan aturan untuk yang
berjumlah N buah huruf.
Jika tidak ada yang sama maka N huruf tersebut bukan
merupakan fonem.
N--.
Kurangi satu jumlah huruf yang akan diambil dan kembali
lakukan lagi langkah 1 diatas.
Jika Nhuruf sama dengan aturan untuk Nhuruf maka lakukan
langkah 4 dibawah.
4. N huruf=Fonem.
Jika sama, maka N huruf tersebut adalah sebuah fonem.
Geser pointer ke kiri.
Dilakukan pergeseran tanda pointer 4baris untuk bagian huruf
sebelah kiri dari fonem tersebut.
5. Huruf habis?.
Jika huruf pada bagian kiri sudah tidak ada maka proses
konversi dari seluruh kalimat sudah selesai.
Jika masih ada huruf pada bagian kiri maka proses dimulai lagi
dari langkah 1 diatas, tetapi dengan nilai pointer yang sudah
digeser kekiri 4 baris pada langkah 4 diatas.

Berikut ini adalah contoh dari proses konversi kata “ringan”


menjadi per fonem “ri-ngan”.

1. N=4. Pointer diletakkan pada huruf keempat dari kanan (huruf


“n” tengah ).
2. Diambil 4 huruf kekanan dimulai dari titik pointer sehingga
diadapatkan kombinasi karakter “ngan”.
3. Susunan konsonan-vokal dari kombinasi ini yaitu KKVK akan
dicocokan dengan aturan untuk 4 huruf. Ternyata hasil dari
pencocokan ini adalah sesuai.
4. jika sesuai maka kombinasi huruf ini dinyatakan sebagai
sebuah fonem. Geser pointer kekiri sebanyak 4 karakter.
5. Karena huruf di sebelah kiri fonem “ngan” masih ada maka
proses akan dimulai lagi pada langkah 1.
6. N=4. Pointer diletakkan pada karakter keempat dari kanan
setelah fonem tadi (karena melebihi batas karakter pertama
maka pointer menunjuk karakter”[]”).
7. Diambil 4 huruf kekanan dimulai dari titik pointer sehingga
diadapatkan kombinasi karakter “[][]ri”.
8. Susunan konsonan-vokal dari kombinasi ini yaitu [][]KV akan
dicocokan dengan aturan untuk 4 huruf. Ternyata hasil dari
pencocokan ini tidak ada yang sesuai. N--,jumlahn karakter
yang akan diambil untuk proses berikutrnya dikurangi satu
sehingga berjumlah 3 huruf.
9. N=3. Pointer diletakkan pada karakter ketiga dari kanan
setelah fonem tadi (karena melebihi batas karakter pertama
maka pointer menunjuk karakter”[]”).
10. Diambil 3 huruf kekanan dimulai dari titik pointer sehingga
diadapatkan kombinasi karakter “[]ri”.
11. Susunan konsonan-vokal dari kombinasi ini yaitu []KV akan
dicocokan dengan aturan untuk 3 huruf. Ternyata hasil dari
pencocokan ini tidak ada yang sesuai. N--,jumlahn karakter
yang akan diambil untuk proses berikutrnya dikurangi satu
sehingga berjumlah 2 huruf.
12. N=2. Pointer diletakkan pada karakter kedua dari kanan
setelah fonem tadi (huruf “r” pertama ).
13. Diambil 2 huruf kekanan dimulai dari titik pointer sehingga
diadapatkan kombinasi karakter “ri”.
14. Susunan konsonan-vokal dari kombinasi ini yaitu KV akan
dicocokan dengan aturan untuk 2 huruf. Ternyata hasil dari
pencocokan ini adalah sesuai.
15. jika sesuai maka kombinasi huruf ini dinyatakan sebagai
sebuah fonem. Geser pointer kekiri sebanyak 4 karakter.
16. Karena huruf di sebelah kiri fonem “ri” tidak ada maka proses
akan berakhir.

3.5. Pembuatan software konversi teks ke fonem

Proses pembuatan program konversi teks ke fonem dilakukan


dengan bantuan software Microsoft Visual C++ 6.0. Dengan
menggunakan software ini dapat dilakukan simulasi secara praktis dan
cepat. Hal ini karena tidak membutuhkan hardware seperti
mikrokontroler, Keypad maupun LCD. Selain itu tidak memakan waktu
yang lama karena tidak perlu mendownload program ke mikrokontroler.
Pada gambar 3.12. merupakan tampilan software ini.

Gambar 3.12. Tampilan Microsoft Visual C++ 6.0.

Jenis-jenis fonem yang dijadikan aturan atau referensi


pembanding terlebih dahulu dideklarasikan dalam bentuk array . Pada
gambar 3.13. adalah pendeklarasian variabel-variabel tersebut didalam
bahasa C++.
char rule [][5]={

"kvkk",
"kkvk",
"kvk",
"kkv",
"vkk",
"kv",
"vk",
"v",
"k",
"_",
};

Gambar 3.13. Deklarasi referensi pembanding

Untuk jenis fonem yang berpola KKVK, KKV dan VKK jenis
fonem katanya di deklarasikan satu per satu dalam array sehingga
membentuk look up table. Jika kombinasi huruf yang akan dikonversi
ini berada di look up table, maka dinyatakan sebagai fonem. Fonem-
fonem ini memerlukan look up table disebabkan kombinasi hurufnya
tidak beraturan. Pada gambar 3.14. merupakan cuplikan dari deklarasi
fonem-fonem ini.

char kkvk[][5]={
"blis",
"brak",

char kkv[][4]={
"bri",
"dra",

char vkk[][4]={
"ang",
"ing",

Gambar 3.14. Deklarasi fonem KKVK, KKV dan VKK

Setelah semua variabel yang diperlukan dideklarasikan maka


langkah pertama dalam program yaitu mengubah kalimat dalam bentuk
pola konsonan dan vokal. Untuk melakukannya digunakan program
pada gambar 3.15.

panjang=strlen(a);
p=a;
printf("a2=");
for(i=0;i<panjang;i++){
if ((*p=='a')||(*p=='i')||(*p=='u')||(*p=='e')||(*p=='o'))
a2[i]='v';
else if ((*p=='_')||(*p=='0'))
a2[i]='_';
else
a2[i]='k';
*p++;
putchar(a2[i]);
}

Gambar 3.15. Program konversi ke pola konsonan dan vokal

Pada program 3.15. huruf vokal akan dinyatakan dalam huruf


‘v’ sedangkan konsonan akan dinyatakan dalam huruf’k’. Hasil konversi
dari kalimat atau kata dalam array a[ ] tersebut akan disimpan dalam
array a2[ ].

Hasil konversi dalam bentuk konsonan dan vokal kemudian


akan dikonversi menjadi per fonem dengan cara membandingkan
dengan aturan-aturan jenis fonem yang sudah dideklarasikan pada array
rule [ ]. Berikut ini merupakan cuplikan program untuk mencocokkan
pola kata input dengan pola fonem referensi yang terdiri dari 4 huruf.

suku++; ofset+=4; urut=0;


lebar=4;
memcpy(b,a2+panjang-ofset,lebar);
hasil=strncmp(b,rule [urut],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);
}

Gambar 3.16. Program konversi ke fonem untuk 4 huruf

Variabel “suku” menyatakan pointer posisi huruf sedangkan


variable “ofset” digunakan untuk mengatur penempatan pointer sesuai
yang diinginkan pada kalimat. Variabel “urut” sebagai pointer array
“rule [ ] dan variable “lebar” menyatakan banyaknya huruf yang akan
diproses. Fungsi “memcpy(b,a2+panjang-ofset,lebar)” digunakan untuk
menyalin string “a2” dengan pointer yang sudah ditambah “panjang-
ofset” , ke dalam string “b” sebanyak “lebar” karakter. Fungsi
“hasil=strncmp(b,rule [urut],lebar);” digunakan untuk membandingkan
string “b” dengan string “rule [urut]” sebanyak “lebar” karakter, jika
hasil perbandingan kedua string tersebut sama maka variable “hasil”
akan bernilai 0 sehingga kumpulan huruf tersebut dinyatakan sebagai
sebuah fonem.
Jika hasil perbandingan tidak sama maka akan dicocokkan
dengan rule yang lain. Proses tersebut akan terus berulang mulai dari
mecocokkan sebanyak 4 huruf sampai dengan 1 huruf.

3.6. Perancangan software untuk mencari alamat fonem di


dalam MMC

Suara rekaman tiap-tiap fonem yang disimpan didalam MMC


memiliki alamat tertentu sesuai urutan penyimpanan dari tiap fonem
tersebut. Fonem-fonem ini telah disesuaikan agar memiliki ukuran yang
sama yaitu 2000Byte dan disimpan dalam 1 file. Untuk fonem-fonem
yang berpola “kkvk, kkv dan vkk” disimpan dalam file yang berbeda.
Penyesuaian ini akan mempermudah didalam pencarian alamat fonem
tersebut di dalam MMC. Contoh fonem huruf “b”telah disimpan setelah
huruf “a”(fonem urutan pertama) sesuai abjad. Jika sebuah fonem
mempunyai ukuran 2000Byte maka alamat huruf “b” pasti berada di
2000Byte setelah huruf”a”. Hal ini berlaku untuk fonem-fonem yang
lain dengan patokan huruf “a”. Fonem-fonem ini disusun menggunakan
Microsoft Excel sehingga mempermudah pembuatan tabel seluruh jenis
fonem beserta alamatnya dengan kelipatan 2. Nilai alamat ini masih
harus dikalikan dengan 1000 agar sesuai dengan alamat sebenarnya pada
MMC. Pada gambar 3.17. merupakan cuplikan dari tabel ini.
Gambar 3.17. Cuplikan tabel seluruh fonem beserta alamatnya

Untuk mencari alamat heksa fonem huruf (suara) “a” didalam


MMC digunakan software WinHex. Software ini dapat menampilkan
alamat sekaligus data yang tersimpan didalam MMC. Untuk mencari
alamat file berformat *.WAV dengan cara mencari data dengan ASCII
“RIFF”. Struktur format *.WAV dapat dilihat pada gambar 3.18.[11].

Gambar 3.18. Struktur format *.WAV


Pada gambar 3.18. dapat dilihat bahwa suatu file berformat
*.WAV datanya pasti diawali dengan ASCII “RIFF” kemudian diikuti
dengan berbagai spesifikasi file tersebut. Software WinHex dapat
digunakan untuk mencari ASCII tersebut dengan menggunakan tool
search. Untuk mengamati data yang tersimpan didalam MMC
digunakan command Disk Editor. Pada gambar 3.19. merupakan
tampilan software ini.

Gambar 3.19. Tool “search” software WinHex

Tanda oval yang berwarna hitam menunjukkan tool “search”


sedangkan yang berwarna merah menunjukkan tool “Disk Editor”.
Alamat data dalam bentuk heksa ditunjukkan pada label “offset”.

3.7. Pembuatan software untuk menentukan alamat fonem di


dalam MMC

Fonem yang terdiri dari 1 huruf dapat ditentukan alamatnya


dengan cara mencari nilai ASCII dari huruf tersebut dikurangi dengan
ASCII ”a” kemudian dikalikan dengan kelipatan 2. Nilai alamat ini
masih harus dikalikan dengan 1000 agar sesuai dengan alamt di MMC.
Pada gambar 3.20. merupakan cuplikan program untuk menentukan
alamat 1huruf.

p=kata[suku];
if ((*p>='a')&&(*p<='z'))
nilai=(unsigned int)(*p-'a')*2

Gambar 3.20. Cuplikan program menentukan alamat untuk 1 huruf

Pointer “p” ditempatkan pada fonem(array kata[]) kemudian


jika huruf yang ada di pointer ini berada diantara huruf ”a” sampai “z”
maka nilai ASCII dari huruf ini dikurangi dengan ASCII “a” agar
didapatkan nilai satuan dan dikalikan dengan 2(merupakan kelipatan
besar data tiap fonem yang masih belum dikali 1000). Nilai alamat dari
fonem ini disimpan di dalam variabel hasil. Misalkan huruf yang ingin
dicari alamtnya adalah huruf “a” maka alamat dari fonem ini adalah nilai
ASCII “a”(0x61) dikurangi dengan nilai ASCII “a” (0x61) dikalikan 2
maka hasilnya adalah 0.
Jika terdiri dari 2 huruf maka fonem tersebut bisa tersusun atas
“vk” atau “kv”. Untuk fonem yang berpola “vk” kombinasi vokalnya
terdiri dari huruf “a,i,u,e,o” sedangkan untuk konsonannya terdiri dari
”b,f,h,k,l,m,n,r,s,t” yang disusun secara alphabetic. Berdasrkan pola
tersebut dapat dibentuk program untuk menentukan alamatnya. Pada
gambar 3.21. merupakan cuplikan program untuk penentuan alamat
fonem berpola”vk”.
p=kata[suku];
if ((*p=='a')||(*p=='i')||(*p=='u')||(*p=='e')||(*p=='o')){
if (*p=='a')
nilai=52;
else if (*p=='e')
nilai=72;

*p++;
if (*p=='b')
nilai+=0;
else if (*p=='f')
nilai+=2;

Gambar 3.21. Penentuan alamat untuk pola “vk”


Jika huruf pertama fonem tersebut adalah “a” maka variabel
nilai akan bernilai 52. Nilai ini berasal dari tabel fonem yang berpola
“vk” yaitu urutan pertama dengan huruf awal “a”. Kemudian jika huruf
kedua adalah “b” maka variabel nilai akan ditambah dengan 0. Nilai ini
sesuai urutan didalam tabel. Sehingga hasil dari alamat fonem “ab” pada
varabel nilai adalah 52(sesuai tabel).
Fonem yang berpola “kv” memiliki algoritma yang berbeda.
Hal ini disebabkan jika suatu fonem memiliki jumlah kombinasi yang
berbeda maka metode penentuan alamatnya juga berbeda. Untuk fonem
ini kombiansi konsonan dan vokalnya berkebalikan dengan yang berpola
“vk”. Pada Gambar 3.22. merupakan cuplikan program untuk penentuan
alamat fonem berpola”kv”.
if ((*p>'a')&&(*p<'e'))
nilai=(unsigned int)(*p-'b')*10+152;
else if((*p>'e')&&(*p<'i'))
nilai=(unsigned int)(*p-'b')*10+142;

*p++;
if (*p=='a')
nilai+=0;
else if (*p=='i')
nilai+=2;//3;
else if (*p=='u')

Gambar 3.22. Penentuan alamat untuk pola “kv”

Misalnya huruf pertama adalah “b” maka variabel nilai akan


bernilai (‘b’-‘b’)*10+152 sehingga hasilnya 152. Pengurang “b”
digunakan untuk mendapatkan nilai satuan. Nilai 10 pada persamaan ini
berasal dari jumlah kombinasi vokalnya 5 (“a,i,u,e,o”) dikali dengan
besar data tiap fonem 2(masih belum dikali 1000). Sedangkan nilai 152
merupakan alamat pertama fonem jenis “kv”ini disimpan.
Algoritma untuk penentuan alamat fonem-fonem yang lain
memiliki dasar algoritma yang sama. Penentuan alamtnya berdasarkan
nilai ASCII , susunan(urutan) penyimpanan, jumlah kombinasi dan besar
data yaitu 2000Byte. Sedangkan untuk fonem yang berpola “kkvk, kkv
dan vkk” penentuan alamat melihat urutan penyimpanannya di dalam
look up table dan di dalam MMC.
Pada gambar 3.23. merupakan cuplikan program untuk
menentukan alamat fonem yang berpola “vkk”.
nilai=i*2;
alamat[j]=nilai+5000;
j++;

Gambar 3.23. Penentuan alamat untuk pola “vkk”

Alamat dari fonem ini dismpan dalam variabel nilai yang


ditentukan dari i*2 kemudian ditambah 5000. variabel “i” ini adalah
pointer pada array vkk[ ] yang menunjukkan jenis fonemnya dalam
look up table. Nilai 2 merupakan kelipatan besar data 2000Byte sebelum
dikalikan 1000. Penambahan 5000 dimaksudkan untuk membedakan
jenis fonem “kkvk, kkv dan vkk” dengan yang lain. Hal ini disebabkan
penyimpanan file di dalam MMC untuk jenis fonem-fonem ini berbeda
dengan file fonem yang lain.

3.8. Perancangan software akses ke MMC

Pada sistem ini frekuensi Output sampling suara yang


digunakan adalah 8KHz sehingga frekuensi untuk proses transfer 1Byte
data dari MMC ke ATmega8 harus lebih besar dari 8KHz. Pada MMC
untuk mode SPI mendukung transfer data dengan frekuensi sampai
dengan 20MHz [3] sedangkan ATmega8 memiliki frekuensi SPI
maksimum 8MHz. Pada sistem ini digunakan frekuensi SPI 8MHz
sehingga sangat mencukupi untuk proses Output sampling suara 8KHz.
Pada ATmega8 sudah tersedia port khusus untuk interface SPI
sehingga kita cukup mengatur register yang diperlukan untuk jenis
komunikasi ini. Register yang digunakan dalam SPI ini adalah SPI
Control Register(SPCR) dan SPI status Register (SPSR). Pada gambar
3.24. merupakan keterangan dari register SPCR.

Gambar 3.24. Register SPCR ATmega8


• Bit 7 – SPIE : SPI Interrupt Enable
SPIE digunakan untuk mengaktifkan dan menon-aktifkan
interupsi SPI.
• Bit 6 – SPE : SPI Enable
SPE digunakan untuk mengaktifkan dan menon-aktifkan
komunikasi SPI.
• Bit 5 – DORD : Data Order
DORD digunakan untuk menentukan pola pengiriman data.
• Bit 4 – MSTR : Master/Slave Select
MSTR digunakan untuk mengkonfigurasi sebagai master atua
slave secara software.
• Bit 3 – CPOL : Clock Polarity
CPOL digunakan untuk menentukan kondisi logika clock
pada saat tidak bekerja (idle).
• Bit 2 – CPHA : Clock Phase
CPHA digunakan untuk menentukan waktu pengambilan data
pada transisi clock.
• Bit 1:0 – SPSR1:0 : Spi Clock Rate Select
SPR1 dan SPR0 digunakan untuk menentukan kecepatan clock
yang digunakan dalan komunikasi SPI seperti pada tabel 3.1.

Tabel 3.1. Hubungan Frekuensi SCK dan Oscillator

Pada gambar 3.25. merupakan keterangan register SPSR


Gambar 3.25. Register SPSR ATmega8

• Bit 0 – SPI2X : Double SPI Speed Bit


SPI2X digunakan untuk melipatgandakan kecepatan SCK
menjadi 2 kali

Pada sistem ini proses yang dilakukan untuk akses ke MMC


adalah sebagai berikut:

1. Inisialisasi MMC
Inisialisasi ini cukup dilakukan sekali pada saat alat dinyalakan.
Pada gambar 3.26. merupakan flowchart inisialisasi MMC
dalam mode SPI.
start

CS ‘low’
Kirim 80 clock
CS ‘high’

Kirim CMD 0 + 8Clock

N
Respon
ok?
Y

Kirim CMD 1 + 8Clock

N Respon
ok?
Y

end
Gambar 3.26. Flowchart inisialisasi MMC
Prosedur Inisialisasi MMC pada SPI mode
a. Disable chip select.
b. Kirim 80 clock untuk memulai komunikasi.
c. Enable chip select (active low).
d. Kirim CMD0 (reset MMC).
e. Kirim 8 clock delay.
f. Tunggu sampai memperoleh response 0x00 dari
MMC, jika ada Error ulang proses diatas.
g. Kirim 8 clock delay.
h. Kirim CMD1 (inisialisasi MMC).
i. Kirim 8 clock delay.
j. Tunggu sampai memperoleh response 0x00 dari
MMC, jika ada Error ulang proses diatas.

2. Membaca data dari alamat yang diinginkan.


Data yang dapat diambil dari MMC adalah sebanyak
512Byte dalam sekali pengalamatan. Pada gambar 3.27.
merupakan flowchart untuk mengambil data dari MMC.

start

Kirim ‘CMD17’+’Haddress’+
‘Laddress’+’CRC’

N
Response
MMC=0?
Y

N Error Handler
Data Token
MMC=FE?
Y

Ambil Data
512 Byte

end

Gambar 3.27. Flowchart membaca data dari MMC


Proses pembacaan data dari MMC dilakukan dengan proses
sebagai berikut:

• Mikrokontroler mengirimkan data ke MMC yang berupa 1Byte


command Read(CMD17), 4Byte address data yang ingin
diambil dan 1Byte CRC(dummy byte).
• Kemudian MMC mengirimkan balasan ke mikrokontroler yaitu
1Byte data response dari command Read tersebut.
• Jika tidak ada Error maka data response ini akan bernilai 0
yang kemudian MMC akan mengirimkan data aktual dari
alamat yang diminta dengan diawali data token 0xFE(heksa).

3.9. Pembuatan software akses ke MMC

Pada saat alat baru dinyalakan maka perlu dilakukan


inisialisasi pada ATmega8 dan MMC pada mode SPI. Pada gambar
3.28. merupakan cuplikan program untuk inisialisasi ATmega8 pada
mode SPI.

DDRB.2 = 1; //Output chip


select
DDRB.3 = 1; //Output MOSI
DDRB.4 = 0; //input MISO
DDRB.5 = 1; //Output SCLK
SPCR = 0b01010011 ;
SPSR = 0;
PORT B.2= 0;//MMC select

Gambar 3.28. Inisialisasi ATmega8 pada mode SPI

Port sebagai Output data (MOSI), Control chip select(CS),


dan Output clock (SCK) harus diset sebagai port Output . Sedangkan
port sebagai input data (MISO) dari MMC harus diset sebagai port
input. Register SPCR digunakan untuk mengatur enable SPI, ATmega8
sebagi master dan bersama register SPSR menetukan frekuensi awal
SCK 125KHz. Pada mode inisialisasi frekuensi SCK tidak boleh
melebihi 400KHz[10].
Setelah dilakukan inisialisasi pada mikrokontroler maka
inisialisasi pada MMC dapat dilakukan. Prosedur inisialisasi MMC
dilakukan sesuai flowchart pada gambar 3.26. Program inisialisasi
MMC dapat dilihat pada gambar 3.29.

PORT B.2= 1; // disable MMC


for(i=0; i < 10; i++) spi(0xFF);
PORT B.2= 0; // enable MMC
if (Command(0x40,0,0,0x95) != 1) goto
mmcError ;
st:
if (Command(0x41,0,0,0xFF) !=0) goto st;

Gambar 3.29. Inisialisasi MMC pada mode SPI

Fungsi Command( ) digunakan untuk mengirimkan data ke


MMC yang berupa 1Byte command Reset/Inisialisasi(CMD0/1), 4Byte
address data dan 1Byte CRC. Jika inisialisasi sudah dilakukan maka
proses pengambilan data dapat dilakukan. Prosedur pengambilan data
dapat dilihat pada gambar flowchart 3.27. Program untuk mengambil
data sebanyak 512Byte dari MMC dapat dilihat pada gambar 3.30.

if (Command(0x51,hi,lo,0x95) != 0) {
lcd_gotoxy(0,0);
lcd_putsf("MMC: read Error !");
}
while(spi(0xFF) != (char)0xFE);
for(j=0;j<512;j++){
OCR1A=spi(0xFF);
delay _us(125);
}
spi(0xFF);
spi(0xFF);

Gambar 3.30. Mengambil data dari MMC

Fungsi Command( ) digunakan untuk mengirimkan data ke


MMC yang berupa 1Byte command Read(CMD17), 4Byte address data
yang ingin diambil dan 1Byte CRC. Fungsi ini akan menghasilkan nilai
balik 0 jika pengiriman data tersebut diterima oleh MMC. Setelah itu
mikrokontroler akan menunggu MMC mengirimkan data 0xFE sambil
terus memberikan clock pada pin SCK. Data 0xFE merupakan awal
dari data actual sehingga setelah menerima data 0xFE mikrokontroler
dapat mengambil sebanyak 1 Byte data pada alamat yang dimaksud.
Data ini akan dikonversikan ke sinyal analog melalui PWM dengan
mengatur nilai register OCR1A sama dengan data dari MMC. Proses
pengambilan data ini terus dilakukan selama 512 kali dengan delay per
datanya 125us(frekuensi sampling). Kemudian jika seluruh data sudah
dikirimkan MMC akan mengirimkan 2 Byte data CRC, pada sistem ini
CRC diabaikan.

3.10. Perancangan software konversi ke sinyal analog (PWM)

ATmega8 memiliki 3 Channel pin yang dapat digunakan untuk


membangkitkan pulsa PWM dengan frekuensi maksimum 62500Hz.
Frekuensi ini sudah mencukupi untuk menghasilkan Output sampling
8KHz. Pada sistem ini digunakan pin OC1A yang dikontrol oleh Timer1.
Timer1 diatur agar menghasilkan mode Fast PWM-8bit dengan
frekuensi 62500Hz sesuai keperluan sistem ini.
Register-register yang digunakan untuk mengatur kerja PWM ini adalah
Timer/Counter 1 Control Register A(TCCR1A), Timer/Counter 1
Control Register B(TCCR1B) dan Output Compare Register 1
A(OCR1A). Pada gambar 3.31. merupakan struktur register TCCR1A.

Gambar 3.31. Register TCCR1A

• Bit 7:6 – COMA1:0 : Compare Output Mode Channel A


• Bit 5:4 – COMB1:0 : Compare Output Mode Channel B
COM1A1:0 dan COM1B1:0 digunakan untuk mengatur pola
keluaran OC1A dan OC1B seperti pada tabel 3.2.
Tabel 3.2. Pola keluaran pin OC1A/OC1B Mode Fast PWM

• Bit 3 – FOC1A : Force Output Compare for Channel A


• Bit 4 – FOC1B : Force Output Compare for Channel B
FOC1A dan FCO1B hanya digunakan pada mode non-PWM.
• Bit 1:0 – WGM11:10
WGM11 dan WGM10 bersama-sama dengan WGM13 dan
WGM12 yang berada di register TCCR1B digunakan untuk
menentukan mode pembangkitan runtun timer/counter sepert
yang terlihat pada tabel 3.3.

Tabel 3.3. Mode Timer 1


Pada gambar 3.32. merupakan struktur register TCCR1B

Gambar 3.32. Register TCCR1B

• Bit 7 – ICNC1: Input Capture Noise Canceler


ICNC1 digunakan untuk mengaktifkan dan menon-aktifkan
filter pada pin ICP1.
• Bit 6 – ICES1 : Input Capture Edge Select
Bit ICES1 digunakan untuk mengatur pemicu kejadian input
capture.
• Bit 5 : Tidak digunakan
• Bit 4:3 – WGM13:12 : Waveform Generation Mode
WGM13 DAN WGM12 bersama-sama dengan WGM11 dan
WGM10 yang berada pada register TCCR1A digunakan untuk
menentukan kerja timer seperti pada tabel 3.9.2.
• Bit 2:0 – CS12:0 : Clock select
CS12, CS11 dan CS10 berfungsi untuk mengatur skala sumber
clock yang akan digunakan oleh timer1 seperti yang terlihat
pada tabel 3.4.

Tabel 3.4. Skala Clock Timer 1


Pada gambar 3.33. merupakan struktur register OCR1A

Gambar 3.33. Register OCR1A

Register OCR1A berfungsi untuk menyimpan data pembanding


16-bit yang akan selalu dibandingkan dengan dengan isi register
TCNT1. Jika nilai TCNT1 sama dengan OCR1A maka akan terjadi
event sesuai mode yang telah ditentukan pada register TCCR1A dan
TCCR1B.

Pada persamaan 3.1. merupakan rumusan frekuensi sinyal


keluaran pin OC1A.

.............................................................................……...................…..3.1.

FOCnxPWM : frekuensi Output OC1A mode Fast PWM


Fclk_I/O : Frekuensi kristal
N : skala clock (lihat tabel 3.10.3)
TOP : nilai maksimum counter (TCNT1)

Pada persamaan 3.2. merupakan rumusan Duty cycle yang


dihasilkan.

OCR 1x
D= * 100 % ...........................................................3.2.
TOP

D : Duty cycle
OCR1x : isi register OCR1A
TOP : nilai maksimum counter (TCNT1)

Pada gambar 3.34. merupakan Timing Diagram Mode Fast


PWM.
Gambar 3.34. Timing Diagram Mode Fast PWM

Pada mode ini register TCNT1 akan terus mencacah naik


dengan frekuensi dari prescaler(N) dikalikan dengan frekuensi
kristal(Fclk_I/O). Pada saat sudah mencapai nilai maksimum(TOP) nilai
register TCNT1 akan kembali ke 0 kemudian mencacah naik lagi,
demikian seterusnya. Nilai register OCR1A akan terus dibandingkan
dengan nilai register TCNT1, jika sama maka Output pada pin OC1A
akan berubah kondisi(toogle).

3.11. Pembuatan software konversi ke sinyal analog (PWM)

Sistem ini menggunakan Mode Fast PWM – 8bit dengan


frekuensi PWM 62500Hz. Nilai parameter ini sesuai dengan database
suara fonem yang akan direkonstruksi yaitu mono, 8bit, 8KHz.
Frekuensi PWM ditentukan 62500 dengan asumsi semakin tinggi
frekuensi PWM yang digunakan maka sinyal analog yang dihasilkan
akan memiliki step response yang lebih baik.
Pada saat alat dinyalakan maka perlu dilakukan inisialisasi
parameter-parameter PWM tersebut. Pada gambar 3.35. merupakan
program inisialisasi PWM.
DDRB.1=1;
TCCR1A=0x81;
TCCR1B=0x09;
OCR1A=128;

Gambar 3.35. Inisialisasi PWM

Pin Output OC1A harus diatur sebagai port Output dengan


memberikan nilai 1 pada register DDRB bit 1. Register TCCR1A dan
TCCR1B digunakan untuk mengatur sumber clock Timer 1(kristal),
Prescaler Clock (1), Mode (Fast PWM) dengan TOP (0x00FF) dan
Output pada pin OC1A(non-inverting). Untuk memperoleh frekuensi
PWM sebesar 62500Hz digunakan persamaan 3.1. Pada awal inisialisasi
duty cycle diatur 50% agar berada di titik tengah ayunan sinyal DC.
Nilai register OCR1A diatur agar sama dengan nilai digital
sinyal dari MMC sehingga diperoleh amplitudo Output (0 – 5V) atau
duty cycle(0 – 100%) yang sesuai dengan nilai digital sinyal(0 – 255).
Pada sistem ini Output sinyal analog memiliki periode 125us agar
sesuai dengan frekuensi sampling 8KHz. Pada gambar 3.36. merupakan
program untuk mengkonversi sinyal digital menjadi sinyal analog.

for(j=0;j<512;j++){
OCR1A=spi(0xFF);
delay _us(125);
}

Gambar 3.36. Program konversi ke sinyal analog


”Halaman ini sengaja dikosongkan”
BAB IV
PENGUJIAN ALAT DAN ANALISA

Pada bab ini akan dibahas tentang pengujian sistem (software)


dan analisa berdasarkan bab perencanaan. Pengujian ini meliputi:
9 Pengujian per blok meliputi pengujian ketepatan penyusunan
database suara sesuai alamatnya, software konversi teks ke
fonem, software penentu alamat fonem pada MMC, software
akses ke MMC dan software konversi ke sinyal analog(PWM).
9 Pengujian sistem secara keseluruhan yaitu integrasi dengan
hardware.

4.1. PENGUJIAN PER BLOK

4.1.1. Pengujian ketepatan penyusunan database suara

Pengujian ini bertujuan untuk mengetahui persentase ketepatan


penyusunan database suara apakah sesuai dengan alamat database suara
pada tabel yang telah dibuat sebelumnya. Hal ini diperlukan agar tidak
terjadi kesalahan penempatan alamat database suara fonem tersebut.
Pengujian dilakukan dengan menggunakan software Ace of
WAV . Untuk menguji ketepatan penyusunan database ini dengan cara
memasukkan alamat (nilai sample) awal dan akhir suatu fonem
kemudian mendengarkan suara yang ada pada range sample tersebut.
Pada gambar 4.1. merupakan tampilan pengujian melalui software Ace
of WAV . Tanda oval yag berwarna hitam merupakan range nilai
sample yang dipilih. Sedangkan untuk mendengarkan suara fonem
tersebut dengan cara menekan tombol ”play” yang ditandai pola oval
berwarna merah.
Gambar 4.1. Pengujian penyusunan database suara

Pada tabel 4.1. merupakan hasil pengujian penyusunan


database suara dengan penentuan range alamat sample fonem secara
acak sebanyak 10 kali. Acuan referensi yang digunakan adalah tabel
alamat database suara tiap fonem.

Tabel 4.1. Hasil pengujian penyusunan database suara

No Range Alamat Suara Tabel Error


Sample Referensi (%)
1. 0 – 2000 “a” a 0
2. 224000 – 226000 “ki” ki 0
3. 446000 – 48000 “car” car 0
4. 670000 – 672000 “fit” fit 0
5. 870000 – 872000 “hit” hit 0
6. 1102000 – 1104000 “kem” kem 0
7. 1326000 – 1328000 “mor” mor 0
8. 1542000 – 1544000 “ram” ram 0
9. 1768000 – 1770000 “tis” tis 0
10. 2232000 – 2234000 “yang” yang 0
Rata-rata Error 0%
Analisa:

Berdasarkan data hasil pengujian persentase ketepatan


penyusunan database suara yang dibandingkan dengan tabel alamat
database suara yang telah dibuat adalah 100% dari 10 sample.
Jika terjadi kesalahan penyusunan alamat fonem ini maka
Output suara yang dihasilkan tidak akan sesuai dengan yang kita
inginkan. Untuk membuat database suara fonem sebanyak 1170 ini
diperlukan ketelitian dan kesabaran yang tinggi.
Kesimpulannya, ketepatan penyusunan database suara fonem
ini menentukan jenis Output suara yang dihasilkan. Persentase
ketepatan penyusunan database suara ini yang dibandingkan dengan
tabel alamat database suara yang telah dibuat adalah 100% dari 10
sample.

4.1.2. Pengujian Software konversi teks ke fonem

Pengujian ini bertujuan untuk mengetahui ketepatan proses


konversi dari teks ke fonem. Pengujian menggunakan komputer dengan
software Microsoft visual c++ 6.0. Input teks dimasukan melalui
keyboard dan hasil konversi ditampilkan pada layar. Pada gambar 4.2.
merupakan tampilan proses pengujian software konversi teks ke fonem
melalui komputer.

Gambar 4.2. Pengujian software konversi teks ke fonem

Pengujian dilakukan dengan memasukkan suatu kata secara


acak kemudian meghitung persentase ketepatan konversi ke fonem
dengan acuan referensi pengucapan fonem kata tersebut secara manual.
Pada tabel 4.2. merupakan hasil pengujian software konversi teks ke
fonem dengan memasukan 10 jenis kata secara acak.

Tabel 4.2. Hasil pengujian konversi teks ke fonem

No Input Output Referensi Error


(%)
1. Aku A-ku A-ku 0
2. Beli Be-li Be-li 0
3. Makan Ma-kan Ma-kan 0
4. Ompong Om-pong Om-pong 0
5. Dengan De-ngan De-ngan 0
6. Menyapu Me-nya-pu Me-nya-pu 0
7. Proklamasi Pro-kla-ma-si Pro-kla-ma-si 0
8. Institut Ins-ti-tut Ins-ti-tut 0
9. Elektronika E-lek-tro-ni-ka E-lek-tro-ni-ka 0
10. Manusia Ma-nu-si-a Ma-nu-si-a 0
Rata-rata Error 0%

Analisa:

Berdasarkan data hasil pengujian didapatkan persentase


ketepatan konversi teks ke fonem adalah 100% dari 10 sample.
Ketepatan konversi ini menentukan jelas tidaknya suara yang dihasilkan.
Misalnya suara “aku” jika salah dikonversi menjadi bentuk fonem”ak-u”
akan terdengar kurang jelas. Sebaliknya akan terdengar jelas jika
dikonversi menjadi fonem “a-ku”.
Kesimpulannya, ketepatan konversi teks ke fonem ini
menentukan jelas tidaknya suara yang dihasilkan. Persentase ketepatan
software konversi teks ke fonem ini adalah 100% dari 10 sample.

4.1.3. Pengujian software untuk penentu alamat fonem pada


MMC

Pengujian ini bertujuan untuk megetahui ketepatan software


menentukan alamat fonem pada MMC. Pengujian menggunakan
komputer dengan software Microsoft visual c++ 6.0. Input suatu fonem
dimasukan melalui keyboard dan hasil alamat fonem tersebut
ditampilkan pada layar. Pada gambar 4.3. merupakan tampilan proses
pengujian software untuk penentu alamat fonem pada MMC melalui
komputer.

Gambar 4.3. Pengujian software penentu alamat fonem

Pengujian dilakukan dengan memasukkan suatu fonem secara


acak kemudian membandingkan Output nilai alamat dari software ini
dengan referensi dari tabel alamat fonem. Pada tabel 4.3. merupakan
hasil pengujian software penentu alamat fonem dengan memasukan 10
jenis fonem secara acak.

Tabel 4.3. Hasil pengujian software penentu alamat fonem

No Input Output Referensi Error


Fonem Alamat Alamat (%)
1. a 0 0 0
2. ma 242 242 0
3. car 446 446 0
4. fit 670 670 0
5. hit 870 870 0
6. kem 1102 1102 0
7. mor 1326 1326 0
8. ram 1542 1542 0
9. tis 1768 1768 0
10. yang 2232 2232 0
Rata-rata Error 0%
Analisa:

Berdasarkan data hasil pengujian persentase ketepatan


software penentu alamat fonem yang dibandingkan dengan tabel alamat
database suara yang telah dibuat adalah 100% dari 10 sample.
Jika terjadi kesalahan penentuan alamat fonem ini maka Output
suara yang dihasilkan tidak akan sesuai dengan yang kita inginkan.
Untuk menghemat memori, bilangan yang digunakan dalam
penghitungan alamat tidak mengikutsertakan ribuan. Nilai alamat hasil
software ini masih harus dikalikan dengan bilangan 1000 agar sesuai
dengan alamat sebenarnya di dalam MMC.
Kesimpulannya, ketepatan pengalamatan fonem database ini
menentukan jenis Output suara yang dihasilkan. Persentase ketepatan
software penentu alamat fonem yang dibandingkan dengan tabel alamat
database suara yang telah dibuat adalah 100% dari 10 sample.

4.1.4. Pengujian software akses ke MMC

Pengujian ini bertujuan untuk mengetahui persentase ketepatan


pengambilan data pada alamat terentu di MMC. Pengujian dilakukan
dengan cara mengambil 10Byte data pada alamat tertentu dari MMC dan
hasil pengambilan data tersebut ditampilkan pada layar komputer
dengan komunikasi serial RS-232. Hasil pengambilan darta tersebut
dibandingkan dengan data sebenarnya pada MMC yang dilihat melalui
software WinHEX. Gambar 4.4. merupakan tampilan Winhex
menunjukan data karakter(“<data_MMC>”) yang tersimpan di dalam
MMC pada alamat 0x27DC00 sampai dengan 0x27DC09.

Gambar 4.4. Alamat data “<data_MMC>” di MMC


Pada gambar 4.5. merupakan tampilan hasil pengambilan data
melalui serial komunikasi.

Gambar 4.5. Pengujian pengambilan data dari MMC

Pada gambar 4.6. merupakan program yang digunakan untuk


mengambil 10Byte data dari MMC pada alamat 0x27DC00 - 0x27DC09
dan dikirim ke komputer via RS232.
hi=0x27;
lo=0xDC00;
Command(0x51,hi,lo,0x95);
while(spi(0xFF) != (char)0xFE);
for(i=0;i<10;i++){
printf("%c",spi(0xFF));
}

Gambar 4.6. Program pengambilan data dari MMC

Pada tabel 4.4. merupakan hasil pengujian pengambilan data


dari MMC dan ditampilkan pada layar komputer via serial komunikasi.
Tabel 4.4. Hasil pengambilan data dari MMC

No Alamat pada Data Data Error


MMC(heksa) Output Referensi (%)
1. 0x27DC00 “<” “<” 0
2. 0x27DC01 “d” “d” 0
3. 0x27DC02 “a” “a” 0
4. 0x27DC03 “t” “t” 0
5. 0x27DC04 “a” “a” 0
6. 0x27DC05 “_” “_” 0
7. 0x27DC06 “M” “M” 0
8. 0x27DC07 “M” “M” 0
9. 0x27DC08 “C” “C” 0
10. 0x27DC09 “>” “>” 0
Rata-rata Error 0%

Analisa:

Berdasarkan data hasil pengujian didapatkan persentase


ketepatan pengambilan data 100% dari 10 sample. Jika terjadi kesalahan
pemgambilan data maka Output suara yang dihasilkan tidak akan sesuai
dengan yang kita inginkan.
Selain itu berdasarkan hasil percobaan, awal pengalamatan
pada MMC harus kelipatan 512. Misalnya data yang ingin diambil
berada di alamat 513 maka pengambilan data tidak bisa langsung dengan
alamat 513 tetapi harus pada alamat 512, data pada alamat 512 dapat
tidak dihiraukan. Selanjutnya dengan memberikan clock pada pin SCK
secara berulang-ulang maka akan didapatkan data sebanyak 512Byte
mulai alamat 512 sampai 1023.
Kesimpulannya, ketepatan pengambilan data pada MMC
menentukan jenis Output suara yang dihasilkan. Persentase ketepatan
pengambilan data 100% dari 10sample.

4.1.5. Pengujian software konversi ke sinyal analog(PWM)

Pengujian ini bertujuan untuk mengetahui ketepatan software


dalam mengkonversi sinyal digital menjadi sinyal analog dengan metode
PWM. Pengujian dilakukan dengan cara membangkitkan sinyal PWM
dengan duty cycle tertentu kemudian mengukur tegangan rata-rata
Output (V out) pada pin OC1A ATmega8 menggunakan multimeter dan
dibandingkan dengan hasil perhitungan(V ref) menggunakan persamaan
2.2. Pada gambar 4.7. merupakan program untuk membangkitkan sinyal
PWM dengan duty cycle 50%.

Duty = 50/100.0;
OCR1A=Duty*255;

Gambar 4.7. Program pembangkit PWM duty cycle 50%

Pada tabel 4.5. merupakan hasil pengujian software konversi


ke sinyal analog dengan duty cycle mulai 0 – 100%.

Tabel 4.5. Pengujian PWM

V supply = 4.89V
No Duty cycle V out V ref Error
(%) (V) (V) (%)
1. 0 0 0 0
2. 10 0.48 0.48 0
3. 20 0.97 0.97 0
4. 30 1.44 1.46 1.3
5. 40 1.94 1.95 0.5
6. 50 2.43 2.44 0.4
7. 60 2.93 2.93 0
8. 70 3.40 3.42 0.5
9. 80 3.89 3.91 0.5
10. 90 4.37 4.40 0.6
11. 100 4.89 4.89 0
Rata-rata Error 0.34%

Analisa:

Berdasarkan data hasil pengujian ketepatan software konversi


ke sinyal analog dengan metode PWM adalah 99.7% dari 11sample.
Error konversi adalah 0.34% hal ini mungkin disebabkan oleh
kesalahan alat ukur atau kualitas alat yang digunakan.
Jika terjadi kesalahan konversi nilai maka rekonstruksi
amplitudo suara yang dihasilkan tidak akan sesuai dengan suara yang
asli. Sebaliknya jika Error konversi mendekati nol maka suara yang
dihasilkan semakin mirip dengan suara aslinya.
Kesimpulannya, ketepatan software konversi ke sinyal analog
ini menentukan level amplitudo suara yang dihasilkan. Persentase
ketepatan software konversi ke sinyal analog dengan metode PWM
adalah 99.7% dari 11sample.

4.2. PENGUJIAN SECARA KESELURUHAN

Mengintegrasikan hardware dan software dengan cara


memasukan kata dan kalimat melalui keypad untuk mengetahui
Ketepatan kata atau kalimat yang dimasukkan melalui keypad dengan
tampilan di LCD dan suara yang dikeluarkan melalui speaker.
Pengujian alat yang diintegrasikan dengan hardware secara
keseluruhan dilakukan dengan proses-proses sebagai berikut :

1. Memasukkan input beberapa kalimat melalui keypad


kemudian mengukur waktu rata-rata penulisan dengan
keypad ini
2. Mengukur waktu rata-rata Output per fonem dari beberapa
kalimat.
3. Menampilkan dalam bentuk gambar Output suara sample
”selamat pagi” untuk mengetahui kesesuaian rekonstruksi
sinyal Output .
4. Menghitung persentase keberhasilan Output suara sistem
diidentifikasi oleh pendengar.

4.2.1. Pengukuran waktu akses ke keypad

Hasil pengukuran waktu yang dibutuhkan untuk memasukkan


teks melalui keypad terlihat pada tabel 4.6.
Tabel 4.6. Waktu untuk memasukkan teks melalui keypad

No. Isi teks Waktu akses


(m): (s):(ms)
1. baca data dari database lagi 00:22:56
2. saya komunikasi sama rudi di surabaya 00:25:22
3. saya coba sekali lagi 00:14:86
4. saya coba kata kata lagi 00:17:83
5. besok ada kuliah di poltek 00:13:94

Analisa:

Input teks pada keypad ini memilki sistem yang sama pada
keypad handphone yang digunakan untuk menulis SMS. Pada sebuah
tombol terdapat pilihan lebih dari satu karakter. Huruf yang berada di
pilihan pertama tombol(contoh “a”) pasti memiliki waktu akses yang
lebih cepat dibandingkan huruf pada pilihan terakhir tombol(contoh
“c”). Selain itu jika user sudah terbiasa dengan karakteristik keypad ini
maka waktu akses penulisan kata pasti akan lebih cepat.
Kesimpulannya, waktu yang dibutuhkan dalam penulisan suatu
kata tergantung dari panjang karakter kata tersebut dan komposisi
hurufnya.

4.2.2. Pengukuran waktu rata-rata Output suara per fonem

Hasil pengukuran waktu rata-rata Output suara per fonem


ditunjukkan pada tabel 4.7.
Tabel 4.7. Waktu rata-rata Output per fonem

Waktu
(m): (s):(ms)
No. Isi teks rata-rata
per total
fonem

1. baca data dari database lagi 00:00:27 00:03:43


2. saya komunikasi sama rudi di 00:00:24 00:04:20
surabaya
3. saya coba sekali lagi 00:00:26 00:02:43
4. saya coba kata kata lagi 00:00:25 00:02:62
5. besok ada kuliah di poltek 00:00:23 00:02:44
Waktu output rata-rata per fonem 250ms

Analisa:

Untuk menghitung waktu rata-rata perfonem dengan cara


memasukkan berbagai teks kemudian menghitung total waktu yang
dibutuhkan untuk dikonversi menjadi suara. Perhitungan waktu total
dimulai dari saat menekan tombol enter sampai seluruh fonem
terkonversi menjadi suara. Setelah diketahui total waktu tersebut
kemudian akan dikurangi dengan delay waktu spasi yang ada dan
hasilnya akan dibagi dengan jumlah fonemnya. Disini waktu delay per
spasinya adalah 40 ms.
Kesimpulannya, waktu Output rata-rata per fonem adalah
250ms. Sedangkan dengan rata-rata panjang sample per fonem adalah
2000 sample maka dengan frekuensi sampling 8KHz didapatkan waktu
perhitungan rata-rata Output sample 250ms. Dengan demikian waktu
aktual Output suara per fonem sama dengan nilai hasil perhitungan.

4.2.3. Tampilan Output sinyal suara sistem

Untuk mengetahui bentuk sinyal Output suara dari sistem ini


yaitu dengan melakukan perekaman dan menampilkannya dalam bentuk
gambar. Pada gambar 4.8. merupakan tampilan sinyal Output yang
direkam menggunakan software Ace of WAV . Suara yang direkam
adalah kata”selamat pagi”.

Gambar 4.8. Tampilan suara “selamat pagi” sistem

Bentuk sinyal suara fonem dari database tampak pada gambar


4.9. Tampilan sinyal ini berasal dari penggabungan fonem-fonem “se-la-
mat_pa-gi” database suara menggunakan software Ace of WAV. Pada
gambar 4.9. tanda akhir dari setiap fonem masih terlihat sedangkan pada
Output sistem tanda ini sudah dihilangkan agar tidak menghasilkan
bunyi yang mengganggu.
Gambar 4.9. Tampilan fonem “se-la-mat pa-gi” database

Sedangkan sebagai referensi pembandingnya adalah hasil


rekaman dari software IndoTTS. Pada gambar 4.10. adalah hasil
rekaman dari software tersebut.

Gambar 4.10. Tampilan suara “selamat pagi” IndoTTS


Analisa :

Berdasarkan tampilan sinyal tersebut tampak bahwa bentuk


sinyal Output suara sistem sudah sesuai dengan bentuk sinyal database
suara. Perbedaan amplitudo disebabkan adanya penguatan dalam input
audio komputer pada saat perekaman.
Metode Diphone Concatenation Technology yang digunakan
IndoTTS menyebabkan hasil Output dari IndoTTS memiliki suara yang
lebih alami[3,slide.7]. Pada setiap transisi fonem disisipkan bunyi
kombinasi huruf antar fonem tersebut, contoh pada pembentukkan kata
“komputer” dengan konfigurasi “~k-ko-om-mp-pu-ut-te-er-r~”.
Kesimpulannya, bentuk sinyal Output sistem identik dengan
bentuk sinyal database hasil perekaman. Hal ini menunjukkan proses
rekonstruksi sinyal berhasil dilakukan.

4.2.4. Pengujian kualitas Output suara

Pengujian ini bertujuan untuk mengetahui persentase


keberhasilan pendengar dalam mengidentifikasi kalimat yang dihasilkan
sistem. Pengujian dilakukan dengan memperdengarkan hasil Output
suara 10 jenis kalimat beraturan dan 10 kalimat dengan kata tidak
beraturan kepada 10 orang responden. Responden hanya diberi
kesempatan untuk mendengarkan Output suara sebanyak 2 kali dan
tidak diberi tahu jenis kalimat yang akan didengarkan. Hasil pengujian
tampak pada tabel 4.8. dan tabel 4.9. Hasil pengujian selengkapnya
dapat dilihat pada lampiran3.
Tabel 4.8. Hasil identifikasi pendengar dari 10 kalimat beraturan

No Kalimat input Error


(%)
1. Saya makan nasi. 8.33
2. Nama saya mapola abdia rayana. 26.67
3. Kepalaku pusing sekali. 14.43
4. Aku beli gula satu kilogram. 58.17
5. Ibu membeli sayur di pasar. 2
6. Tolong ambilkan buku di meja itu. 10.83
7. Hati hati, ada lubang di jalan. 42.77
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 3.33
10. Harganya seratus lima puluh ribu rupiah. 17.32
Rata-rata Error 18.38%

Tabel 4.9. Hasil identifikasi pendengar dari 10 kalimat tidak beraturan

No Kalimat input Error


(%)
1. Buku pergi mandi. 36.6
2. Saya nasi lalu. 48.2
3. Program makan beli. 39.9
4. Murah lagi gula. 51.6
5. Badak jelas pagi. 66.6
6. Tadi kursi kancil. 53.3
7. Lupa jalan nama ribu. 58.3
8. Baju binatang kepala. 68.6
9. Surabaya negara sekolah. 7
10. Sudah mata kebakaran selamat. 76.3
Rata-rata Error 50.6%

Analisa:

Berdasarkan hasil pengujian pada tabel 4.8. didapatkan error


rata-rata 18.38% yang disebabkan masih adanya suara diam pada
penggabungan antar fonem. Output suara kata yang kurang jelas
menyebabkan pendengar hanya menebak kata tersebut. Persentase
keberhasilan Output suara diidentifikasi oleh pendengar adalah 81.62%
dari 10 sample kalimat beraturan .
Sedangkan hasil pengujian dari 10 kalimat tidak beraturan
menunjukkan error rata-rata 50.6%. Hal ini disebabkan pendengar
kesulitan mengidentifikasi kalimat dengan kata yang tidak beraturan.
Pada umumnya manusia berdialog dengan menggunakan kalimat yang
beraturan yaitu antara kata yang satu dan yang lainnya saling
berhubungan. Persentase keberhasilan Output suara diidentifikasi oleh
pendengar adalah 49.3% dari 10 sample kalimat tidak beraturan .
Kesimpulannya, persentase keberhasilan Output suara
diidentifikasi oleh pendengar adalah 81.62% dari 10 sample kalimat
dengan kata beraturan .
”Halaman ini sengaja dikosongkan”
BAB V
PENUTUP

5.1. KESIMPULAN

Setelah melakukan perencanaan dan pembuatan sistem


kemudian dilakukan pengujian dan analisanya, maka dapat diambil
beberapa kesimpulan yaitu sebagai berikut:

1. Persentase keberhasilan penyusunan 1170 database suara


fonem sesuai alamatnya, software penentu alamat fonem,
software untuk mengambil data fonem pada MMC dan
software konversi teks ke fonem adalah 100% dari 10 sample
pengujian.
2. Persentase keberhasilan software konversi sinyal digital ke
sinyal analog dengan metode PWM adalah 99.7% dari 11
sample pengujian.
3. Pengiriman command READ pada MMC harus memiliki alamat
dengan kelipatan 512. Hal ini merupakan protokol MMC.
4. Pada sistem ini jumlah karakter dalam suatu kalimat yang dapat
diubah ke suara dirancang 50 karakter, disebabkan keterbatasan
memori pada ATmega8.
5. Tanda baca yang bisa diterapkan pada sistem ini adalah tanda
baca koma dan titik.
6. Keberhasilan rata-rata Output suara sistem ini dikenali oleh 10
pendengar adalah 81.62% dari 10 sample kalimat. Beberapa
kata yang tidak dikenali disebabkan masih adanya suara diam
pada penggabungan antar fonem.

5.2. SARAN
Untuk membuat aplikasi yang lebih kompleks sebaiknya
digunakan mikrokontroler dengan kecepatan dan memori yang lebih
tinggi daripada ATmega8. Pada sistem ini digunakan ATmega8 untuk
meminimalkan dimensi sistem.
”Halaman ini sengaja dikosongkan”
DAFTAR PUSTAKA

[1] Dwi Utomo, Siswo ”Desain Text to Speech Untuk Membaca


SMS Dalam Bahasa Indonesia”,Tugas Akhir PENS-ITS 2008.
[2] Bejo, Agus ”C dan AVR Rahasia Kemudahan Bahasa C dalam
Mikrokontroler ATmega8535”, Graha Ilmu, 2008.
[3] Akhmad Arman, Arry “Design and Implementation of
Indonesian Sign Language to Speech Converter.pdf “, Institut
Teknologi Bandung.
[4] Akhmad Arman, Arry “Konversi dari Teks ke Ucapan.pdf “,
Institut Teknologi Bandung.
[5] ATmega8 Datasheet.
[6] http://indotts.melsa.net.id/download.html (diakses tanggal 15
September 2008 jam 9.00 WIB ).
[7] http://elm-chan.org/docs/mmc_e.html (diakses tanggal 5 Juni
2008 jam 13.00 WIB).
[8] www.bappenas.go.id/penelitian/narasi.html (diakses tanggal 5
Oktober 2008 jam 8.00 WIB).
[9] http://www.polyhedric.com/software/ace (diakses tanggal 29
maret 2009 jam 9.00 WIB).
[10] http://winhex.en.softonic.com/download (diakses tanggal 29
maret 2009 jam 9.00 WIB).
[11] http://www.ora.com/centers/gff/formats/micriff/index.htm
(diakses tanggal 5 Juni 2008 jam 13.00 WIB).
[12] http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s200
7/cd247_maw72(diakses tanggal 5 Juni 2008 jam 13.00 WIB).
[13] http://www.netrino.com/Embedded-Systems/How-To/Pwm.php
(diakses tanggal 5 Juni 2008 jam 13.00 WIB).
Lampiran 1. Data 1170 Fonem beserta Alamatnya
(V) *** ak, 58 om, 122 FA, 182
a, 0 al, 60 on, 124 fi, 184
b, 2 am, 62 or, 126 fu, 186
c, 4 an, 64 os, 128 fe, 188
d, 6 ar, 66 ot, 130 fo, 190
e, 8 as, 68 ub, 132 ga, 192
f, 10 at, 70 uf, 134 gi, 194
g, 12 eb, 72 uh, 136 gu, 196
h, 14 ef, 74 uk, 138 ge, 198
I, 16 eh, 76 ul, 140 go, 200
j, 18 ek, 78 um, 142 ha, 202
k, 20 el, 80 un, 144 hi, 204
l, 22 em, 82 ur, 146 hu, 206
m, 24 en, 84 us, 148 he, 208
n, 26 er, 86 ut, 150 ho, 210
o, 28 es, 88 JA, 212
p, 30 et, 90 (KV) *** ji, 214
q, 32 ib, 92 BA, 152 ju, 216
r, 34 if, 94 bi, 154 je, 218
s, 36 ih, 96 bu, 156 jo, 220
t, 38 ik, 98 be, 158 ka, 222
u, 40 il, 100 bo, 160 ki, 224
v, 42 im, 102 ca, 162 ku, 226
w, 44 in, 104 ci, 164 ke, 228
x, 46 ir, 106 cu, 166 ko, 230
y, 48 is, 108 ce, 168 la, 232
z, 50 it, 110 co, 170 li, 234
ob, 112 da, 172 lu, 236
(VK) *** of, 114 di, 174 le, 238
ab, 52 oh, 116 du, 176 lo, 240
af, 54 ok, 118 de, 178 ma, 242
ah, 56 ol, 120 do, 180 mi, 244
mu, 246 YA, 312 buh, 376 cam, 442
me, 248 yi, 314 buk, 378 can, 444
mo, 250 yu, 316 bul, 380 car , 446
na, 252 ye, 318 bum, 382 cas, 448
ni, 254 yo, 320 bun, 384 cat , 450
nu, 256 za, 322 bur, 386 cib , 452
ne, 258 zi, 324 bus, 388 cif, 454
no, 260 zu, 326 but, 390 cih, 456
PA, 262 ze, 328 beb , 392 cik , 458
pi, 264 zo, 330 bef, 394 cil , 460
pu, 266 (KVK) *** beh, 396 cim, 462
pe, 268 BAB, 332 bek , 398 cin , 464
po, 270 baf, 334 bel, 400 cir , 466
RA, 272 bah, 336 bem, 402 cis , 468
ri, 274 bak, 338 ben, 404 cit , 470
ru, 276 bal, 340 ber, 406 cub, 472
re, 278 bam, 342 bes , 408 cuf, 474
ro, 280 ban, 344 bet , 410 cuh, 476
sa, 282 bar, 346 bob , 412 cuk, 478
si, 284 bas, 348 bof, 414 cul , 480
su, 286 bat, 350 boh, 416 cum, 482
se, 288 bib, 352 bok , 418 cun, 484
so, 290 bif, 354 bol , 420 cur , 486
ta, 292 bih, 356 bom, 422 cus, 488
ti, 294 bik, 358 bon , 424 cut , 490
tu, 296 bil, 360 bor , 426 ceb, 492
te, 298 bim, 362 bos , 428 cef, 494
to, 300 bin, 364 bot , 430 ceh, 496
WA, 302 bir, 366 cab, 432 cek, 498
wi, 304 bis, 368 caf, 434 cel , 500
wu, 306 bit, 370 cah, 436 cem, 502
we, 308 bub, 372 cak, 438 cen, 504
wo, 310 buf, 374 cal , 440 cer , 506
ces, 508 duf, 574 fal , 640 fer , 706
cet , 510 duh, 576 fam , 642 fes , 708
cob, 512 duk , 578 fan , 644 fet , 710
cof, 514 dul , 580 far , 646 fob , 712
coh, 516 dum, 582 fas , 648 fof, 714
cok, 518 dun , 584 fat , 650 foh, 716
col , 520 dur , 586 fib , 652 fok , 718
com, 522 dus , 588 fif, 654 fol , 720
con , 524 dut , 590 fih, 656 fom , 722
cor , 526 deb , 592 fik , 658 fon , 724
cos , 528 def, 594 fil , 660 for , 726
cot , 530 deh, 596 fim , 662 fos , 728
dab , 532 dek , 598 fin , 664 fot , 730
daf, 534 del , 600 fir , 666 gab, 732
dah, 536 dem, 602 fis , 668 gaf, 734
dak , 538 den , 604 fit , 670 gah, 736
dal , 540 der , 606 fub , 672 gak, 738
dam, 542 des , 608 fuf, 674 gal , 740
dan , 544 det , 610 fuh, 676 gam, 742
dar , 546 dob , 612 fuk , 678 gan, 744
das , 548 dof, 614 ful , 680 gar , 746
dat , 550 doh, 616 fum , 682 gas, 748
dib , 552 dok , 618 fun , 684 gat , 750
dif, 554 dol , 620 fur , 686 gib , 752
dih, 556 dom, 622 fus , 688 gif, 754
dik , 558 don , 624 fut , 690 gih, 756
dil , 560 dor , 626 feb , 692 gik , 758
dim , 562 dos , 628 fef, 694 gil , 760
din , 564 dot, 630 feh, 696 gim, 762
dir , 566 FAB, 632 fek , 698 gin , 764
dis , 568 faf, 634 fel , 700 gir , 766
dit , 570 fah, 636 fem , 702 gis , 768
dub , 572 fak , 638 fen , 704 git , 770
gub, 772 hak , 838 hen , 904 jit , 970
guf, 774 hal , 840 her , 906 jub , 972
guh, 776 ham , 842 hes , 908 juf, 974
guk, 778 han , 844 het , 910 juh, 976
gul , 780 har , 846 hob , 912 juk , 978
gum, 782 has , 848 hof, 914 jul , 980
gun, 784 hat , 850 hoh, 916 jum , 982
gur , 786 hib , 852 hok , 918 jun , 984
gus, 788 hif, 854 hol , 920 jur , 986
gut , 790 hih, 856 hom , 922 jus , 988
geb, 792 hik , 858 hon , 924 jut , 990
gef, 794 hil , 860 hor , 926 jeb , 992
geh, 796 him , 862 hos , 928 jef, 994
gek, 798 hin , 864 hot , 930 jeh, 996
gel , 800 hir , 866 JAB, 932 jek , 998
gem, 802 his , 868 jaf, 934 jel , 1000
gen, 804 hit , 870 jah, 936 jem , 1002
ger , 806 hub , 872 jak , 938 jen , 1004
ges, 808 huf, 874 jal , 940 jer , 1006
get , 810 huh, 876 jam, 942 jes , 1008
gob, 812 huk , 878 jan , 944 jet , 1010
gof, 814 hul , 880 jar , 946 job , 1012
goh, 816 hum , 882 jas , 948 jof, 1014
gok, 818 hun , 884 jat , 950 joh, 1016
gol , 820 hur , 886 jib , 952 jok , 1018
gom, 822 hus , 888 jif, 954 jol , 1020
gon, 824 hut , 890 jih, 956 jom , 1022
gor , 826 heb , 892 jik , 958 jon , 1024
gos, 828 hef, 894 jil , 960 jor , 1026
got , 830 heh, 896 jim , 962 jos, 1028
hab , 832 hek , 898 jin , 964 jot , 1030
haf, 834 hel , 900 jir , 966 kab, 1032
hah, 836 hem , 902 jis , 968 kaf, 1034
kah, 1036 kem, 1102 lis , 1168 maf, 1234
kak, 1038 ken , 1104 lit , 1170 mah, 1236
kal , 1040 ker , 1106 lub , 1172 mak , 1238
kam, 1042 kes , 1108 luf, 1174 mal , 1240
kan, 1044 ket , 1110 luh, 1176 mam , 1242
kar , 1046 kob , 1112 luk , 1178 man , 1244
kas, 1048 kof, 1114 lul , 1180 mar , 1246
kat , 1050 koh, 1116 lum, 1182 mas , 1248
kib , 1052 kok , 1118 lun , 1184 mat , 1250
kif, 1054 kol , 1120 lur , 1186 mib , 1252
kih, 1056 kom, 1122 lus , 1188 mif, 1254
kik , 1058 kon , 1124 lut , 1190 mih, 1256
kil , 1060 kor , 1126 leb , 1192 mik , 1258
kim , 1062 kos , 1128 lef, 1194 mi , 1260
kin , 1064 kot , 1130 leh, 1196 mim , 1262
kir , 1066 lab , 1132 lek , 1198 min , 1264
kis , 1068 laf, 1134 lel , 1200 mir, 1266
kit , 1070 lah, 1136 lem, 1202 mis , 1268
kub , 1072 lak , 1138 len , 1204 mit , 1270
kuf, 1074 lal , 1140 ler , 1206 mub , 1272
kuh, 1076 lam , 1142 les , 1208 muf, 1274
kuk , 1078 lan , 1144 let , 1210 muh, 1276
kul , 1080 lar , 1146 lob , 1212 muk , 1278
kum, 1082 las , 1148 lof, 1214 mul , 1280
kun , 1084 lat , 1150 loh, 1216 mum, 1282
kur , 1086 lib , 1152 lok , 1218 mun , 1284
kus , 1088 lif, 1154 lol , 1220 mur , 1286
kut , 1090 lih, 1156 lom, 1222 mus , 1288
keb , 1092 lik , 1158 lon , 1224 mut , 1290
kef, 1094 lil , 1160 lor , 1226 meb , 1292
keh, 1096 lim , 1162 los, 1228 mef, 1294
kek , 1098 lin , 1164 lot, 1230 meh, 1296
kel , 1100 lir , 1166 mab , 1232 mek , 1298
mel , 1300 nir , 1366 PAB, 1432 pek , 1498
mem, 1302 nis , 1368 paf, 1434 pel , 1500
men , 1304 nit , 1370 nah, 1436 pem, 1502
mer , 1306 nub , 1372 pak , 1438 pen , 1504
mes , 1308 nuf, 1374 pal , 1440 per , 1506
met , 1310 nuh, 1376 pam, 1442 pes , 1508
mob , 1312 nuk , 1378 pan, 1444 pet , 1510
mof, 1314 nul , 1380 par , 1446 pob , 1512
moh, 1316 num, 1382 pas , 1448 pof, 1514
mok , 1318 nun , 1384 pat , 1450 poh, 1516
mol , 1320 nur , 1386 pib , 1452 pok , 1518
mom, 1322 nus , 1388 pif, 1454 pol , 1520
mon , 1324 nut , 1390 pih, 1456 pom , 1522
mor , 1326 neb , 1392 pik , 1458 pon , 1524
mos , 1328 nef, 1394 pil , 1460 por , 1526
mot , 1330 neh, 1396 pim , 1462 pos , 1528
nab , 1332 nek , 1398 pin , 1464 pot , 1530
naf, 1334 nel , 1400 pir , 1466 RAB, 1532
nah, 1336 nem, 1402 pis , 1468 raf, 1534
nak , 1338 nen , 1404 pit , 1470 rah, 1536
nal , 1340 ner , 1406 pub , 1472 rak , 1538
nam , 1342 nes , 1408 puf, 1474 ral , 1540
nan , 1344 net , 1410 puh, 1476 ram, 1542
nar , 1346 nob , 1412 puk , 1478 ran, 1544
nas , 1348 nof, 1414 pul , 1480 rar , 1546
nat , 1350 noh, 1416 pum, 1482 ras , 1548
nib , 1352 nok , 1418 pun , 1484 rat , 1550
nif, 1354 nol , 1420 pur , 1486 rib , 1552
nih, 1356 nom, 1422 pus , 1488 rif, 1554
nik , 1358 non , 1424 put , 1490 rih, 1556
nil , 1360 nor , 1426 peb , 1492 rik , 1558
nim , 1362 nos , 1428 pef, 1494 ril , 1560
nin , 1364 not , 1430 peh, 1496 rim , 1562
rin , 1564 rot , 1630 seh, 1696 tim , 1762
rir , 1566 sab , 1632 sek, 1698 tin , 1764
ris , 1568 saf, 1634 sel , 1700 tir , 1766
rit , 1570 sah, 1636 sem, 1702 tis , 1768
rub , 1572 sak , 1638 sen , 1704 tit , 1770
ruf, 1574 sal , 1640 ser , 1706 tub, 1772
fuh, 1576 sam , 1642 ses , 1708 tuf, 1774
ruk , 1578 san , 1644 set , 1710 tuh, 1776
rul , 1580 sar , 1646 sob , 1712 tuk , 1778
rum , 1582 sas , 1648 sof, 1714 tul , 1780
run , 1584 sat , 1650 soh, 1716 tum, 1782
rur , 1586 sib , 1652 sok , 1718 tun , 1784
rus , 1588 sif, 1654 sol , 1720 tur , 1786
rut , 1590 sih, 1656 som , 1722 tus , 1788
reb , 1592 sik , 1658 son , 1724 tut , 1790
ref, 1594 sil , 1660 sor , 1726 teb , 1792
reh, 1596 sim , 1662 sos , 1728 tef, 1794
rek , 1598 sin , 1664 sot , 1730 teh, 1796
rel , 1600 sir , 1666 tab , 1732 tek , 1798
rem , 1602 sis , 1668 taf, 1734 tel, 1800
ren , 1604 sit , 1670 tah, 1736 tem, 1802
rer , 1606 sub , 1672 tak , 1738 ten , 1804
res , 1608 suf, 1674 tal , 1740 ter , 1806
ret , 1610 suh, 1676 tam , 1742 tes , 1808
rob , 1612 suk , 1678 tan , 1744 tet , 1810
rof, 1614 sul , 1680 tar , 1746 tob , 1812
roh, 1616 sum, 1682 tas , 1748 tof, 1814
rok , 1618 sun , 1684 tat , 1750 toh, 1816
rol , 1620 sur , 1686 tib , 1752 tok , 1818
rom , 1622 sus , 1688 tif, 1754 tol , 1820
ron , 1624 sut , 1690 tih, 1756 tom , 1822
ror , 1626 seb , 1692 tik , 1758 ton , 1824
ros , 1628 sef, 1694 til , 1760 tor , 1826
tos , 1828 wef, 1894 yil , 1960 yor , 2026
tot , 1830 weh, 1896 yim , 1962 yos , 2028
wab , 1832 wek , 1898 yin , 1964 yot , 2030
waf, 1834 wel , 1900 yir , 1966 zab, 2032
wah, 1836 wem , 1902 yis , 1968 zaf, 2034
wak , 1838 wen , 1904 yit , 1970 zah, 2036
wal , 1840 wer , 1906 yub , 1972 zak, 2038
wam, 1842 wes , 1908 yuf, 1974 zal, 2040
wan , 1844 wet , 1910 yuh, 1976 zam, 2042
war , 1846 wob , 1912 yuk , 1978 zan, 2044
was , 1848 wof, 1914 yul , 1980 zar, 2046
wat , 1850 woh, 1916 yum , 1982 zas, 2048
wib , 1852 wok, 1918 yun , 1984 zat, 2050
wif, 1854 wol , 1920 yur , 1986 zib, 2052
wih, 1856 wom, 1922 yus , 1988 zif, 2054
wik , 1858 won , 1924 yut , 1990 zih, 2056
wil , 1860 wor , 1926 yeb , 1992 zik, 2058
wim , 1862 wos , 1928 yef, 1994 zil, 2060
win , 1864 wot , 1930 yeh, 1996 zim, 2062
wir , 1866 YAP, 1932 yek , 1998 zin, 2064
wis , 1868 yaf, 1934 yel , 2000 zir, 2066
wit , 1870 yah, 1936 yem , 2002 zis, 2068
wub , 1872 yak , 1938 yen , 2004 zit, 2070
wuf, 1874 yal , 1940 yer , 2006 (KVKK) ***
wuh, 1876 yam , 1942 yes , 2008 BANG, 2072
wuk , 1878 yan , 1944 yet , 2010 bing, 2074
wul , 1880 yar , 1946 yob , 2012 bung, 2076
wum , 1882 yas , 1948 yof, 2014 beng, 2078
wun , 1884 yat , 1950 yoh, 2016 bong, 2080
wur , 1886 yib , 1952 yok , 2018 cang, 2082
wus , 1888 yif, 1954 yol , 2020 cing, 2084
wut , 1890 yih, 1956 yom , 2022 cung, 2086
web , 1892 yik , 1958 yon , 2024 ceng, 2088
cong, 2090 lung, 2156 WANG, 2222 ngo, 40
dang, 2092 leng, 2158 wing, 2224 nya, 42
ding, 2094 long, 2160 wung, 2226 nyi, 44
dung, 2096 mang, 2162 weng, 2228 nyu, 46
deng, 2098 ming, 2164 wong, 2230 nye, 48
dong, 2100 mung, 2166 yang, 2232 nyo, 50
FANG, 2102 meng, 2168 ying, 2234 pro, 52
fing, 2104 mong, 2170 yung, 2236 sta, 54
fung, 2106 nang, 2172 yeng, 2238 tra, 56
feng, 2108 ning, 2174 yong, 2240 tri, 58
fong, 2110 nung, 2176 ***** ***** tro, 60
gang, 2112 neng, 2178 (VKK) *** (KKVK) ***
ging, 2114 nong, 2180 ang, 0 blis, 62
gung, 2116 PANG, 2182 ing, 2 brak, 64
geng, 2118 ping, 2184 ins, 4 brik, 66
gong, 2120 pung, 2186 ung, 6 bruk, 68
hang, 2122 peng, 2188 eng, 8 brol, 70
hing, 2124 pong, 2190 ong, 10 drop, 72
hung, 2126 RANG, 2192 (KKV) *** gram, 74
heng, 2128 ring, 2194 bri, 12 klan, 76
hong, 2130 rung, 2196 dra, 14 klim, 78
JANG, 2132 reng, 2198 dwi, 16 krab, 80
jing, 2134 rong, 2200 gra, 18 ngat, 82
jung, 2136 sang, 2202 gri, 20 ngan, 84
jeng, 2138 sing, 2204 gla, 22 ngin, 86
jong, 2140 sung, 2206 kra, 24 nyer, 88
kang, 2142 seng, 2208 kro, 26 staf, 90
king, 2144 song, 2210 kla, 28 stan, 92
kung, 2146 tang, 2212 kli, 30 tran, 94
keng, 2148 ting, 2214 nga, 32
kong, 2150 tung, 2216 ngi, 34
lang, 2152 teng, 2218 ngu, 36
ling, 2154 tong, 2220 nge, 38
Lampiran 2. Listing Program

//main.c
#include <mega8.h>
#include "sEOS.h"
#include "ketik.h"
#include "spiku.h"
#include "pwmku.h"
#include "adc.h"

void main(void)
{

sEOS_Init_Timer0();
sEOS_Idle_Init();
ketik_init();
mcu_spi_init();
if(mmc_init()!= 1){
delay_ms(500);
#asm
RJMP 0x00;__RESET
#endasm
}
set_blok(512);
pwm_init();
adc_init();

while (1)
{
#asm("sleep")
};
}

//sEOS.c
#include "sEOS.h"
#include "ketik.h"
#include "adc.h"

void sEOS_Init_Timer0(void)
{
TCCR0=0x05;
TCNT0=0;
TIMSK=0x01;
#asm("sei")
}

void sEOS_Idle_Init(void)
{
MCUCR |= 0x40;
}

1
interrupt [TIM0_OVF] void sEOS_ISR(void)
{
scan();
cek_baterai();
}

//pwmku.c
#include "pwmku.h"

void pwm_init(void)
{
DDRB.1=1;
TCCR1A=0x81;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x80;
OCR1BH=0x00;
OCR1BL=0x00;
}

//spiku.c
#include <mega8.h>
#include "spiku.h"
#include <spi.h>
#include <lcd2.h>

//-------------------------------------------------------

void mcu_spi_init(void)
{
DDRB.2 = 1;
DDRB.3 = 1;
DDRB.4 = 0;
DDRB.5 = 1;
SPCR = 0b01010011 ;
SPSR = 0;
PORTB.2= 0;
}
//-------------------------------------------------------

char Command(char cmd, unsigned int AdrH, unsigned int


AdrL, char CRCbits )
{
spi(0xFF);
spi(cmd);

2
spi((unsigned char)(AdrH >> 8));
spi((unsigned char)AdrH);
spi((unsigned char)(AdrL >> 8));
spi((unsigned char)AdrL);
spi(CRCbits);
spi(0xFF);
return spi(0xFF);
}

//-------------------------------------------------------
char mmc_init(void)
{
char i;
PORTB.2= 1;
for(i=0; i < 10; i++) spi(0xFF);
PORTB.2= 0;
if (Command(0x40,0,0,0x95) != 1) goto mmcerror;
st:
if (Command(0x41,0,0,0xFF) !=0) goto st;

SPCR = 0b01010000;
SPSR = 1;
return 1;
mmcerror:
lcd_gotoxy(0,0);
lcd_putsf("MMC Init Error!");
return 0;
}
//-------------------------------------------------------

char set_blok(unsigned int block)


{

if(Command(0x50,0,block,0xFF) != 0)
{
lcd_gotoxy(0,0);
lcd_putsf("Blok Set Error!");
return 0;
}
else
return 1;
}

//ttf&address.c
# include "ttf&address.h"
# include <string.h>
#include "driver.h"

//------------------------------------------------------

void pola(char a[50]){

3
char b[5],panjang=0,a2[50],ofset=0,urut=0,lebar=0;
char kata[25][5],suku=0,j=0;
char *p;
signed char hasil;
unsigned int nilai=0,i=0;
unsigned int alamat[25];
unsigned int exception=5000;

char rule[][5]={
"kvkk", //0
"kkvk", //1 *17
"kvk", //2
"kkv", //3
"vkk", //4
"kv", //5
"vk", //6
"v", //7
"k", //8
"_", //9
",",
"."
};

char kkvk[][5]={
"blis", //13
"brak", //0
"brik", //1
"bruk", //2
"brol",
"drop", //14
"gram", //3
"klan", //5
"klim", //6
"krab", //4
"ngat", //7
"ngan", //8
"ngin", //9
"nyer",
"staf", //10
"stan", //11
"tran" //12

};

char kkv[][4]={
// "bri", //0
"bri", //1
"dra", //2
"dwi", //3
"gra", //4
"gri", //5

4
"gla", //6
"kra", //7
"kro",
"kri", //8
"kla", //9
"kli", //10
"nga", //11
"ngi", //12
"ngu", //13
"nge", //14
"ngo",
"nya",
"nyi",
"nyu",
"nye",
"nyo",
"pro", //18
"sta", //15
"tra", //16
"tri", //17
"tro" //19
};

char vkk[][4]={
"ang", //0
"ing", //1
"ins", //5
"ung", //2
"eng", //3
"ong" //4
};
//-----------------------------------------------
panjang=strlen(a);
p=a;
for(i=0;i<panjang;i++){
if
((*p=='a')||(*p=='i')||(*p=='u')||(*p=='e')||(*p=='o'))
a2[i]='v';
else if (*p=='_')
a2[i]='_';
else if (*p==',')
a2[i]=',';
else if (*p=='.')
a2[i]='.';
else
a2[i]='k';
*p++;

//--------------------------------------------------

5
lagi:
suku++;
ofset+=4;
urut=0;
lebar=4;
memcpy(b,a2+panjang-ofset,lebar);
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

//----------------------------------------------
p=kata[suku];
if ((*p>'a')&&(*p<'e'))
nilai=(unsigned int)(*p-'b')*10+2072;
else if((*p>'e')&&(*p<'i'))
nilai=(unsigned int)(*p-'b')*10+2062;
else if((*p>'i')&&(*p<'o'))
nilai=(unsigned int)(*p-'b')*10+2052;
else if((*p>'o')&&(*p<'q'))
nilai=(unsigned int)(*p-'b')*10+2042;
else if((*p>'q')&&(*p<'u'))
nilai=(unsigned int)(*p-'b')*10+2032;
else if((*p>'v')&&(*p<'x'))
nilai=(unsigned int)(*p-'b')*10+2012;
else if((*p>'x')&&(*p<'{'))
nilai=(unsigned int)(*p-'b')*10+2002;

*p++;
if (*p=='a')
nilai+=0;
else if (*p=='i')
nilai+=2;
else if (*p=='u')
nilai+=4;
else if (*p=='e')
nilai+=6;
else if (*p=='o')
nilai+=8;
alamat[j]=nilai;
j++;
//----------------------------------------------
goto lagi;
}
else{
urut++;
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(b,a+panjang-ofset,lebar);
for(i=0;i<17;i++){
hasil=strncmp(b,kkvk[i],lebar);

6
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);
//----------------------------------------------
nilai=i*2+64;
alamat[j]=nilai+exception;
j++;
//----------------------------------------------
goto lagi;}
}
}
}

ofset--;
urut=2;
lebar=3;
memcpy(b,a2+panjang-ofset,lebar);
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

//----------------------------------------------
p=kata[suku];
if ((*p>'a')&&(*p<'e'))
nilai=(unsigned int)(*p-'b')*100+332;
else if((*p>'e')&&(*p<'i'))
nilai=(unsigned int)(*p-'b')*100+232;
else if((*p>'i')&&(*p<'o'))
nilai=(unsigned int)(*p-'b')*100+132;
else if((*p>'o')&&(*p<'q'))
nilai=(unsigned int)(*p-'b')*100+32;
else if((*p>'q')&&(*p<'u'))
nilai=(unsigned int)(*p-'b')*100-68;
else if((*p>'v')&&(*p<'x'))
nilai=(unsigned int)(*p-'b')*100-268;
else if((*p>'x')&&(*p<'{'))
nilai=(unsigned int)(*p-'b')*100-368;

*p++;
if (*p=='a')
nilai+=0;
else if (*p=='i')
nilai+=20;
else if (*p=='u')
nilai+=40;
else if (*p=='e')
nilai+=60;
else if (*p=='o')
nilai+=80;

*p++;
if (*p=='b')

7
nilai+=0;
else if (*p=='f')
nilai+=2;
else if (*p=='h')
nilai+=4;
else if (*p=='k')
nilai+=6;
else if (*p=='l')
nilai+=8;
else if (*p=='m')
nilai+=10;
else if (*p=='n')
nilai+=12;
else if (*p=='r')
nilai+=14;
else if (*p=='s')
nilai+=16;
else if (*p=='t')
nilai+=18;

alamat[j]=nilai;
j++;
//----------------------------------------------
goto lagi;}
else{
urut++;
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(b,a+panjang-ofset,lebar);
for(i=0;i<26;i++){
hasil=strncmp(b,kkv[i],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

//----------------------------------------------
nilai=i*2+12;
alamat[j]=nilai+exception;
j++;
//----------------------------------------------
goto lagi;}
}
}
else{
urut++;
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(b,a+panjang-ofset,lebar);
for(i=0;i<6;i++){
hasil=strncmp(b,vkk[i],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

8
//----------------------------------------------
nilai=i*2;
alamat[j]=nilai+exception;
j++;
//----------------------------------------------
goto lagi;}
}
}

}
}

ofset--;
urut=5;
lebar=2;
memcpy(b,a2+panjang-ofset,lebar);
for (i=0;i<2;i++){
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

//----------------------------------------------
p=kata[suku];
if
((*p=='a')||(*p=='i')||(*p=='u')||(*p=='e')||(*p=='o')){
if (*p=='a')
nilai=52;
else if (*p=='e')
nilai=72;
else if (*p=='i')
nilai=92;
else if (*p=='o')
nilai=112;
else if (*p=='u')
nilai=132;

*p++;

if (*p=='b')
nilai+=0;
else if (*p=='f')
nilai+=2;
else if (*p=='h')
nilai+=4;
else if (*p=='k')
nilai+=6;
else if (*p=='l')
nilai+=8;
else if (*p=='m')
nilai+=10;

9
else if (*p=='n')
nilai+=12;
else if (*p=='r')
nilai+=14;
else if (*p=='s')
nilai+=16;
else if (*p=='t')
nilai+=18;

alamat[j]=nilai;
j++;
}
else {
if ((*p>'a')&&(*p<'e'))
nilai=(unsigned int)(*p-'b')*10+152;
else if((*p>'e')&&(*p<'i'))
nilai=(unsigned int)(*p-'b')*10+142;
else if((*p>'i')&&(*p<'o'))
nilai=(unsigned int)(*p-'b')*10+132;
else if((*p>'o')&&(*p<'q'))
nilai=(unsigned int)(*p-'b')*10+122;
else if((*p>'q')&&(*p<'u'))
nilai=(unsigned int)(*p-'b')*10+112;
else if((*p>'v')&&(*p<'x'))
nilai=(unsigned int)(*p-'b')*10+92;
else if((*p>'x')&&(*p<'{'))
nilai=(unsigned int)(*p-'b')*10+82;

*p++;
if (*p=='a')
nilai+=0;
else if (*p=='i')
nilai+=2;
else if (*p=='u')
nilai+=4;
else if (*p=='e')
nilai+=6;
else if (*p=='o')
nilai+=8;

alamat[j]=nilai;
j++;
}
//----------------------------------------------
goto lagi;}
else{
urut++;}
}

ofset--;

10
urut=7;
lebar=1;
memcpy(b,a2+panjang-ofset,lebar);
for (i=0;i<5;i++){
hasil=strncmp(b,rule[urut],lebar);
if (hasil==0){
memcpy(kata[suku],a+panjang-ofset,lebar);

//----------------------------------------------
p=kata[suku];
if ((*p>='a')&&(*p<='z'))
nilai=(unsigned int)(*p-'a')*2;
else if(*p=='_')
nilai=10000;
else if(*p==',')
nilai=10001;
else if(*p=='.')
nilai=10002;

alamat[j]=nilai;
j++;
//----------------------------------------------
goto lagi;}
else{
urut++;}
}
output(suku,alamat);
}

//driver.c
#include "driver.h"

#define off 0
#define on 1

void output(char suku,unsigned int alamat[25])


{
unsigned long int ofset_mmc;
unsigned long int tabel_awal;
unsigned long int awal, lo=0;
unsigned int pembuka, hi=0, j, sample=0, batas, output;
unsigned char i, data;
bit potong=on;
bit habis, hilang, titik, kecuali;

for(i=suku-1;i>0;i--){

if (alamat[i-1]<10000){

if (alamat[i-1]<5000){
ofset_mmc= 0x42000+ 0x2B;

11
}
else if (alamat[i-1]>=5000){
ofset_mmc= 0x265800+ 0x2B;
alamat[i-1]-=5000;
if(potong==on){
kecuali=on;
}
}

tabel_awal= (unsigned long int)alamat[i-


1]*1000+ofset_mmc;
awal= (floor((unsigned long int)tabel_awal/512.0))*512;
pembuka= tabel_awal-awal;
lo= (unsigned int)awal;
hi= awal>>16;

if((alamat[i-2]==10002)||(i==1)){
titik=on;
}
else{
titik=off;
}
habis=off;
sample=0;
output=0;
while (habis==off){

if (Command(0x51,hi,lo,0x95) != 0) {
lcd_gotoxy(0,0);
lcd_putsf("MMC: read error!");
}
while(spi(0xFF) != (char)0xFE);

for(j=0;j<512;j++){
if (pembuka>0){
pembuka--;
spi(0xFF);
}
else{
data=spi(0xFF);
sample++;

if((data<20)&&(sample>500)){
habis=on;
}
if((habis==off)&&(potong==off)){
OCR1A=data;
output++;
if((titik==on)&&(output>700)){

12
delay_us(126);
}
else{
delay_us(120);
}
}
if((potong==on)&&(habis==on)){
if(kecuali==on){
alamat[i-1]+=5000; kecuali=off;
}
i++;
hilang=on;
batas=sample;
potong=off;
}
if((hilang==on)&&(sample==(4*batas/5))){
habis=on;
hilang=off;
}
}
}
spi(0xFF);
spi(0xFF);

lo=512+(unsigned long int)lo;


if(lo>0xFFFF){
lo=0;
hi++;
}
}
OCR1A=128;
}

else{
if (alamat[i-1]==10000){
delay_ms(40);
}
else if(alamat[i-1]==10001){
delay_ms(150);
}
else if(alamat[i-1]==10002){
delay_ms(300);
}

if(alamat[i-3]==10000){
potong=off;
}
else{
potong=on;
}
}

13
}

//adc.c
#include "adc.h"
char cacah;

#define ADC_VREF_TYPE 0xE0


//---------------------------------------

void adc_init(void)
{
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
}
//-----------------------------------------------

unsigned char read_adc(unsigned char adc_input)


{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

//-----------------------------------------------
void cek_baterai(void)
{
char buf[16];
cacah++;
if(cacah>50){
cacah=0;
if(read_adc(3)<194){
lcd_gotoxy(0,0);
sprintf(buf,"Low_batt=%3d",read_adc(3));
lcd_puts(buf);
delay_ms(2000);
}
}
}

~end of code~

14
Lampiran 3. Hasil pengujian kualitas output suara sistem
I. No Kalimat Referensi
1. Saya makan nasi.
2. Nama saya mapola abdia rayana.
3. Kepalaku pusing sekali.
4. Aku beli gula satu kilogram.
5. Ibu membeli sayur di pasar.
6. Tolong ambilkan buku di meja itu.
7. Hati hati, ada lubang di jalan.
8. Selamat pagi.
9. Politeknik elektronika negeri surabaya.
10. Harganya seratus lima puluh ribu rupiah.

Responden 1
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. Nama saya mapola abdia rayana. 0
3. Gempa lagu bumi berkali 55.5
4. Aku beli gula satu kilogram. 0
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Hari hari, pada lupa di jalan. 36.6
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Padanya seratus lima puluh ribu rupiah. 13.3

Responden 2
No Kalimat hasil identifikasi pendengar Error(%)
1. Plagiat makan nasi. 33.3
2. ---- ---- mapola abdia rayana. 30.7
3. Kepalaku pusing sekali. 0
4. --- ---- ---- satu kilogram. 54.5
5. Ibu membeli sayur di pasar. 0
6. - 100
7. - 100
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya tujuh ratus lima puluh ribu rupiah. 6.6

15
Responden 3
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. ---- saya mapola abdia rayana. 15.3
3. Kepalaku pusing sekali. 0
4. --- ---- ---- satu kilogram. 54.5
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Hati hati, pada paku di dalam. 27.2
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya seratus lima puluh ribu rupiah. 0

Responden 4
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. Nama saya mapola abdia rayana. 0
3. Tempahlaku pusing sekali. 22.2
4. Aku beli gula di program. 36.6
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan bulu di meja itu. 8.3
7. Hali hali, ada lubang di jalan. 18.8
8. Selamat pagi. 0
9. Politeknik ----------- negeri surabaya. 31.2
10. Harganya ------- lima puluh ribu rupiah. 20

Responden 5
No Kalimat hasil identifikasi pendengar Error(%)
1. Satria makan nasi. 16.6
2. Nama saya mapola ahmad radia. 30.7
3. Tingkah laku pusing sekali. 22.2
4. Kumpulan di satu program. 72.7
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Tadi pagi, ada lubang di jalan. 36.6
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Temperaturnya lima puluh lima ribu rupiah. 40

16
Responden 6
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. - 100
3. Tingkah laku pusing sekali. 22.2
4. Aku ---- ---- ---- diprogram. 72.7
5. Ibu membeli baju di pasar. 20
6. Tolong ambilkan buku di meja itu. 0
7. Hati hati, ada lubang di jalan. 0
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya tujuh ratus lima puluh ribu rupiah. 6.6

Responden 7
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. Nama saya marona ----- ------. 58.3
3. ----laku pusing sekali. 22.2
4. - 100
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Pagi pagi masak tumpang di jalan 72.7
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya seratus lima puluh ribu rupiah. 0

Responden 8
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. Nama saya mapola abdia rayana. 0
3. Kepalaku pusing sekali. 0
4. Aku nomor satu diprogram 54.5
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. - 100
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya seratus lima puluh ribu rupiah. 0

17
Responden 9
No Kalimat hasil identifikasi pendengar Error(%)
1. Saya makan nasi. 0
2. Nama saya mapola abdia rayana. 0
3. Kepalaku pusing sekali. 0
4. Aku hobi sekali memprogram 72.7
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Hati hati, ada lubang di jalan. 0
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya seratus lima puluh ribu rupiah. 0

Responden 10
No Kalimat hasil identifikasi pendengar Error(%)
1. Tagihan makan nasi. 33.3
2. Nama saya mapola abdia negara. 25
3. Kepalaku pusing sekali. 0
4. Aku serli bunga diprogram. 63.6
5. Ibu membeli sayur di pasar. 0
6. Tolong ambilkan buku di meja itu. 0
7. Hati hati, banyak lubang di jalan. 18.8
8. Selamat pagi. 0
9. Politeknik elektronika negeri surabaya. 0
10. Harganya seratus lima puluh ribu rupiah. 0

II.
No Kalimat referensi
1. Buku pergi mandi.
2. Saya nasi lalu.
3. Program makan beli.
4. Murah lagi gula.
5. Badak jelas pagi.
6. Tadi kursi kancil.
7. Lupa jalan nama ribu.
8. Baju binatang kepala.
9. Surabaya negara sekolah.
10. Sudah mata kebakaran selamat.

18
Responden 1
No Kalimat hasil identifikasi pendengar Error (%)
1. Bu-- pergi mandi. 16.6
2. Saya ---- ---- 66.6
3. Program ---- ----. 66.6
4. Murah lagi ----. 33.3
5. ----- ----- pagi. 66.6
6. Tadi kursi -----. 33.3
7. ---- jalan nama ribu. 25
8. Baju binatang kepala. 0
9. Surabaya negara sekolah. 0
10. Sudah ---- ---- --------- -------. 81.8

Responden 2
No Kalimat hasil identifikasi pendengar Error(%)
1. - 100
2. Saya ---- ---- 66.6
3. Program ----- ---- 66.6
4. Murah ---- ---- 66.6
5. - 100
6. ----- kursi ----- 66.6
7. ---- ----- ---- ribu. 75
8. - 100
9. -------- ------ sekolah. 70
10. Sudah ---- ---- --------- ------- 81.8

Responden 3
No Kalimat hasil identifikasi pendengar Error(%)
1. ------ --gi mandi. 50
2. Saya nasi la--. 16.6
3. ------- ----- --li. 83.3
4. Murah ---- ---- 66.6
5. ----- ----- pagi. 66.6
6. - 100
7. - 100
8. - 100
9. Surabaya negara sekolah. 0
10. - 100

19
Responden 4
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. Saya nasi ----. 33.3
3. Program makan ----. 33.3
4. Murah lagi -----. 33.3
5. ----- ----- pagi. 66.6
6. Tadi kursi -----. 33.3
7. ---- jalan ---- ribu. 50
8. Baju binatang ----- 37
9. Surabaya negara sekolah. 0
10. Sudah ---- --------- ------- 81.8

Responden 5
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. Saya nasi ---- 33.3
3. Program makan ---- 33.3
4. Murah lagi ---- 33.3
5. ----- ----- pagi. 66.6
6. Tadi kursi ------. 33.3
7. ---- jalan ---- ----. 75
8. Baju binatang ------- 37
9. Surabaya negara sekolah. 0
10. Sudah ---- --------- ------- 81.8

Responden 6
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. Saya ---- ----. 66.6
3. - 0
4. Murah lagi ---- 33.3
5. ---- jelas pagi. 33.3
6. Ta-- kursi ------ 50
7. ---- jalan nama ribu. 33.3
8. - 100
9. Surabaya negara sekolah. 0
10. Sudah ---- --------- ------- 81.8

20
Responden 7
No Kalimat hasil identifikasi pendengar Error(%)
1. Buku pergi mandi. 0
2. Saya nasi ----. 33.3
3. Program makan ----. 33.3
4. Mu--- ---- ---- 83.3
5. ----- ----- pagi. 66.6
6. ---- kursi ------ 66.6
7. ---- jalan nama ---- 50
8. - 100
9. Surabaya negara sekolah. 0
10. - 100

Responden 8
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. Saya nasi ---- 33.3
3. Program makan ---- 33.3
4. ----- lagi ---- 66.6
5. ----- ----- pagi. 66.6
6. ---- kursi ------ 66.6
7. ---- jalan ---- ---- 75
8. - 100
9. Surabaya negara sekolah. 0
10. Sudah ---- --------- ------- 81.8

Responden 9
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. Saya ---- ---- 66.6
3. Program makan beli. 0
4. Murah lagi ---- 33.3
5. Badak ----- pagi. 66.6
6. ---- kursi ------ 33.3
7. ---- jalan nama ---- 50
8. Baju -------- ------ 75
9. Surabaya negara sekolah. 0
10. Sudah ---- kebakaran ----mat. 36.3

21
Responden 10
No Kalimat hasil identifikasi pendengar Error(%)
1. ---- pergi mandi. 33.3
2. ---- ---- lalu. 66.6
3. Program ----- ---- 66.6
4. ----- ---- gula. 66.6
5. ----- ----- pagi. 66.6
6. --di kursi ------ 50
7. ---- jalan nama ---- 50
8. Baju binatang ----- 37.5
9. Surabaya negara sekolah. 0
10. Sudah ---- kebakaran ----mat. 36.3

22
Lampiran 4. Range frekuensi suara manusia

VOCAL Approximate frequency range


Soprano 250Hz – 1k
Contralto 200Hz – 700Hz
Baritone 110Hz – 425Hz
Bass 80Hz – 350Hz
WOODWIND
Piccolo 630Hz – 5k
Flute 250Hz – 2.5k
Oboe 250Hz – 1.5k
Clarinet (B flat or A) 125Hz – 2k
Clarinet (E flat ) 200Hz – 2k
Bass clarinet 75Hz – 800Hz
Basset Horn 90Hz – 1k
Cor Anglais 160Hz – 1k
Bassoon 55Hz – 575Hz
Double Bassoon 25Hz – 200Hz
BRASS
Soprano Saxophone 225Hz – 1k
Alto Saxophone 125Hz – 900Hz
Tenor Saxophone 110Hz – 630Hz
Baritone Saxophone 70Hz – 450Hz
Bass Saxophone 55Hz – 315Hz
Trumpet (C) 170Hz – 1k

23
PENULIS

Identitas:
• Mapola Abdia Rayana
• Ngawi, 28 Oktober 1986
• Rt03/Rw02 Dsn/Ds/Kec. Jogorogo Kab.Ngawi -
Jawa Timur 63262
• 085655208020 – vanpolla@student.eepis-its.edu

Pendidikan:
ƒ 1992 – 1998 SDN 1 Jogorogo
ƒ 1998 – 2001 SLTPN 1 Jogorogo
ƒ 2001 – 2004 SMUN 2 Ngawi
ƒ 2005 – 2009 EEPIS-ITS
D4-T.Elektronika

”tidur untuk kesehatan”

Penulis telah mengikuti seminar Proyek Akhir pada


tanggal 22 Juli 2009, sebagai salah satu persyaratan untuk
memperoleh gelar Sarjana Sains Terapan (S.ST.).

24

You might also like