2011-06-11 21 views
113

Bu, android API'lerini değiştirmeden mümkün mü? Bu konuda bir makale buldum. Android API'lerinde değişiklik yapmam gereken bir yorum var. Ancak, modifikasyonu nasıl yapacağını söylemedi. Herhangi biri bana nasıl yapılacağı konusunda tavsiyede bulunabilir mi? Teşekkürler!Android telefonlarda can sıkıcı iletişim olmadan konuşma tanımayı nasıl kullanabilirim


Bu makaleyi buldum; SpeechRecognizer Onun ihtiyaçları neredeyse benimkiyle aynı. Bu benim için iyi bir referans!


Bu sorunu tamamen çözdüm.
Ben from this China website İşte benim kaynak kod kullanılabilir bir örnek kod googled

package voice.recognition.test; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.speech.RecognitionListener; 
import android.speech.RecognizerIntent; 
import android.speech.SpeechRecognizer; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.ArrayList; 
import android.util.Log; 



public class voiceRecognitionTest extends Activity implements OnClickListener 
{ 

    private TextView mText; 
    private SpeechRecognizer sr; 
    private static final String TAG = "MyStt3Activity"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      Button speakButton = (Button) findViewById(R.id.btn_speak);  
      mText = (TextView) findViewById(R.id.textView1);  
      speakButton.setOnClickListener(this); 
      sr = SpeechRecognizer.createSpeechRecognizer(this);  
      sr.setRecognitionListener(new listener());   
    } 

    class listener implements RecognitionListener   
    { 
      public void onReadyForSpeech(Bundle params) 
      { 
        Log.d(TAG, "onReadyForSpeech"); 
      } 
      public void onBeginningOfSpeech() 
      { 
        Log.d(TAG, "onBeginningOfSpeech"); 
      } 
      public void onRmsChanged(float rmsdB) 
      { 
        Log.d(TAG, "onRmsChanged"); 
      } 
      public void onBufferReceived(byte[] buffer) 
      { 
        Log.d(TAG, "onBufferReceived"); 
      } 
      public void onEndOfSpeech() 
      { 
        Log.d(TAG, "onEndofSpeech"); 
      } 
      public void onError(int error) 
      { 
        Log.d(TAG, "error " + error); 
        mText.setText("error " + error); 
      } 
      public void onResults(Bundle results)     
      { 
        String str = new String(); 
        Log.d(TAG, "onResults " + results); 
        ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
        for (int i = 0; i < data.size(); i++) 
        { 
           Log.d(TAG, "result " + data.get(i)); 
           str += data.get(i); 
        } 
        mText.setText("results: "+String.valueOf(data.size()));   
      } 
      public void onPartialResults(Bundle partialResults) 
      { 
        Log.d(TAG, "onPartialResults"); 
      } 
      public void onEvent(int eventType, Bundle params) 
      { 
        Log.d(TAG, "onEvent " + eventType); 
      } 
    } 
    public void onClick(View v) { 
      if (v.getId() == R.id.btn_speak) 
      { 
       Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);   
       intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
       intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 

       intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
        sr.startListening(intent); 
        Log.i("111111","11111111"); 
      } 
    } 
} 

ayıklama sonra can sıkıcı Günlükleri silmek için emin olun!

+1

Bunu yapmak için diğer uygulamalarda gördüğüm gibi (Voice infinity), ama nasıl yapılacağı konusunda bir fikrim yok.Ben android kaynağı indirerek ve ses nerede api kontrol başlayabilirsiniz ve sonra Femi ile belirtildiği gibi ... – Eric

+1

uzatmayı deneyebilirsiniz başlayabileceğini hayal ediyorum, '' aksi halde SpeechRecognizer herhangi bir ses almaz – nommer

cevap

63

SpeechRecognizer arabirimini kullanın. Uygulamanızın RECORD_AUDIO iznine sahip olması gerekir ve daha sonra bir SpeechRecognizer oluşturabilir, RecognitionListener verebilir ve ardından startListening yöntemini çağırabilirsiniz. Konuşma tanıma aracı konuşmayı dinlemeye hazır olduğunda ve konuşmayı aldığında ve metne dönüştürdüğünde dinleyiciye geri bildirimler alırsınız.

+0

Tavsiyeniz için teşekkürler. Ben şimdi – Jim31837

+9

deneyeceğim de burada belirtildiği gibi OnDestroy() yönteminde SpeechRecognier yok etmeyi unutmayın: http://stackoverflow.com/a/19931355/2048266 almak için değil ServiceConnection android.speech.SpeechRecognizer $ Bağlantı sızdırıyor @ 414f0e40 orijinal olarak buraya bağlanmış 'hata – nommer

+0

Bana bir örnek gösterebilir misiniz? Ayrıca, ekran kapalıyken bunu kullanabilir miyim? –

6

GAST, SpeechRecognizer sınıfını çok az yeni kodla kullanmak için kullanabileceğiniz kullanışlı bir soyut sınıfa sahiptir. SpeechRecognizer'u this ve this

+0

Onları Ana Etkinliğe nasıl uygulayacağınıza dair bana rehberlik eder misiniz? Bu, "Başlatmak ve durdurmak için" Use {@link Intent} "ne demektir?" Çok teşekkürler – Dante

+0

Bana bir örnek gösterebilir misiniz? Ayrıca, ekran kapalıyken bunu kullanabilir miyim? –

4

kullanarak arka plan hizmeti olarak çalıştırmanın bir örneği de vardır! Ben this Github Repo yılında TTS ve STT gelen tüm öğrenme saklamak için çalıştık olmayacaklarını

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

    mText = (TextView) findViewById(R.id.textView1);  
    MyRecognitionListener listener = new MyRecognitionListener(); 
    sr = SpeechRecognizer.createSpeechRecognizer(this);  
    sr.setRecognitionListener(listener); 

    findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
       Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
       intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 
       intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,1); 
       intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 
       sr.startListening(intent); 
     } 
    });  
} 
3

: Ben yararlı OnCreate onclick dinleyicisi tanımlamak için bulunmuştur. Eğer bir astarı beğendiyseniz, projemi kullanabilirsiniz.

Bu can sıkıcı iletişim

SpeechToText (STT) olmadan on line in Metin Konuşma dönüştürmek için Fabrika deseni kullanılmıştır.

TranslatorFactory.getInstance().getTranslator(TranslatorFactory.TRANSLATOR_TYPE.SPEECH_TO_TEXT, HomeActivity.this) 
            .initialize("Hello There", HomeActivity.this); 

Çıkış: -

enter image description here

TextToSpeech (TTS)

TranslatorFactory.getInstance().getTranslator(TranslatorFactory.TRANSLATOR_TYPE.TEXT_TO_SPEECH, HomeActivity.this) 
               .initialize((null != message && !message ? message : "Invalid Input"), HomeActivity.this); 

Çıkış: -

enter image description here

İlgili konular