语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式。但是随着手机软硬件功能的不断提升,可以预见在不久的将来,语音交流将是人机交互的主要方式。IPhone手机内置的Siri语音助手就是一个很好的例子。而鲜为人知的是其使用的语音识别技术来自于Google。而想而知,作为Google力推的Android自然被植入了最核心的语音识别技术,其还整合了Google的云端技术以更好的实现人机语音互动。
Android中主要通过RecognizerIntent来实现语音识别,它主要包括一些常量来表示语音的模式等,如下图所示:
常量 |
描述 |
ACTION_RECOGNIZE_SPEECH |
开启语音活动 |
ACTION_WEB_SEARCH |
开启网络语音模式,结果将以网页搜索显示 |
EXTRA_LANGUAGE |
设置语言库 |
EXTRA_LANGUAGE_MODEL |
语音识别模式 |
EXTRA_MAX_RESULTS |
返回的最大结果 |
EXTRA_PROMPT |
提示用户可以开始语音 |
EXTRA _RESULTS |
将字符串返回到一个ArrayList中 |
LANGUAGE_MODEL-FREE_FORM |
在一种语言模式上自由语言 |
LANGUAGE_MODEL-WEB_SEARCH |
使用语言模型在Web上搜索 |
RESULT_AUDIO_ERROR |
返回结果时,音频遇到错误 |
RESULT_CLIENT_ERROR |
返回结果时,客户端遇到错误 |
RESULT_NETWORK_ERROR |
返回结果时,网络遇到错误 |
RESULT_NO_MATCH |
没有检测到语音的错误 |
RESULT_SERVER_ERROR |
返回结果时,服务器遇到错误 |
这里我们只需要通过Intent来传递一个动作以及一些属性,然后通过startActivityForResult来开始语音,代码如下:
-
Intent
intent= new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); -
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); -
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");
当然,如果找不到设置,就会抛出ActivityNotFoundExceptio
向话筒说完“电脑”一词后:
具体实现的代码如下:
-
public
class RecognizerIntent_TestActivity extends Activity { -
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1; -
-
private ListView mList; -
Button mButton; -
-
@Override -
public void onCreate(Bundle savedInstanceState) { -
super.onCreate(savedInstanceState); -
setContentView(R.layout.main); -
-
mButton = (Button) findViewById(R.id.button1); -
mButton.setOnClickListener(new myRecognizerIntentListen er()); -
-
mList = (ListView) findViewById(R.id.listView1); -
} -
-
public class myRecognizerIntentListen er implements OnClickListener { -
public void onClick(View v) { -
try { -
// 用Intent来传递语音识别的模式,并且开启语音模式 -
Intent intent = new Intent( -
RecognizerIntent.ACTION_RECOGNIZE_SPEECH); -
// 语言模式和自由形式的语音识别 -
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, -
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); -
// 提示语言开始 -
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始语音"); -
// 开始语音识别 -
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); -
} catch (ActivityNotFoundExceptio n e) { -
Toast.makeText(RecognizerIntent_TestActivity.this, "找不到语音设备", -
Toast.LENGTH_LONG).show(); -
} -
} -
} -
-
// 语音结束时的回调函数 -
@Override -
protected void onActivityResult(int requestCode, int resultCode, Intent data) { -
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE -
&& resultCode == RESULT_OK) { -
// 取得语音的字符 -
ArrayList<String> results = data -
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); -
// 设置视图的更新 -
mList.setAdapter(new ArrayAdapter<String>(this, -
android.R.layout.simple_list_item_1, results)); -
String resultsString = ""; -
for (int i = 0; i < results.size(); i++) { -
resultsString += results.get(i); -
} -
Toast.makeText(this, resultsString, Toast.LENGTH_LONG).show(); -
} -
super.onActivityResult(requestCode, resultCode, data); -
} -
}