#16 – Uygulama 3 – Android ile Sesi Yazıya Çevirme


Merhabalar,
bu yazımızda sesten yazıya çevrimin ne kadar rahat olduğunu fark edeceksiniz.

Bu çevrimde asıl işi yapacak olan RecognizerIntent intent’idir. Uygulama başladığında RecognizerIntent.ACTION_RECOGNIZE_SPEECH intentini ses tanıma işlemi (action) yapacak şekilde tetikleyecek. Tetiklenen INTENT kullanıcıdan birşeyler söylemesini bekler, kullanıcı konuşup sustuktan sonra da konuştuklarının yazıya çevrilmiş halini Array şeklinde bize verecektir.

Bu Array olası doğru sonuçları içeriyor, o nedenle kullanıcının asıl demek istediği Array’ın herhangi bir elemanı olabilir fakat; daha çok baştaki elemanlar asıl demek isteneni içerir. Uygulamamızda bütün elemanları sınayacağız.

MainActivity.java dosyası içerisinde çevrim INTENT‘ini başlatan kod bloğu:

	private void CeviriBaslat() {
		Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
		i.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
				RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
		i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Haydi birşeyler söyle!");
		startActivityForResult(i, check);
	}

Başlattığımız INTENT’ten gelen sonuçları işleyeceğimiz metodumuz: onActivityResult(int requestCode, int resultCode, Intent data) bu metod içerisinde sonuçları ListView‘e iliştiriyoruz. Eğer kullanıcı “android evreni” demiş ise http://www.androidevreni.com‘un açılmasını sağlıyoruz.

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		if (requestCode == check && resultCode == RESULT_OK) {
			results = data
					.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
			lv.setAdapter(new ArrayAdapter<String>(this,
					android.R.layout.simple_expandable_list_item_1, results));

// eğer android evreni demiş ise; android evrenine gitsin :). for (int i = 0; i < results.size(); i++) { if (results.get(i).toLowerCase().equals("android evreni")) { String url = "http://www.androidevreni.com"; Intent ii = new Intent(Intent.ACTION_VIEW); ii.setData(Uri.parse(url)); startActivity(ii); break; } }
		}


	}

Daha başka sınamalar yaparak uygulamanın başka işler de yapmasını sağlayabilirsiniz. Mesela Flash‘ı açtırın, rehberdeki birilerini aratın, müzik çaldırın daha neler neler :).

Proje dosyalarının tam içeriği aşağıdaki gibidir.

activity_main.xml dosyası :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

    <Button
        android:id="@+id/bCevir"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Konuş" />

</LinearLayout>

 

MainActivity.java dosyası:

package com.example.androidevrenisesceviryazi;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

	int check = 1000;
	ListView lv;
	Button bCevir;
	ArrayList<String> results;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		lv = (ListView) findViewById(R.id.listView1);
		bCevir = (Button) findViewById(R.id.bCevir);
		bCevir.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				CeviriBaslat();
			}
		});

		CeviriBaslat();
	}

	private void CeviriBaslat() {
		Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
		i.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
				RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
		i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Haydi birşeyler söyle!");
		startActivityForResult(i, check);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		if (requestCode == check && resultCode == RESULT_OK) {
			results = data
					.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
			lv.setAdapter(new ArrayAdapter<String>(this,
					android.R.layout.simple_expandable_list_item_1, results));

		}

		// eğer android evreni demiş ise; android evrenine gitsin :).
		for (int i = 0; i < results.size(); i++) {
			if (results.get(i).toLowerCase().equals("android evreni")) {
				String url = "http://www.androidevreni.com";
				Intent ii = new Intent(Intent.ACTION_VIEW);
				ii.setData(Uri.parse(url));
				startActivity(ii);
				break;
			}
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


Örnek Uygulamanın ekran görüntüleri yukarıdaki gibidir. Kaynak kodunu Android Kod Kütüphanesi sayfasından indirebilirsiniz.

Şunlar da ilginizi çekebilir

37 yorum

  • cevahir
    20 Aralık 2013 at 14:20

    Admin Bey Acaba bu uygulamanını KODLARI İNDİR BUTONU EKLEYEBİLRMİSİNİZ RİCA ETSEM

  • Admin
    20 Aralık 2013 at 14:58

    Cevahir bey, sizin tarayıcınızda şurada bulunan mavi buton görünmüyor mu? : görünüş

    • cevahir
      20 Aralık 2013 at 15:07

      hayır gözükmüyo

      • Admin
        20 Aralık 2013 at 15:15

        Cevahir bey, tarayıcılarınızda bir problem olmalı, o nedenle firefox yükleyin derim. Kodları şuradan indirebilirsiniz.:

  • cevahir
    20 Aralık 2013 at 15:17

    Admin bey abi şimdi sana bir şey daha sormak istiyorum elimizde bulunan bir ses dosyasını google ‘a gönderip onu yazılı bir metine dönüştürebilirmiyiz ??

  • cevahir
    20 Aralık 2013 at 15:36

    admin bey acaba elinizde Tech To speak örneği varmı

  • cevahir
    20 Aralık 2013 at 15:36

    admin bey acaba elinizde Text To speach örneği varmı

  • feride
    26 Aralık 2013 at 22:44

    Merhaba ,
    tamda aradğım konuya değinmişsiniz emeğinize sağlık
    fakat benim projem internete bağlı olmadan da çalışmalı yani api kullanılmayacak nasıl yapabilirim ses tanımayı?

  • yorumcu
    15 Ocak 2014 at 23:16

    Hoca anlatmış herşeyi kodları da koymuş bu kadar bedavadan iş yapmış üstüne bide indirme butonu diyosun ayıptır :)

    elinde sağlık mühendiz :)

    • Admin
      16 Ocak 2014 at 12:13

      teşekkürler :).

  • Doğan Karakoyun
    5 Şubat 2014 at 11:15

    Android’in bu işlem için türkçe diil desteği yok malesef o yüzden söylediğimiz kelimeleri ingilizce gibi değerlendirip en yakın sonuçları getiriyor bu da düzgün işlemler yapmamızı engelliyor. Türkçe desteği olan farklı bir harici library varmı bildiğiniz?

    • MUSTAFA DEMİR
      5 Şubat 2014 at 20:55

      merhaba, Türkçe için kullanmak istiyorsanız yapmanız gerekenler:

      – Telefonunuzdan Ayarlar>Dil ve Giriş ayarlarına girin.
      – Bütün keyboard ve inputların dilini Türkçeye çevirin.
      – Telefonunuzun dili Türkçe değilse onu da Türkçeye çevirin. [aslında sadece bu madde bile sorunu düzeltmeye yetebilir.]

      Sorun çözülecektir. Dersteki uygulamalar test edildikten sonra derse eklenir. Uygulamayı test ettiğimde Türkçe için son derece güzel çalışıyor ingilizceden anlamıyordu. Yukarıda anlattığım yol ile ingilizceye çevirdim. Şimdi de Türkçeyi anlamıyor ama ingilizceyi gayet iyi anlıyor.

      Kolay gelsin.

      • Havva Nur AYDIN
        5 Aralık 2014 at 16:13

        dediğiniz gibi bütün keyboard ve inputları türkçe yaptım ama hala düzelmedi sorun acaba neden olabilir ?

        • MUSTAFA DEMİR
          14 Aralık 2014 at 09:31

          merhaba Havva hanım,
          önerdiklerimden sonra düzelmesi gerekiyordu. Bu yüzden
          öncelikle kodunuzu yazdığım örnek ile tekrar karşılaştırıp kontrol etmeniz iyi olur. Daha sonra Keyboard ve inputları tekrar kontrol etmenizi rica ediyorum. Sorun yine de devam ederse yorum olarak tekrar yazıp beni bilgilendirin lütfen.

          İyi Çalışmalar.

          • Havva Nur AYDIN
            17 Aralık 2014 at 19:48

            öncelikle mrb, zaten kodu direkt indirdiğim için bi değişiklik yok ama sorun hala devam ediyor ingilizce kelimeler getiriyor . farklı bir library i mi kullanmam gerekiyor acaba türkçe bir kütüphane?

  • hasan cavdar
    3 Mart 2014 at 17:03

    Abi tam istediğim uygulama indirdigimde bozuk arşiv diyor lütfen yyardim et…

  • Mehmet DEMİR
    3 Mart 2014 at 20:39

    Hasan Bey merhaba, uygulama kaynak dosyalarında bir bozukluk görünmüyor, arşivi indirip açmayı tekrar denermisiniz.

    • hasan çavdar
      5 Mart 2014 at 06:06

      Mehmet Bey ,Şuan tabletimle indirirken açmaya çalıştığımda (ZArcihver,B1 ile denedim)bozuk arşiv diyor bugün PC ile deneyeceğim olmazsa size bildiririm teşekkürler.

    • hasan çavdar
      5 Mart 2014 at 16:59

      teşekkürler oldu aradığım en önemli uygulamaydı Allah Razı olsun …..

  • hasan çavdar
    6 Mart 2014 at 21:27

    Biliyorum fazla soru soruyorum ama inanın ki gerçekten öğrenmek istemesem bu kadar üzerine gitmezdim bu konuların ben bu uygulamaya örneğin “bluetooth aç , Wi-Fi aç” diyeceğim bu komutları nasıl yazabiliriz lütfen yardımcı olun.LÜTFEN!!!!

    • MUSTAFA DEMİR
      7 Mart 2014 at 09:18

      merhaba Hasan bey,

      ”öğrenmek” istediğinizi söylüyorsunuz ancak istediğiniz şey ”kodu alıp kopyalamak”(bluetooth, wi-fi) buna öğrenmek denmez.

      Öğrenmek istiyorsanız başından başlayıp temel şeyleri öğrendikten sonra projeye atılmanız gerekir.

      Temel şeyleri iyi biliyor olsaydınız, yazıdaki kodları rahatça anlar ve üstüne canınız ne istiyorsa rahatça eklerdiniz.

      Vaktimiz sınırlı olduğu için sorudaki isteklerinize yardımcı olamayacağız.
      ‘Öğrenmek’ istiyorsanız gereğini yerine getirin. Kolay gelsin..

  • Mehmet Ali ÇAKMAK
    14 Mart 2014 at 14:28

    Merhaba Admin Bey,

    Programı kurdum fakat çalıştırdığı sırada uygulamayı durduruyor sizce neden ? hatta sizin örneği denedim oda durduruluyor ?

  • Mehmet DEMİR
    15 Mart 2014 at 18:43

    Mehmet Ali Bey merhaba,
    Uygulama kapanırken hata olarak neler düşüyor? onları buraya yazarsanız yardımcı olmaya çalışırız.

  • Mehmet Ali ÇAKMAK
    15 Mart 2014 at 22:12

    Export ettim Telefona yükledim telefonda program çalıştı fakat similator de çalışmadı hata mesajını göndericem

  • Mehmet Ali ÇAKMAK
    15 Mart 2014 at 22:19

    Hata Mesajı .

    Unfortunately,
    AndroidEvreniSesCevir has stopped

    • Mehmet DEMİR
      16 Mart 2014 at 07:34

      Simulatörde ses tanıma işlevi düzgün çalışamıyor, bu nedenle bu tür uygulamaları gerçek bir cihazda test etmek gerekiyor.

  • Mehmet Ali ÇAKMAK
    16 Mart 2014 at 18:16

    Anladım peki her seferinde export etmek gerekiyor bunun bir çözümü var mıdır ?

  • Mehmet Ali ÇAKMAK
    16 Mart 2014 at 20:36

    Çok teşekkür ediyorum ilginiz için

  • Oğuz ARSLAN
    21 Mart 2014 at 02:49

    Merhabalar;
    Öncelikle herkese kolay gelsin.Farkındayım doğru konu başlığı benim sorumdan biraz farklı ama benim bir sorum olacak yardım ederseniz çok memnun olurum.Bir Mesajlaşma programı üzerine denemeler yapıyorum. Yazı gönderip alma kısımları tamam ama ses gönderme olayında biraz takıldım, ses dosyasını kayıt edip byte a çevirip text veri olarak veri tabanında tutmayı düşünüyorum.buton yardımı ile ses dosyasını kayıt ettirebiliyorum 5 er saniyelik paketler hazırlıyorum fakat yarım sn. ile bir sn. arasında bir kayıp oluyor.Benim konuşmayı olduğu zamanı tespit ettirip kayıt işlemine başlamam ve konuşma olmadığında otomatik olarak kaydı durdurup veri tabanına yazmam lazım bunun için nasıl bir yol izleyebilirim veya sizin aklınızda başka bir yöntem var mı bu konuda fikirlerinizi almak isterim.

    Not olarak son birşey (google’da android audio recording in talking example code) şeklinde aramalar yaptım konuşmanın başladığı anı yakalayabilmek için fakat çıkan örnekleri bir şekilde değerlendiremedim.

    • MUSTAFA DEMİR
      25 Mart 2014 at 21:25

      merhaba Oğuz bey,

      bu aralar çok meşgulüz, sorunuzu/probleminizi biraz bekletmek zorunda kalıcaz. İyi çalışmalar..

  • Elif
    4 Haziran 2014 at 21:39

    Merhabalar. telefonda yabancı biriyle mesajlaşırken türkçe yazıp ingilizce gitmesi için bir program varmış . Aradım ama bulamadım . Biliyorsanız beni bilgilendirir misiniz ? teşekkür ederim

    • MUSTAFA DEMİR
      25 Haziran 2014 at 15:40

      merhaba,

      istediğiniz tarzda birden fazla uygulama vardır. Mesela biri şu : Translating Keyboard 2
      k:-https://play.google.com/store/apps/details?id=com.comet.android.translatingkeyboard

  • Abdullah Can
    12 Mart 2015 at 15:43

    Merhaba,

    Alttaki konuş buttonunu kaldırıp sürekli şekilde konuşup yazdırıyorum fakat google arayüzünün ve butonunun da gelmesini istemiyorum. Yani ListiView görünecek sadece ve ben konuştukça yazacak? Yardımcı olursanız sevinirim.

    • MUSTAFA DEMİR
      15 Mart 2015 at 16:36

      merhaba Abdullah bey,

      bu derste anlattığımız yöntem ile istediğiniz şeyi elde edemezsiniz. Google arayüzü ve butonu gelmek zorundadır.

      İyi Çalışmalar.

  • Salih Kaza
    17 Mart 2016 at 00:55

    Ben telefonuma indirdiği ıngilizce dosyanın tamamını turkceye çevirmek istiyorum bunu basil yaparım yardım edebılırmısınız

feride için bir cevap yazın Cevabı iptal et