Aplikasi agar HP bisa mendengar dan bisa menulis

Saya telah mengirimi kode ini ke beberapa teman2 yang membutuhkan-nya. Tapi karena penyakit bawaan saya yang bernama m a l a s kambuh lagi maka untuk selanjutnya saya tidak akan kirim lagi lewat email dan atau PM. Bagi yang berminat menelusuri kode ini silahkan datang kesini dan ambil sendiri... sorry yah

Ini adalah struktur kode paling sederhana untuk aplikasi Speech Recognition yaitu aplikasi yang bisa menulis apa yang kita ucap(ucapnya yang jelas yah biar HPnya bisa paham). Bagi teman2 yang pintar java tentunya sangat mudah untuk mengembangkan aplikasi ini lebih lanjut sesuai kebutuhan masing2.
Aplikasi ini telah saya jalankan testing di beberapa device yang menggunakan sistim android baik yang layar kecil seperti HP maupun di layar lebar seperti tablet khususnya tablet samsung dan motorola ukuran 7 inch maupun yang 10 inch, dan alhamdulillah tampang user interfacenya(UI) semuanya terlihat sama, begitu pula cara kerja dan logika aplikasinya semuanya sama, hal itu menunjukan bahwa aplikasinya telah bekerja sesuai rencana.

Walau aplikasi ini sudah bekerja dengan baik namun saya enggan untuk di pasang ke android market karena masih membutuhkan koneksi internet untuk bisa bekerja. Rupanya google dengan alasan internalnya masih belum melepaskan 'speech recognition' secara 100% open source. Atau mungkin saja ada bagian dari aplikasi ini yang membutuhkan banyak resource dari server/network yang tak bisa di muat/di masukan semuanya kedalam HP (ini mungkin loh), karena di dalam file AndroidManifest.xml masih membutuhkan permission khusus yang berbunyi ' <uses-permission android:name="android.permission.RECORD_AUDIO" /> '
Hal itu berbeda dengan aplikasi 'TTS(text to speech) yang bekerja tanpa koneksi internet yang saya tulis sebelumnya silahkan baca TTS disini

Tapi... oleh karena banyak teman yang PM saya untuk minta kodenya, maka berikut adalah class utama untuk menjalankan aplikasi 'Speech Recognition' yang saya beri nama SuaraJadiTeks.java



package com.vik_sintus.projects.suaraJadiTeks;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

/**
*aplikasi agar HP bisa mendengar dan menulis
*silahkan di pakai untuk kepentingan belajar
*Tak boleh di pakai utk kepentingan komersial
*hubungi vik.sintus@gmail.com
*segala kelebihan dan kekurangan di luar tanggungjawab pembuat
*/
public class SuaraJadiTeks extends Activity {

private static final int PRIKSA_KEBENARAN_NYA = 1234;
private ListView daftarKataYangKeluar;

//suruh android utk buka aplikasi yang
//tampang depannya berada di R.layout.suara_jadi_teks

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.suara_jadi_teks);
Button tombol = (Button) findViewById(R.id.tombolUntukBicara);
daftarKataYangKeluar = (ListView) findViewById(R.id.daftarKataKata);

// Kalau tak ada service maka matikan tombolnya
// dan tinggalkan pesan agar pengguna tak bingung
PackageManager paketAplikasi = getPackageManager();
List<resolveinfo> aktivitas = paketAplikasi.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (aktivitas.size() == 0){
tombol.setEnabled(false);
tombol.setText("salah..tak bisa di buka...coba konek ke internet");
}
}

//ketika tombol di tekan apa yang harus di lakukan

public void ketikaTombolDiTekan(View v)
{
mulaiAktivitasSuaraJadiTeks();
}

// mulai aktivitas voice recognition dengan
// menghidupkan Intent-nya.

private void mulaiAktivitasSuaraJadiTeks(){
Intent ubahSuaraJadiTeks = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
ubahSuaraJadiTeks.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
ubahSuaraJadiTeks.putExtra(RecognizerIntent.EXTRA_PROMPT, "Demo suara jadi teks...");
startActivityForResult(ubahSuaraJadiTeks, PRIKSA_KEBENARAN_NYA);
}

//Olah hasil dari Intent.

@Override
protected void onActivityResult(int kodePriksa, int ambilHasil, Intent hasil){
if (kodePriksa == PRIKSA_KEBENARAN_NYA && ambilHasil == RESULT_OK){
// isi dengan kata2 yang cocok menurut apa yang di
// dengar oleh device
// dan kalau device mendengar/merekam lebih
// banyak kata-kata(EXTRA_RESULT)maka daftarKataKataYangKeluar di
// adaptasikan dengan ArrayAdapter menggunakan
// tampilan/interface yang bernama simple_list_item_1
ArrayList<string> kataYangCocok = hasil.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);daftarKataYangKeluar.setAdapter(new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1,kataYangCocok));
}
super.onActivityResult(kodePriksa, ambilHasil, hasil);
}
}


Berikut adalah sedikit penjelasan dari kode di atas
public class SuaraJadiTeks extends Activity {
private static final int PRIKSA_KEBENARAN_NYA = 1234;
private ListView daftarKataYangKeluar;

}
Untuk melakukan kegiatan-nya class 'SuaraJadiTeks' harus bergandengan dengan class 'Activity'.
class 'Activity itu sendiri sudah ada dalam android sistim, kita hanya merangkulnya saja dengan kata kunci extends.
 Kita juga butuh tempat untuk menampung kata-kata yang di dengarkan oleh hp, dan kita ingin kata-kata yang keluar di layar HP harus berjajar baris demi baris mulai dari bagian atas layar. Untuk menghasilkan itu kita  membutuhkan bantuan class ListView . Selain itu kita juga membutuhkan sebuah data bertipe integer(int) yang di pergunakan untuk mengecek kebenaran bahwa suara yang keluar dari HP adalah benar2 menuliskan kata-kata yang kita ucap alias bukan membaca dari tempat lain.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.suara_jadi_teks);

Button tombol = (Button) findViewById(R.id.tombolUntukBicara);

daftarKataYangKeluar = (ListView) findViewById(R.id.daftarKataKata);
Kode di atas menjelaskan apa yang akan di lakukan ketika aplikasinya di buka? lihat isi aplikasinya di setContentView(R.layout.suara_jadi_teks);
Di dalam aplikasi akan ada tombol Button tombol = (Button) findViewById(R.id.tombolUntukBicara); dan juga akan ada daftar deretan kata yang di tuliskan oleh HP daftarKataYangKeluar = (ListView) findViewById(R.id.daftarKataKata);

Kemudian, kita membutuhkan jasa class PackageManager untuk membungkus semua objects dan classses yang menjalankan aktivitas aplikasi agar tidak tercecer. Sedangkan class List dan class ResolveInfo adalah untuk mengatur aktivitas aplikasi agar dapat di proses oleh class RecognizerIntent yang notabene adalah engine utama aplikasi ini yang beraksi sebagai ACTION_RECOGNIZE_SPEECH atau aksi yang memahami kata-kata yang kita ucap.
Kalau aktivitasnya tak ada if (aktivitas.size() == 0) maka matikan tombolnya tombol.setEnabled(false); dan berikan penjelasan kepada pengguna mengapa aplikasinya tak bekerja dengan tombol.setText("tak bisa di buka...mungkin kodenya salah... coba konek ke internet")
PackageManager paketAplikasi = getPackageManager();
List<resolveinfo> aktivitas = paketAplikasi.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (aktivitas.size() == 0)
{
tombol.setEnabled(false);
tombol.setText("tak bisa di buka, mungkin kodenya salah... coba konek ke internet");
}

Beberapa dokumen lain yang di butuhkan

Ada ciri khas khusus dalam android struktur, seperti adanya AndroidManifest.xml ia bekerja sebagai pintu gerbang bagi semua aplikasi android, silahkan baca tentang AndroidManifest selengkapnya di http://developer.android.com/guide/topics/manifest/manifest-intro.html

Berikut adalah isi dari AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.vik_sintus.projects.suaraJadiTeks"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 
    <application android:label="VoiceRecognition" android:icon="@drawable/icon"
            >
        <activity android:name=".SuaraJadiTeks"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Selain AndroidManfest.xml, aplikasi ini juga membutuhkan tampang/interface agar dapat di lihat, di colek dan di sentuh oleh manusia. Berikut adalah interface dari aplikasi ini yang saya beri nama suara_jadi_teks.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="4dip"
android:text="@string/suruhBicara" />

<Button android:id="@+id/tombolUntukBicara"
android:layout_width="fill_parent"
android:onClick="tombolSudahDiTekan"
android:layout_height="wrap_content"
android:text="@string/tombol" />

<ListView android:id="@+id/daftarKataKata"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />

</LinearLayout>
Berikut adalah strings.xml seperti yang di isyaratkan oleh @string pada kode di atas
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">SuaraJadiTeks</string>
<string name="voice_recognition_prompt">Demo Suara Jadi Teks</string>
<string name="tombol">Tekan disini</string>
<string name="suruhBicara">Tekan tombol dan mulai bicara</string>
</resources>

mmmhhh.... apa lagi yah
Saya rasa itu saja yang di butuhkan agar aplikasi 'speech recognition' ini bisa bekerja.

Untuk refresh ingatan... yang kita butuhkan adalah
1 SuaraJadiTeks.java
2 AndroidManifest.xml
3 suara_jadi_teks.xml
4 strings.xml

Note: nama file adalah case sensitive, maksudnya harus mengindahkan huruf kecil atau huruf besar serta tanda baca yang ada di nama file tsb

Baca disini langkah untuk bangun aplikasi android pakai eclipse


Recommended Posts :

0 comments:

Post a Comment - Back to Content

:)) ;)) ;;) :D ;) :p :(( :) :( :X =(( :-o :-/ :-* :| 8-} :)] ~x( :-t b-( :-L x( =))