音声認識のクラス SpeechRecognizer classを確認しました。
インスタンスを生成する方法は、 createSpeechRecognizer(Context) をコールします。
SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
認識結果を受信するclassを作ります。
class MyRecognitionListener implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
Log.d("Speech", "onBeginningOfSpeech");
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.d("Speech", "onBufferReceived");
}
@Override
public void onEndOfSpeech() {
Log.d("Speech", "onEndOfSpeech");
}
@Override
public void onError(int error) {
Log.d("Speech", "onError");
}
@Override
public void onEvent(int eventType, Bundle params) {
Log.d("Speech", "onEvent");
}
@Override
public void onPartialResults(Bundle partialResults) {
Log.d("Speech", "onPartialResults");
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.d("Speech", "onReadyForSpeech");
}
@Override
public void onResults(Bundle results) {
Log.d("Speech", "onResults");
ArrayList strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < strlist.size();i++ ) {
Log.d("Speech", "result=" + strlist.get(i));
}
}
@Override
public void onRmsChanged(float rmsdB) {
Log.d("Speech", "onRmsChanged");
}
}
その中で一番重要なのは、onReuslt() の関数です。resultsの中に認識結果を格納しています。
public void onResults(Bundle results) {
Log.d("Speech", "onResults");
ArrayList strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < strlist.size();i++ ) {
Log.d("Speech", "result=" + strlist.get(i));
}
}
先ほどのListerクラスを生成します。
MyRecognitionListener listener = new MyRecognitionListener();
Listenerクラスを設定します。
sr.setRecognitionListener(listener);
音声認識を開始します。
sr.startListening(RecognizerIntent.getVoiceDetailsIntent(getApplicationContext()));
onResults()は、 1度だけコールされるようです。
"english"と言ってみました。
その結果です。
result=リング
result=english
result=ring
result=イング
result=ing
認識されました。
android.permission.RECORD_AUDIOのパーミッションの設定とネットワークが有効になっていることが必要です。
ソースコードは
ここです。
Androidに関する課題や、ほしいアプリがあればメールやTwitterで連絡ください。試してみます。