インスタンスを生成する方法は、 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その中で一番重要なのは、onReuslt() の関数です。resultsの中に認識結果を格納しています。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"); } }
public void onResults(Bundle results) { Log.d("Speech", "onResults"); ArrayList先ほどのListerクラスを生成します。strlist = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); for (int i = 0; i < strlist.size();i++ ) { Log.d("Speech", "result=" + strlist.get(i)); } }
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で連絡ください。試してみます。
0 件のコメント:
コメントを投稿