语音识别技术在手机上应用得相当广泛,我们日常最频繁的沟通方式是语音,在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式,然而对于像手机这种小巧的移动设备来说,使用键盘甚至是虚拟键盘打字是一件非常不爽的事情。于是, Google推出了强大的语音搜索业务。2008年11月,Google的语音搜索已经在iPhone平台上线,而Android在1.5 SDK版本中也加强了语音识别功能,并应用到了搜索功能上,这的确是一个非常让人惊喜的更新。
Android系统集成了Google的语音识别技术,我们只需要实现少量代码便可以是使用语音识别。
1、通过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_LANGUAGE, Locale.CHINA.toString());
4、开始执行intent、语音识别
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始说话");
5、开始
startActivityForResult(intent, 1234);
RecognizerIntent包括的常量:
try {
InputStream audio = new MicrophoneInputStream(11025, 11025 * 5); //实现录音
String cdir = Recognizer.getConfigDir(null); // 获取语音识别配置目录
Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par");
Recognizer.Grammar grammar = recognizer.new Grammar(cdir + "/grammars/VoiceDialer.g2g");
grammar.setupRecognizer();
grammar.resetAllSlots();
grammar.compile();
recognizer.start(); // 开始识别
while (true) { // 循环等待识别结果
switch (recognizer.advance()) {
case Recognizer.EVENT_INCOMPLETE:
case Recognizer.EVENT_STARTED:
case Recognizer.EVENT_START_OF_VOICING:
case Recognizer.EVENT_END_OF_VOICING:
continue; // 未完成,继续等待识别结果
case Recognizer.EVENT_RECOGNITION_RESULT:
for (int i = 0; i < recognizer.getResultCount(); i++) {
String result = recognizer.getResult(i,Recognizer.KEY_LITERAL);
mText.setText(result);
} // 识别到字串,显示并退出循环
break;
case Recognizer.EVENT_NEED_MORE_AUDIO:
recognizer.putAudio(audio) // 需要更多音频数据;
continue;
default:
break;
}
break;
}
recognizer.stop();
recognizer.destroy();
audio.close(); // 回收资源
} catch (IOException e) {
Log.d(TAG, "error", e);
}
// 回调类的实现
class listener implements RecognitionListener {
public void onReadyForSpeech(Bundle params){}
public void onBeginningOfSpeech(){}
public void onRmsChanged(float rmsdB){}
public void onBufferReceived(byte[] buffer){}
public void onEndOfSpeech(){}
public void onError(int error) {}
public void onResults(Bundle results) / 返回识别到的数据
{
String str = new String();
Log.d(TAG, "onResults " + results);
List data = results.getStringList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < data.size(); i++)
{
Log.d(TAG, "result " + data.get(i));
str += data.get(i);
}
mText.setText(str); // 显示被识别的数据
}
public void onPartialResults(Bundle partialResults){}
public void onEvent(int eventType, Bundle params){}
}
1、初始化识别工具,得到句柄
SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
2、 注册回调类及函数
sr.setRecognitionListener(new listener());
3、开始监听
sr.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));
主要原理:
首先将语音发送到google云端,然后云端处理,匹配相应的数据,发送到客户端。
注意问题:
语音识别技术,需要硬件的支持,如果我们的手机不支持语音识别,那么会抛出ActivityNotFoundException异常,所以我们需要针对不同的机型做好异常处理,在语音识别过程中,也需要网络的支持,所以我们也必须加上访问网络的权限。
本文来源:https://www.2haoxitong.net/k/doc/2bf6a0d79e314332396893ac.html
文档为doc格式