こんにちは。管理人のピヨ猫でーす。
Androidで音声入力を実装する方法を紹介します。
1.音声入力ってな~に
音声入力はキーボードではなく、声で入力を行う機能のことです。
マイクマークがついたやつです。
キーボード打たないで入力できるので楽ちんですが、人のいるところで使うと少し恥ずかしいです。
初めて人が使っているのを見たとき、なんかスマホに話しかけている人がいるーーって思いましたが・・・、使いだすと便利な機能だなーと思いました。
このブログの主題の「機械学習」により実現されている機能ですね。
何時かそこも記事にしたいと思います。
2.Androidで音声入力を使う方法
Androidにデフォルトで備わっているRecognizerIntentを使います。
RecognizerIntentには3つのActivityが用意されています。
RecognizerIntentにはの3つの機能
ACTION_RECOGNIZE_SPEECH
ユーザーにスピーチを促し、スピーチ結果の文字候補を取得するアクティビティ
ACTION_VOICE_SEARCH_HANDS_FREE
API16から追加された機能
ユーザーの視覚的な注意やタッチ入力を必要とせずに、ユーザーにスピーチを促すアクティビティ
ACTION_WEB_SEARCH
ユーザーにスピーチを促し、スピーチ結果の最有力文字候補をキーにGoogle検索結果を取得するアクティビティ
基本的な使い方はシンプルです。
RecognizerIntentを使った音声入力機能の実装方法
// 1.ACTION_RECOGNIZE_SPEECHを起動するIntentを作成する
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// 2.オプション設定を追加する
// ここでは言語設定を端末ロケールに設定
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// 3.音声入力の結果を受け取るパッケージを設定する
// ここでは音声入力を起動するアプリと同じアプリを設定している
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
// 4.音声入力を起動する
startActivityForResult(intent, SPEACE_REQUEST_CODE);
3.音声入力の実装サンプル
private static final int SPEACE_REQUEST_CODE = 1000;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
・・・
findViewById(R.id.btnSpeak).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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, getPackageName());
startActivityForResult(intent, SPEACE_REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SPEACE_REQUEST_CODE && resultCode == RESULT_OK) {
// スピーチの候補文字列を受け取る
List results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
if(results.size() > 0) {
EditText text = (EditText)findViewById(R.id.txtWhere);
// スピーチの候補文字列の第一候補をテキストボックスに設定する。
String str = results.get(0).trim();
if(!"".equals(str)){
text.setText(str);
}
}
}
}
音声入力でどこでも〇〇
音声入力を使った自作アプリの「どこでも〇〇」です。
https://play.google.com/store/apps/details?id=shibayu.net.zive.anywheredore
本日は以上です。この記事が少しでもお役に立てば幸いです。