Android Sesi Yazıya Çevirme

0
Android Sesi Yazıya Çevirme

Herkese merhaba bu yazıda telefona verdiğimiz ses bilgisini yazı olarak elde edeceğiz. Bu elde ettiğimiz yazı bilgisi yine ileri ki projelerde kullanmak için bize yardımcı olacak. Mesela elde ettiğimiz yazı verisini bluetooth ile arduino’ya gönderip ses ile kontrol edilen projeler gerçekleştirebiliriz vs.

Şimdi hemen koda bakalım;

Koddan hemen önce program arayüzünden bahsedeyim bir buton ve bir label var butona basınca ses dinleme intent’i aktif oluyor ve alınan ses yazıya çevrilip label’a yazılıyor.

import android.content.Intent;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private  static final int id = 1;
    Button gonder;
    TextView yazi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gonder = (Button) findViewById(R.id.button);
        yazi = (TextView) findViewById(R.id.textView2);
        gonder.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {

        if (view.getId() == R.id.button)
        {
            sesOlayi();
        }

    }

    void sesOlayi()
    {
        try
        {
            Intent sesIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);//sesi yazıya çevirme servisi
            sesIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,getClass().getPackage().getName());//istekte bulnuyoruz
            sesIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);//dil modeli
            startActivityForResult(sesIntent, id);//ses olayı için verdiğimiz id değişmeyecek static bir id intenti başlatıyoruz
        }
        catch (Exception e)
        {
            Toast.makeText(MainActivity.this,"Telefonunuz Bu Servisi Desteklemiyor",Toast.LENGTH_SHORT).show();
            //cihaz servisi desteklemiyorsa mesaj veriyor
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
            if (data != null)//eğer bir veri varsa
            {
                ArrayList yazıyaDonusen = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);//sonucu arraylist olarak dönderdi
                yazi.setText(yazıyaDonusen.get(0).toString());//elde ettiğimiz sonucu label'da gösterdik
            }

    }
}

Kodda gerekli açıklamaları yaptım zaten çok standart heryer de bulunabilecek bir kod burada dikkat edilmesi gereken bir kaç yer var kendi gözlemim birincisi istek yapılırken try catch blokları kullanmak önemli çünkü bazı telefonlar bu ses intentini desteklemiyor misal bende ki Sony Xperia X desteklemedi direk programdan atması yerine bir hata fırlatması daha iyi.Bize sesi aldıktan sonra arraylist olarak döndürüyor biz de bu arraylist’i alıp kendi arraylist’imize atıp kullanıyoruz. Tabi en önemlisi burada onActivityResult fonksiyonunu override etmemiz gerek verdiğimiz ses bilgisinin geri yazı olarak elde edebilmemiz için bu fonksiyon gerekli.
Bu yazıda basitçe sesi yazıya çevirdik dediğim gibi tek başına birşey ifade etmez sesi yazıya çevirmek bunu başka platformalarla birleştirerek farklı projeler yapılabilir, herkese iyi çalışmalar.

LEAVE A REPLY