android语音识别方法示例代码

1.
说明
以下例程功能为:在应用程序中使用intent来调出语言识别界面,录音并识别后将识别的字串返回给应用程序。注意:使用前需要安装语音识别程序如语音搜索。2.
本例参考自android例程:
development/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.java3.
可从此处下载可独立运行的代码:
  三个android语音识别例程mystt.tgz.rar (13.28 KB, 下载次数: 257) 
4.

核心代码及说明package com.android.mystt1;

  1. package com.android.mystt1;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.content.pm.PackageManager;
  5. import android.content.pm.ResolveInfo;
  6. import android.os.Bundle;
  7. import android.speech.RecognizerIntent;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.Button;
  12. import android.widget.ListView;

  13. import java.util.ArrayList;
  14. import java.util.List;

  15. public class MyStt1Activity extends Activity implements OnClickListener {
  16.        private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
  17.        private ListView mList;          // 显示识别后字串的list控件

  18.        @Override
  19.        public void onCreate(Bundle savedInstanceState) {
  20.                 super.onCreate(savedInstanceState);
  21.                 setContentView(R.layout.main);
  22.                 Button speakButton = (Button) findViewById(R.id.btn_speak); // 识别按钮
  23.                  mList = (ListView) findViewById(R.id.list);
  24.                 PackageManager pm = getPackageManager();
  25.                 List activities = pm.queryIntentActivities(
  26.                           new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); //本地识别程序
  27. //                       new Intent(RecognizerIntent.ACTION_WEB_SEARCH), 0); // 网络识别程序
  28.                 if (activities.size() != 0) {
  29.                          speakButton.setOnClickListener(this);
  30.                 } else {                 // 若检测不到语音识别程序在本机安装,测将扭铵置灰
  31.                          speakButton.setEnabled(false);
  32.                          speakButton.setText("Recognizer not present");
  33.                 }
  34.        }

  35.        public void onClick(View v) {
  36.                 if (v.getId() == R.id.btn_speak) {
  37.                          startMysttActivityActivity();
  38.                 }
  39.        }

  40.        private void startMysttActivityActivity() {          // 开始识别
  41.                 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  42.                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
  43.                                    RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  44.                 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
  45.                 startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
  46.                 // 调出识别界面
  47.     }

  48.        @Override
  49.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  50.                 if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
  51.                          // Fill the list view with the strings the recognizer thought it could have heard
  52.                          ArrayList matches = data.getStringArrayListExtra(
  53.                                             RecognizerIntent.EXTRA_RESULTS);
  54.                          mList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,
  55.                                             matches));
  56.                 }
  57.                 // 语音识别后的回调,将识别的字串在list中显示
  58.                 super.onActivityResult(requestCode, resultCode, data);
  59.        }
  60. }
复制代码

android语音识别方法二:应用程序自己调用语音识别库

1.
说明
以下例程功能为:应用程序自身调用语言识别函数,程序以循环方式等待录音并识别后的字串。
2.
本例参考自android代码:
frameworks/base/core/java/android/speech/srec/Recognizer.java中注释部分
3.
可从此处下载可独立运行的代码:代码在一楼

4.
核心代码及说明
  1. package com.android.mystt2;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.widget.Button;
  6. import android.widget.TextView;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;

  9. import android.speech.srec.Recognizer;
  10. import android.speech.srec.MicrophoneInputStream;
  11. import java.io.InputStream;
  12. import java.io.IOException;
  13. import android.util.Log;

  14. public class MyStt2Activity extends Activity implements OnClickListener {
  15.        private TextView mText;
  16.        private static final String TAG = "MyStt3Activity";

  17.        @Override
  18.        public void onCreate(Bundle savedInstanceState) {
  19.                 super.onCreate(savedInstanceState);
  20.                 setContentView(R.layout.main);
  21.                 Button speakButton = (Button) findViewById(R.id.btn_speak);     // 识别扭按
  22.                 mText = (TextView) findViewById(R.id.text);      // 显示识别后的字串
  23.                 speakButton.setOnClickListener(this);
  24.        }

  25.        public void onClick(View v) {
  26.                 if (v.getId() == R.id.btn_speak) {
  27.                          test();
  28.                 }
  29.        }

  30.        void test() {
  31.                 try {
  32.                          InputStream audio = new MicrophoneInputStream(11025, 11025 * 5); //设置输入参数
  33.                          String cdir = Recognizer.getConfigDir(null);    // 获取语音识别配置目录
  34.                          Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par");
  35.                          Recognizer.Grammar grammar = recognizer.new Grammar(cdir
  36.                                             + "/grammars/VoiceDialer.g2g");
  37.                          grammar.setupRecognizer();
  38.                          grammar.resetAllSlots();
  39.                          grammar.compile();
  40.                          recognizer.start();        // 开始识别
  41.                          while (true) {       // 循环等待识别结果
  42.                                    switch (recognizer.advance()) {
  43.                                    case Recognizer.EVENT_INCOMPLETE:
  44.                                    case Recognizer.EVENT_STARTED:
  45.                                    case Recognizer.EVENT_START_OF_VOICING:
  46.                                    case Recognizer.EVENT_END_OF_VOICING:
  47.                                             continue;    // 未完成,继续等待识别结果
  48.                                    case Recognizer.EVENT_RECOGNITION_RESULT:
  49.                                             for (int i = 0; i < recognizer.getResultCount(); i++) {
  50.                                                      String result = recognizer.getResult(i,
  51.                                                                         Recognizer.KEY_LITERAL);
  52.                                                      Log.d(TAG, "result " + result);
  53.                                                      mText.setText(result);
  54.                                             }        // 识别到字串,显示并退出循环
  55.                                             break;
  56.                                    case Recognizer.EVENT_NEED_MORE_AUDIO:
  57.                                             recognizer.putAudio(audio)   // 需要更多音频数据;
  58.                                             continue;
  59.                                    default:
  60.                                             break;
  61.                                    }
  62.                                    break;
  63.                          }
  64.                          recognizer.stop();
  65.                          recognizer.destroy();
  66.                          audio.close();      // 回收资源
  67.                 } catch (IOException e) {
  68.                          Log.d(TAG, "error", e);
  69.                          mText.setText("error " + e);
  70.                 }
  71.        }
  72. }
复制代码


语音识别方法三:使用Service调用语音识别程序1.
说明

以下例程功能为:在应用程序中使用通于访问service调用语言识别功能,录音并识别后将识别的字串通过Listener返回给应用程序。注意:使用前需要安装语音识别服务,如编译安装源码中的development/samples/VoiceRecogitionService


2.
本例参考自android源码



a)
后台服务

参见development/samples/VoiceRecognitionService/*
此处实现了一个模拟的后台服务它并未实现真的语音识别而只是一个框架以示例编译并安装它即可在设置的语音输入与输出中看到它它包含了一个设置界面当连接这个Service如果设置了Letters则直接返回abc如果设置了Numbers则直接返回
123
你可以自己实现用于连接android源码自带的识别引擎srec.



b)
前台程序

参见frameworks/base/core/java/android/speech/Recognition*
与后台Service交互此段代码实现在应用程序界面中

3.
可从此处下载可独立运行的代码(前台程序):源代码在一楼





4.
核心代码及说明

  1. package com.android.mystt3;

  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.speech.RecognitionListener;
  8. import android.speech.RecognizerIntent;
  9. import android.speech.SpeechRecognizer;
  10. import android.widget.Button;
  11. import android.widget.TextView;
  12. import java.util.ArrayList;
  13. import android.util.Log;

  14. public class MyStt3Activity extends Activity implements OnClickListener {
  15.        private TextView mText;
  16.        private SpeechRecognizer sr;
  17.        private static final String TAG = "MyStt3Activity";

  18.        @Override
  19.        public void onCreate(Bundle savedInstanceState) {
  20.                 super.onCreate(savedInstanceState);
  21.                 setContentView(R.layout.main);
  22.                 Button speakButton = (Button) findViewById(R.id.btn_speak);     // 识别按钮
  23.                 mText = (TextView) findViewById(R.id.text);      // 显示识别字串
  24.                 speakButton.setOnClickListener(this);
  25.                 sr = SpeechRecognizer.createSpeechRecognizer(this);        // 初始化识别工具,得到句柄
  26.                 sr.setRecognitionListener(new listener());         // 注册回调类及函数
  27.        }

  28.        class listener implements RecognitionListener            // 回调类的实现
  29.        {
  30.                 public void onReadyForSpeech(Bundle params)
  31.                 {
  32.                          Log.d(TAG, "onReadyForSpeech");
  33.                 }
  34.                 public void onBeginningOfSpeech()
  35.                 {
  36.                          Log.d(TAG, "onBeginningOfSpeech");
  37.                 }
  38.                 public void onRmsChanged(float rmsdB)
  39.                 {
  40.                          Log.d(TAG, "onRmsChanged");
  41.                 }
  42.                 public void onBufferReceived(byte[] buffer)
  43.                 {
  44.                          Log.d(TAG, "onBufferReceived");
  45.                 }
  46.                 public void onEndOfSpeech()
  47.                 {
  48.                          Log.d(TAG, "onEndofSpeech");
  49.                 }
  50.                 public void onError(int error)
  51.                 {
  52.                          Log.d(TAG,  "error " +  error);
  53.                          mText.setText("error " + error);
  54.                 }
  55.                 public void onResults(Bundle results)     // 返回识别到的数据
  56.                 {
  57.                          String str = new String();
  58.                          Log.d(TAG, "onResults " + results);
  59.                          ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
  60.                          for (int i = 0; i < data.size(); i++)
  61.                          {
  62.                                    Log.d(TAG, "result " + data.get(i));
  63.                                    str += data.get(i);
  64.                          }
  65.                          mText.setText(str);        // 显示被识别的数据
  66.                 }
  67.                 public void onPartialResults(Bundle partialResults)
  68.                 {
  69.                          Log.d(TAG, "onPartialResults");
  70.                 }
  71.                 public void onEvent(int eventType, Bundle params)
  72.                 {
  73.                          Log.d(TAG, "onEvent " + eventType);
  74.                 }
  75.        }

  76.        public void onClick(View v) {
  77.                 if (v.getId() == R.id.btn_speak) {
  78.                          sr.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));
  79.                 }
  80.        }
  81. }
复制代码

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值