Android语音识别

本文介绍了手机语音识别技术在Android系统中的应用,详细解释了如何通过Intent和RecognizerIntent实现语音识别,并展示了实现简单语音识别程序的过程,包括设置语言模式、提示用户开始语音以及获取结果并显示的方法。

语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式。但是随着手机软硬件功能的不断提升,可以预见在不久的将来,语音交流将是人机交互的主要方式。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来开始语音,代码如下:

  1. 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_PROMPT, "开始语音");  

 

当然,如果找不到设置,就会抛出ActivityNotFoundException,所以我们需要捕捉这个异常。在以下的例子中,我们实现了一个简单的语音识别程序,当我们点击“点击使用语音识别”按钮之后,开始语音,然后在onActivityResult方法中取得结果并显示出来,其中如果当前手机没有连接到互联网则会显示连接问题,运行效果如以下所示:

点击按钮后:                                        如果没联网会出现连接错误:




向话筒说完“电脑”一词后:




具体实现的代码如下:

  1. public class RecognizerIntent_TestActivity extends Activity  
  2.     private static final int VOICE_RECOGNITION_REQUEST_CODE 1 
  3.   
  4.     private ListView mList;  
  5.     Button mButton;  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState)  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.   
  12.         mButton (Button) findViewById(R.id.button1);  
  13.         mButton.setOnClickListener(new myRecognizerIntentListener());  
  14.   
  15.         mList (ListView) findViewById(R.id.listView1);  
  16.      
  17.   
  18.     public class myRecognizerIntentListener implements OnClickListener  
  19.         public void onClick(View v)  
  20.             try  
  21.                 // 用Intent来传递语音识别的模式,并且开启语音模式   
  22.                 Intent intent new Intent(  
  23.                         RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  
  24.                 // 语言模式和自由形式的语音识别   
  25.                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,  
  26.                         RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  
  27.                 // 提示语言开始   
  28.                 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始语音");  
  29.                 // 开始语音识别   
  30.                 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);  
  31.             catch (ActivityNotFoundExceptioe)  
  32.                 Toast.makeText(RecognizerIntent_TestActivity.this"找不到语音设备" 
  33.                         Toast.LENGTH_LONG).show();  
  34.              
  35.          
  36.      
  37.   
  38.     // 语音结束时的回调函数   
  39.     @Override  
  40.     protected void onActivityResult(int requestCode, int resultCode, Intent data)  
  41.         if (requestCode == VOICE_RECOGNITION_REQUEST_CODE  
  42.                 && resultCode == RESULT_OK)  
  43.             // 取得语音的字符   
  44.             ArrayList<String> results data  
  45.                     .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);  
  46.             // 设置视图的更新   
  47.             mList.setAdapter(new ArrayAdapter<String>(this 
  48.                     android.R.layout.simple_list_item_1, results));  
  49.             String resultsString "" 
  50.             for (int 0results.size(); i++)  
  51.                 resultsString += results.get(i);  
  52.              
  53.             Toast.makeText(thisresultsString, Toast.LENGTH_LONG).show();  
  54.          
  55.         super.onActivityResult(requestCode, resultCode, data);  
  56.      
  57. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值