android voice recognition,语音识别作为Service实现。 语音识别API在android.speech中 API大致分成应用端API和service端API

RecognizerIntent

(运行例子1的前提是,google voice search应用已经安装,这样确保Service已经安装了) 注意,需要微调程序中的RecognizerIntent的三个参数,可以得到不同的运行效果,简单,参考javadoc即可。

Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,

RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

以上是最简单的方式,只需要RecognizerIntent一个类就搞定

自己实现RecognitionService

如果要自己做一个识别引擎Service,是可以的。Android提供了RecognitionService抽象类 识别引擎作为Service存在,要实现这个抽象类. This RecognitionService class should be extended only in case you wish to implement a new speech recognizer.

Android SDK提供了一个sample VoiceRecognitionService extends RecognitionService,是一个假的引擎,识别结果固定为abc或者123。 这个引擎不读取麦克风,也不含麦克风dialog界面。稍候 在SpeechRecognizer处介绍如何使用这个假service.

RecognitionService比较朴素,提供三个方法:

abstract void onStartListening(Intent recognizerIntent, RecognitionService.Callback listener)

Notifies the service that it should start listening for speech. 开始识别,intent发过来了

abstract void onStopListening(RecognitionService.Callback listener)

Notifies the service that it should stop listening for speech. 结束识别

abstract void onCancel(RecognitionService.Callback listener)

Notifies the service that it should cancel the speech recognition. 取消识别

RecognitionService是无状态的,不能并行开始识别多个音频流,三个方法必须按照开始-->结束/取消,再开始-->结束/取消,这样顺序调用,否则报错。

谷歌的Service实现,不开源

AOSP里面没有实现RecognitionService的代码。所以默认的AOSP编出来的android SDK都是不带语言识别Service的,SDK桌面的google search widget没有麦克风,就说明识别Service还没装。

google自己实现了RecognitionService,装了voicesearch 2.1.4之后(一般手机都已经预置),桌面的google search widget也会出现小麦克了点击小麦克出现"speak now"对话框。同时settings voice input output的识别引擎选择框会出现google的选项。谷歌的service叫 com.google.android.voicesearch.RecognitionService 这个程序也不开源,无法深度定制谷歌那个"speak now"对话框。

P.S. google的识别是基于网络的。 google voice search小应用client不开源,网络端更不开源,网络API尚未开放,但有些人已经研究出来了... refer to:

vlingo virtual assistant也实现了RecognitionService,不开源

RecognitionService.Callback 的作用

上面三个方法都有一个参数是Callback类形。callback类是个二传手,被service调用,并通过ipc转发结果给RecognitionListener。

The RecognitionService.Callback class receives callbacks from the RecognitionService and forwards them to the RecognitionListener

RecognitionListener是用户自己进程中实现的,RecognitionService是在service进程中的,service没法直接调用listener,就通过callback类转发。

callback帮助自己做service的人处理了ipc,aidl等问题,挺好的。

SpeechRecognizer 使用service的

This class provides access to the speech recognition service. 给应用程序进程用的,方便对RecognitionService的访问

This class's methods must be invoked only from the main application thread. 只有主应用线程中可以调用...为什么呢...可能因为service会弹出识别的dialog...?

Please note that the application must have RECORD_AUDIO permission to use this class. 程序必须有录音权限

packages/inputmethods/LatinIME/java/src/com/android/inputmethod/voice/VoiceInput.java 可以参考

例子3 MyStt3Activity也是个参考,但要给识别intent加一行,否则出现error 5

intent.putExtra("calling_package", "");

在例子3中,按下speak按钮之后,程序用SpeechRecognizer.startListening(intent); 开启了麦克风等待用户说话,不会弹出google的“speak now”麦克风的dialog,直接说就行了。

如果此时settings里面设定默认engine为demo的com.example.android.voicerecognitionservice假引擎,则干脆不会读取麦克风,直接返回abc或者123的假结果。

我也试验了vlingo virtual assistant的引擎,也可以用。

多个RecognitionService实现并存,是允许的。不通过settings的默认设置,程序化指定Service,怎么做?todo intent.setClassName不行

RecognizerResultsIntent 略

开源SREC库,是nuance贡献给AOSP的

利用 srec 里面的动态插入语音标签功能( Voice Enrollment ) , 添加事先录好的普通话短语,之后就可以对其做语音识别了,

例子2 是调用SREC的,可以参考 (由于SREC的API为@Hide,玩转例子2需要点小技巧)

非google的风格的识别

最后,有的厂商自己搞voice framework,不走google android.speech的任何代码,从activity到intent到service到widget全都自己设计,也行。超出本文范围。

refer to:

android语音识别 android.speech 包分析相关推荐

  1. [转] Android实时抓包分析 : 善用adb调试桥

    Android实时抓包分析 : 善用adb调试桥 谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包记录 ...

  2. Charles最新破解版苹果iphone安卓android手机抓包分析教程笔记

    Charles最新破解版苹果iphone安卓android手机抓包分析教程笔记 中间遇到各种问题导致最终没法看到抓包信息,一个坑一个坑的埋,终于成功抓包小程序. 梳理了下可以尽量减少栽坑的安装过程,如 ...

  3. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

    市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(A ...

  4. 讯飞语音包实现Android语音识别

    1.先要到讯飞官网去注册并且获取相对应的appid,申请地址:http://www.xfyun.cn/ 2 将开发工具包中libs目录下的Msc.jar和armeabi复制到Android工程的lib ...

  5. Android语音识别开发详解(基于讯飞语音SDK)

    一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科 ...

  6. android语音识别

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 一句话识别,错误码,产品简介,产品优势,应用场景,计费概述,购买方式,欠费说明,功 ...

  7. Android语音识别——谷歌语音识别与百度语音识别

    Android语音识别,简单的理解就是把语音转化为文字. 在日常中,语音识别,车载导航.语音输入等,虽然不一定准确,但用途广泛. 这里就介绍下谷歌原生的语音识别与百度的语音识别 谷歌语音识别 谷歌语音 ...

  8. android 语音识别_Android语音识别教程

    android 语音识别 您可能听说过" Google Now项目" ,在这里您可以发出语音命令,Android会为您获取结果. 它可以识别您的声音并将其转换为文本或采取适当的措施 ...

  9. 使用科大讯飞提供的SDK实现android语音识别

    #实现android语音识别 下载地址: https://download.csdn.net/download/huosanghuakai1995/10348660 ##一.准备工作 科大讯飞开放云平 ...

最新文章

  1. golang int 转string_Golang的逃逸分析
  2. WPS 去掉自动打开的文档漫游和在线模板
  3. 从Config文件中读取节点的配置信息
  4. 取KindEditor中的textarea的值区不到的解决方案,固定kindEditor的高度
  5. 转:数据库关系模式的范式详解
  6. 如何在运行时更改日志记录级别
  7. asp.net mvc3 利用Ajax实现局部刷新
  8. pytorch之过拟合的处理(Dropout)(笔记五)
  9. mysql完整性约束命名_第5章--MySQL索引与完整性约束.ppt
  10. Teamcenter 入门开发系列问答(4)
  11. 如何解决空虚感?(转)
  12. 2022.11.15 英语背诵
  13. 领导者都具备的四大思维能力
  14. 自学python从字符串开始吧
  15. PostgreSQL测试套-pg_regress使用
  16. Altium Designer学习记录之一
  17. Socket.io 的使用
  18. kurento 6.14.0文档翻译第十一章 Kurento常用问题
  19. Trojan.Win32.Agent.vti的查杀举例
  20. 中文论文翻译成英文投稿国外期刊的小tips

热门文章

  1. 剑指offer1:二维数组中的查找
  2. MVCJSONJQuery分页实现
  3. 0. 跟踪标记 (Trace Flag) 简介
  4. UVA10150 POJ2647 Doublets【BFS】
  5. HDU2072 单词数(解法二)【废除!!!】
  6. 机器学习概念 —— 样本距离矩阵
  7. 【换句话说】【等价描述】—— 定义及概念的不同描述
  8. Spring 框架学习 —— 容器
  9. Java 下的函数对象
  10. 古谚、评论与论断、名篇与名言