2011-06-11 14 views
113
に迷惑なダイアログなしで音声認識を使用することができます

これは、AndroidのAPIを変更することなく、可能ですか? これについての記事を見つけました。 アンドロイドAPIに変更を加える必要があるというコメントが1つあります。 しかし、それは修正を行う方法を言っていませんでした。 誰でも私にそれを行う方法についていくつかの提案を与えることができますか? ありがとう!はどのように私はAndroid携帯電話


この記事が見つかりました。 SpeechRecognizer 彼のニーズは私とほとんど同じです。 それは私にとって良い参考情報です!


私は完全にこの問題を解決しました。
私はfrom this China website がここに私のソースコードです、使用可能なサンプル・コードをGoogleで検索

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

デバッグ後に迷惑なログを削除してください!

+1

私は他のアプリ(Voice infinity)と同じようにそれを行うことは間違いありませんが、私は手がかりがありません。私はあなたがアンドロイドのソースをダウンロードし、音声がどこにあるのかを確認し、次に実験を拡張することで実験を始めることができると思います。 – Eric

+1

Femiが指摘したように、 ''を使用しないと、SpeechRecognizerは音声を取得しません – nommer

答えて

63

SpeechRecognizerインターフェースを使用してください。あなたのアプリはRECORD_AUDIO権限を持っている、とあなたはSpeechRecognizerを作成することができ、それにRecognitionListenerを与え、そのstartListeningメソッドを呼び出す必要があります。スピーチ認識を開始する準備ができているとき、およびスピーチを受信して​​テキストに変換するときに、リスナーにコールバックを取得します。

+0

ありがとうございました。私は今試してみます – Jim31837

+9

また、OnDestroy()メソッドでSpeechRecognierを破壊するのを忘れないでください:http://stackoverflow.com/a/19931355/2048266 'がServiceConnectionを漏らしてしまったのを修正しましたandroid.speech.SpeechRecognizer $ Connection @ 414f0e40は本来はここに縛られていた」エラー – nommer

+0

私に例を教えてもらえますか?また、画面が消えている間にこれを使うことはできますか? –

6

GASTはあなたが非常に少ない新しいコードでSpeechRecognizerクラスを使用するために使用できる便利な抽象クラスがあります。バックグラウンドサービスとしてSpeechRecognizerを実行する例もあります。thisthis

+0

MainActivityに実装する方法を教えていただけますか?これは、「*インテントの開始と停止を使用する」という意味ですか?ありがとうございます – Dante

+0

私に例を教えてもらえますか?また、画面が消えている間にこれを使うことはできますか? –

4

ありがとうございます!私はthis Github RepoにTTSとSTTからすべての私の学習を保存しようとしたahve

@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

:私はそれが役に立つのOnCreateでonclickのリスナーを定義することが判明しました。ライナーが1つ好きなら、私のプロジェクトを使うことができます。

それは迷惑なダイアログ

SpeechToText(STT)ずにライン上で音声をテキストに変換するために、Factoryパターンを使用しました。

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

出力: -

enter image description here

テキスト読み上げ(TTS)

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

出力: -

enter image description here

関連する問題