Merhaba arkadaşlar. Android’de sesi yazıya aktaran bir program yazacağız. Bunu yapmak için Google’ın hazır ses algılama api’sini kullanacağız.
Oluşturduğumuz uygulamanın çıktısı aşağı yukarı şöyle olacaktır.

Öncelikle Android Studio’dan yeni bir proje oluşturuyoruz. Projeyi oluşturduktan sonra “res/values” klasörleri altındaki strings.xml’i aşağıdaki gibi düzenliyoruz.
<resources> <string name="app_name">Beni Dinle!</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="speech_prompt">Konuş!…</string> <string name="speech_not_supported">Kusura bakmayın. Aygıtınız sesle girişi desteklemiyor</string> <string name="tap_on_mic">Konuşmak için mikrofona dokunun</string> <string name="dugme">Sesi Algilayan Tus</string> </resources>
Daha sonra yine res/values altında sağ tıklayıp colors adında yeni bir xml dosyası oluşturuyoruz. İçine de aşağıdakileri yazıyoruz.
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#ffffff</color> <color name="bg_gradient_start">#31244e</color> <color name="bg_gradient_end">#6b394c</color> </resources>
Şimdi ise drawable altına bg_gradient adında bir xml dosyası oluşturuyoruz.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="45" android:endColor="@color/bg_gradient_end" android:startColor="@color/bg_gradient_start" android:type="linear"/> </shape>
Buraya kadar yaptıklarımız bize tasarımda yardımcı olması içindi. Ana sayfamızı(layout) oluşturmak için activity_main.xml\’i açıyoruz. İçindekileri aşağıdaki şekilde düzenliyoruz:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:background="@drawable/bg_gradient" tools:context=".MainActivity"> <!--android:id="@+id/"--> <TextView android:id="@+id/txtSpeechInput" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="100dp" android:textColor="@color/white" android:textSize="26sp" android:textStyle="normal" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="60dp" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/btnSpeak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:src="@android:drawable/ic_btn_speak_now" android:contentDescription="@string/dugme" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="@string/tap_on_mic" android:textColor="@color/white" android:textSize="15sp" android:textStyle="normal" /> </LinearLayout> </RelativeLayout>
Ve son olarak MainActivity.java dosyamızı düzenliyoruz. İlk olarak RecognizerIntent denilen tanımlamaları yapıyoruz.
ACTION_RECOGNIZE_SPEECH Kullancıdan ses girişini alır ve aynı aktiviteye döndürür.
LANGUAGE_MODEL_FREE_FORM Girişin hangi dilden yapıldığını ayarlar.
EXTRA_PROMPT Kullanıcıya konuşması gerektiğini ekranda yazı şekilde gösterir.
Konuşma tamamlandığında sonucu onActivityResult‘dan yakalayıp istediğimiz yerde kullanmamız gerekir.
MainActivity.java
package com.turan.fatih.beni_dinle; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.Locale; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.speech.RecognizerIntent; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private TextView txtSpeechInput; private ImageButton btnSpeak; private final int REQ_CODE_SPEECH_INPUT = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtSpeechInput = (TextView) findViewById(R.id.txtSpeechInput); btnSpeak = (ImageButton) findViewById(R.id.btnSpeak); // hide the action bar getSupportActionBar().hide(); btnSpeak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { promptSpeechInput(); } }); } /** * Google konusma diyalogunu gosterir * */ private void promptSpeechInput() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.speech_prompt)); try { startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); } catch (ActivityNotFoundException a) { Toast.makeText(getApplicationContext(), getString(R.string.speech_not_supported), Toast.LENGTH_SHORT).show(); } } /** * Ses aliniyor * */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQ_CODE_SPEECH_INPUT: { if (resultCode == RESULT_OK && null != data) { ArrayList<String> result = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); txtSpeechInput.setText(result.get(0)); } break; } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Güzel bir yazı olmuş.Teşekkürler
BeğenBeğen