音声入力を使用する(カスタム)

RecognizerIntent クラスを使わず、音声認識サービスを使うための SpeechRecognizer クラスを使って音声入力をする。オリジナルの音声認識画面を作成することが可能。

 
1. Manifestファイルに、 RECORD_AUDIO の permission を追加する。

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

 

2. SpeechRecognizer を生成し、音声認識処理を行う。

//音声入力ボタン押下イベント
public void onClick(View view){

   if(!SpeechRecognizer.isRecognitionAvailable(getApplicationContext())){
      //SpeechRecognizerが使えない環境
      Log.e("onClick()", "音声認識が使えません。");

   }else{    		
	 //SpeechRecognizer生成
	 SpeechRecognizer recognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
	    	
	 //音声認識開始
	 recognizer.startListening(RecognizerIntent.getVoiceDetailsIntent(context));

   	//RecognitionListenerをセット
   	recognizer.setRecognitionListener(new RecognitionListener(){

		@Override				
		public void onReadyForSpeech(Bundle params) {
			//endpointer がユーザが話し始めるための用意ができたとき。
			//ここで、「お話ください」のダイアログのようなものを表示したりとか。
		}

		@Override
		public void onBeginningOfSpeech() {
			//ユーザが話し始めたとき。
		}

		@Override
		public void onRmsChanged(float rmsdB) {
			//audio stream のサウンドレベルが変わったとき。
		}

		@Override				
		public void onBufferReceived(byte[] buffer) {
			//More sound has been received.				
		}

		@Override				
		public void onEndOfSpeech() {
			//ユーザが話し終えた後。
			//ここで、「処理中」の表示をしたりとか。				
		}

		@Override				
		public void onError(int error) {
			//ネットワークエラー、もしくは認識エラーが発生したとき。				
		}

		@Override				
		public void onResults(Bundle results) {
			//認識結果が用意できたとき。
				
			// 認識結果を取得
			ArrayList result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
			if(result.size() > 0){
				//第一候補を取得
	    		strInputResult = candidates.get(0).toString();	    			
			}
			//認識結果を EditText にセット
			EditText edittxt = (EditText)findViewById(R.id.edittxt );
			edittxt.setText(strInputResult);
		}

		@Override				
		public void onPartialResults(Bundle partialResults) {
			//部分的な認識結果が利用可能なとき。		
		}

		@Override				
		public void onEvent(int eventType, Bundle params) {
			//Reserved for adding future events.				
		}    		
	}); 
    	
	recognizer.destroy();
}

 

SpeechRecognizer(API Level8-)
音声認識サービスにアクセスするためのクラス。このクラスは、直接インスタンス化せず、createSpeechRecognizer(Context)を使う。
このクラスのメソッドは、メインのアプリケーションスレッドからのみ呼ばれる。

  【 Public Methods 】

    static SpeechRecognizer createSpeechRecognizer (Context context, ComponentName serviceComponent)
    static SpeechRecognizer createSpeechRecognizer (Context context)
      SpeechRecognizer を生成する。
    static boolean isRecognitionAvailable (Context context)
      音声認識サービスが利用可能かチェックする。
    void setRecognitionListener (RecognitionListener listener)
      RecognitionListener をセットする。
    void startListening (Intent recognizerIntent)
      音声認識を開始する。
    void stopListening ()
      音声認識をストップする。speech endpointer が自動的に停止するため、デフォルトではこのメソッドを呼ぶ必要はない。
    void cancel ()
      音声認識をキャンセルする。
    void destroy ()
      SpeechRecognizer オブジェクトを破棄する。

 
Ref.) Android Developers>SpeechRecognizer
 
RecognitionListener(API Level8-)
Public Methods はサンプルソースを確認。

Ref.) Android Developers>RecognitionListener