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. }

复制代码

android语音识别方法示例代码相关推荐

  1. 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)

    简介这篇文章主要介绍了计算机组成原理--浮点数表示方法(示例代码)以及相关的经验技巧,文章约568字,浏览量241,点赞数7,值得推荐! 为了表示浮点数,数被分为两部分:整数部分和小数部分.例如,浮点 ...

  2. pywinauto java_Pywinauto使用方法(示例代码)

    3 Pywinauto使用 连接为 http://pywinauto.github.io/ 3.1 关联到一个应用,用以下方法: start_(path) connect_(handleor proc ...

  3. android 引入 .so,android studio引入so库方法(示例代码)

    在Android Studio中引入so库,只需在app/jniLibs下放入so文件,然后在Module的build.gradle中加入: sourceSets { main { jniLibs.s ...

  4. Android重新分区parted,parted分区以及格式化方法(示例代码)

    1.查看磁盘分区 Disk /dev/nvme1n1: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors Units = sectors of 1 ...

  5. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码

    这几天琢磨写一个Android的Runtime用来加速HTML5 Canvas,让GameBuilder+CanTK 不但开发速度快,运行速度也能接近原生应用.所以花了点时间研究Android NDK ...

  6. appsetting mysql_给IConfiguration写一个GetAppSetting扩展方法(示例代码)

    给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...

  7. 百度 ping php,百度ping方法示例代码 自动ping百度

    百度ping方法使用示例,可以把网站地址自动ping到百度. 使用方法访问时自动ping到百度,这里的方法是生成缓存,更新缓存的时候自动ping百度,返回结果为0表示成功. 例子: 复制代码 代码示例 ...

  8. android 自定义心电图,手把手教你打造一个心电图效果View Android自定义View(示例代码)...

    大家好,看我像不像蘑菇-因为我在学校呆的发霉了. 思而不学则殆 丽丽说得对,我有奇怪的疑问,大都是思而不学造成的,在我书读不够的情况下想太多,大多等于白想 ,所以革命没成功,同志仍需努力. 好了废话不 ...

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

    1.     说明 以下例程功能为:应用程序自身调用语言识别函数,程序以循环方式等待录音并识别后的字串. 2.     本例参考自android代码: frameworks/base/core/jav ...

最新文章

  1. 人类又双叒叕输了,就没人能管管这条“狗”吗?
  2. 【Q】之防火墙的SNAT DANT原理应用
  3. ASP.NET Core 中的错误处理
  4. with open的使用
  5. 跟我学Shiro目录贴
  6. day3-python学习笔记(三)字典、元组
  7. 更改计算机用户文件夹,win10系统怎么自定义C盘用户文件夹名称
  8. C语言中二级指针的作用
  9. mysql curd语句_MySQL常用SQL语句(CURD,建表,加字段,查改参数)
  10. Java sychronized关键字总结(一)
  11. 基于matlab的不规则面积图像测量,基于matlab的不规则面积图像测量.doc
  12. 红警2的经验和秘籍及不是秘笈的秘笈(4)
  13. 广域网加速方案--Riverbed
  14. mysql 伪表_伪表和伪列
  15. 项目上传图片报:Can't create output stream!
  16. 一种与生活周旋的能力
  17. 不高兴的津津【NOIP2004普及组第1题】
  18. NR/5G - SUL
  19. HBase 数量统计
  20. VoIP系统故障排除:7个常见问题处理方法

热门文章

  1. 圣经中最美的10句(转自沪江)
  2. 《每秒处理10万订单乐视集团支付架构》学有所得
  3. SOLID设计原则解读
  4. 复旦大学-华盛顿大学EMBA校友:将"她力量"变成"我们的力量"
  5. Linux项目开发—电子相册
  6. stm32的点亮led的基础知识
  7. 炸金花游戏功能的实现(发牌,计算牌型,比牌)——python2.7
  8. 简书PC端私密文章放在哪?
  9. 四月单向历——你是人间四月天
  10. 哈希计划(河南省多校联盟第六次)