Android’de sesi yazıya dönüştürmek

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.

Sesi Yazıya Çeviren Program  Ekran Çıktısı
Sesi Yazıya Çeviren Program Ekran Çıktısı

Ö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);
    }





}
Reklam

Android’de sesi yazıya dönüştürmek” için bir yanıt

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s