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