#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.
Admin Bey Acaba bu uygulamanını KODLARI İNDİR BUTONU EKLEYEBİLRMİSİNİZ RİCA ETSEM
Cevahir bey, sizin tarayıcınızda şurada bulunan mavi buton görünmüyor mu? : görünüş
hayır gözükmüyo
Cevahir bey, tarayıcılarınızda bir problem olmalı, o nedenle firefox yükleyin derim. Kodları şuradan indirebilirsiniz.:
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 ??
admin bey acaba elinizde Tech To speak örneği varmı
admin bey acaba elinizde Text To speach örneği varmı
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ı?
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
teşekkürler :).
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?
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.
dediğiniz gibi bütün keyboard ve inputları türkçe yaptım ama hala düzelmedi sorun acaba neden olabilir ?
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.
ö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?
Abi tam istediğim uygulama indirdigimde bozuk arşiv diyor lütfen yyardim et…
Hasan Bey merhaba, uygulama kaynak dosyalarında bir bozukluk görünmüyor, arşivi indirip açmayı tekrar denermisiniz.
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.
teşekkürler oldu aradığım en önemli uygulamaydı Allah Razı olsun …..
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!!!!
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..
Merhaba Admin Bey,
Programı kurdum fakat çalıştırdığı sırada uygulamayı durduruyor sizce neden ? hatta sizin örneği denedim oda durduruluyor ?
Mehmet Ali Bey merhaba,
Uygulama kapanırken hata olarak neler düşüyor? onları buraya yazarsanız yardımcı olmaya çalışırız.
Export ettim Telefona yükledim telefonda program çalıştı fakat similator de çalışmadı hata mesajını göndericem
Hata Mesajı .
Unfortunately,
AndroidEvreniSesCevir has stopped
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.
Anladım peki her seferinde export etmek gerekiyor bunun bir çözümü var mıdır ?
Android Cihazınızı usb ile bilgisayarınıza ve eclipse bağlayın, run ettiğinizde hangi cihazda çalıştırılacağı sorulacak, oradan da kendi fiziksel cihazınızı seçebileceksiniz. İnternette bununla ilgili birçok kaynak mevcut, örneğin şuraya bakabilirsiniz. http://www.developer.com/ws/android/connecting-your-android-device-to-eclipse.html
Çok teşekkür ediyorum ilginiz için
İyi çalışmalar dilerim.
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.
merhaba Oğuz bey,
bu aralar çok meşgulüz, sorunuzu/probleminizi biraz bekletmek zorunda kalıcaz. İyi çalışmalar..
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
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
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.
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.
Ben telefonuma indirdiği ıngilizce dosyanın tamamını turkceye çevirmek istiyorum bunu basil yaparım yardım edebılırmısınız