首先需要在百度进行用户注册,然后新建一个应用,选择你需要的服务,并且设置好创建的apk的包名。
然后在AndroidManifest.xml中配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.baiduvoicetest"><!-- 允许应用使用麦克风录音 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 获取当前的网络状态,优化录音及网络参数。--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 允许应用联网,发送语音数据至服务器,获得识别结果。 --><uses-permission android:name="android.permission.INTERNET" /><!-- 获取当前wifi状态,优化录音及网络参数 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!-- 获取用户手机的IMEI,用来唯一的标识用户。 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><!-- begin: baidu speech sdk--><meta-dataandroid:name="com.baidu.speech.APP_ID"android:value="api id" /><meta-dataandroid:name="com.baidu.speech.API_KEY"android:value="api key" /><meta-dataandroid:name="com.baidu.speech.SECRET_KEY"android:value="secret key" /><serviceandroid:name="com.baidu.speech.VoiceRecognitionService"android:exported="false"></service><!-- end: baidu speech sdk--><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><action android:name="com.baidu.action.RECOGNIZE_SPEECH" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

AndroidManifest.xml主要配置了一些权限和注册apk时生成的key。百度的文档中还有一个BaiduASRDigitalDialog的activity的注册,不过我没有用到,所以这里就不添加了。

然后将之前下载的jar包添加到lib文件夹,还有几个.so结尾的文件也要添加到main文件夹底下,不然会报错。

完整代码:

public class MainActivity extends Activity implements RecognitionListener {@Bind(R.id.btn_voice)public Button btnVoice;@Bind(R.id.tv_content)public TextView tvContent;private SpeechRecognizer speechRecognizer;private CircleLoadingProgress mLoadingDialog = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);// 创建识别器speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this, new ComponentName(this, VoiceRecognitionService.class));// 注册监听器speechRecognizer.setRecognitionListener(this);}@OnClick(R.id.btn_voice)public void startVoice() {showLoadingDialog("识别中。。。");start();}private void start() {Intent intent = new Intent();bindParams(intent);speechRecognizer.startListening(intent);}public void bindParams(Intent intent) {SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);// 提示音if (sp.getBoolean("tips_sound", true)) {intent.putExtra(Constant.EXTRA_SOUND_START, R.raw.bdspeech_recognition_start);intent.putExtra(Constant.EXTRA_SOUND_END, R.raw.bdspeech_speech_end);intent.putExtra(Constant.EXTRA_SOUND_SUCCESS, R.raw.bdspeech_recognition_success);intent.putExtra(Constant.EXTRA_SOUND_ERROR, R.raw.bdspeech_recognition_error);intent.putExtra(Constant.EXTRA_SOUND_CANCEL, R.raw.bdspeech_recognition_cancel);}// 音频源if (sp.contains(Constant.EXTRA_INFILE)) {String tmp = sp.getString(Constant.EXTRA_INFILE, "").replaceAll(",.*", "").trim();intent.putExtra(Constant.EXTRA_INFILE, tmp);}// 保存过程中产生的音频文件if (sp.getBoolean(Constant.EXTRA_OUTFILE, false)) {intent.putExtra(Constant.EXTRA_OUTFILE, "sdcard/outfile.pcm");}// 离线语音识别路径if (sp.getBoolean(Constant.EXTRA_GRAMMAR, false)) {intent.putExtra(Constant.EXTRA_GRAMMAR, "assets:///baidu_speech_grammar.bsg");}// 采样率if (sp.contains(Constant.EXTRA_SAMPLE)) {String tmp = sp.getString(Constant.EXTRA_SAMPLE, "").replaceAll(",.*", "").trim();if (null != tmp && !"".equals(tmp)) {intent.putExtra(Constant.EXTRA_SAMPLE, Integer.parseInt(tmp));}}// 语种if (sp.contains(Constant.EXTRA_LANGUAGE)) {String tmp = sp.getString(Constant.EXTRA_LANGUAGE, "").replaceAll(",.*", "").trim();if (null != tmp && !"".equals(tmp)) {intent.putExtra(Constant.EXTRA_LANGUAGE, tmp);}}// 语义解析设置if (sp.contains(Constant.EXTRA_NLU)) {String tmp = sp.getString(Constant.EXTRA_NLU, "").replaceAll(",.*", "").trim();if (null != tmp && !"".equals(tmp)) {intent.putExtra(Constant.EXTRA_NLU, tmp);}}// 语义活动检测// search 搜索(短)// input 输入(长)if (sp.contains(Constant.EXTRA_VAD)) {String tmp = sp.getString(Constant.EXTRA_VAD, "").replaceAll(",.*", "").trim();if (null != tmp && !"".equals(tmp)) {intent.putExtra(Constant.EXTRA_VAD, tmp);}}// 垂直领域String prop = null;if (sp.contains(Constant.EXTRA_PROP)) {String tmp = sp.getString(Constant.EXTRA_PROP, "").replaceAll(",.*", "").trim();if (null != tmp && !"".equals(tmp)) {intent.putExtra(Constant.EXTRA_PROP, Integer.parseInt(tmp));prop = tmp;}}}@Overridepublic void onReadyForSpeech(Bundle params) {// 准备就绪}@Overridepublic void onBeginningOfSpeech() {// 开始说话处理}@Overridepublic void onRmsChanged(float rmsdB) {// 音量变化处理}@Overridepublic void onBufferReceived(byte[] buffer) {// 录音数据传出处理}@Overridepublic void onEndOfSpeech() {// 说话结束处理}@Overridepublic void onError(int error) {StringBuilder sb = new StringBuilder();switch (error) {case SpeechRecognizer.ERROR_AUDIO:sb.append("音频问题");break;case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:sb.append("没有语音输入");break;case SpeechRecognizer.ERROR_CLIENT:sb.append("其它客户端错误");break;case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:sb.append("权限不足");break;case SpeechRecognizer.ERROR_NETWORK:sb.append("网络问题");break;case SpeechRecognizer.ERROR_NO_MATCH:sb.append("没有匹配的识别结果");break;case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:sb.append("引擎忙");break;case SpeechRecognizer.ERROR_SERVER:sb.append("服务端错误");break;case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:sb.append("连接超时");break;}sb.append(":" + error);tvContent.setText("识别失败:" + sb.toString());cancelLoadingDialog();}@Overridepublic void onResults(Bundle results) {ArrayList<String> nbest = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);// 语音结果json格式String json_res = results.getString("origin_result");tvContent.setText(nbest.get(0));cancelLoadingDialog();}@Overridepublic void onPartialResults(Bundle partialResults) {// 临时结果处理}@Overridepublic void onEvent(int eventType, Bundle params) {// 处理事件回调}public void showLoadingDialog(String message) {if (mLoadingDialog == null) {mLoadingDialog = new CircleLoadingProgress(this);}if (message != null) {mLoadingDialog.setMessage(message);}mLoadingDialog.show();}public void cancelLoadingDialog() {if (mLoadingDialog != null && mLoadingDialog.isShowing()) {mLoadingDialog.cancel();}}@Overrideprotected void onDestroy() {speechRecognizer.destroy();super.onDestroy();ButterKnife.unbind(this);}
}

界面布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="10dp"tools:context="com.example.baiduvoicetest.MainActivity"><Buttonandroid:id="@+id/btn_voice"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="语音" /><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="Hello World!" />
</LinearLayout>

其中Constant文件来自于官网demo中。

示意图:

                              

Android 百度在线语音识别相关推荐

  1. Android 调用百度在线语音识别功能

    换了好几个语音转文字的工具,主要跟百度上大家的方法一样,最开始用的科大讯飞的语音,真的还蛮好用的,整体来说demo的接口比较清晰吧~准确率也很高,但是量大就要收费.所以,换了第二种,Android原生 ...

  2. 百度在线语音识别接入经验

    由于最近项目需要语音识别,所以去接了一下语音识别的SDK. 分别接了讯飞的语音识别,和百度的.至于优缺点嘛,感觉讯飞的实时识别速度比较快,然后百度的是一次性上传,如果你一次识别的语音太多,就会识别比较 ...

  3. android 百度语音 ui,在Android Studio下使用百度语音识别的一个简单例子

    一.引言 利用百度语音识别和百度语音合成可以很方便的设计一个语音交互应用,这里记录一下百度在线语音识别的简单例子以便快速上手. 我所用的语音识别包的版本是Baidu-Voice-SDK-Android ...

  4. Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

    百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...

  5. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  6. 【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)

    需要源码和相关资源请点赞关注收藏后评论区留下QQ~~~ 一.在线语音识别 云知声的语音识别同样采用WebSocket接口,待识别的音频流支持MP3和PCM两种格式,对于在线语音识别来说,云知声使用JS ...

  7. Android 语音播报 , 百度在线语音合成封装;

    Android自带的语音播报不支持中文: 科大讯飞开始收费了: 百度离线语音合成也收费,但是! 在线语音合成不收费,需要在百度开放平台申请AppId: 文档:https://cloud.baidu.c ...

  8. ESP32接入百度智能云语音识别,实现在线语音识别

    一.概述   使用ESP32接入百度智能云实现在线语音识别.实现最基本的语音识别功能还是很简单的,但还是遇到了一些小问题,在这记录一下.   使用了max9814麦克风模块用做语音输入,一个按键来控制 ...

  9. Android——百度语音识别

    最近搞了一些关于语音的开发,我做的项目使用的讯飞的语音识别,但是有一个问题是讯飞的语音唤醒和离线语音合成是收费的,并且费用还不低,对于一般的小公司或者个人开发的小APP,还是很有压力的.百度语音识别的 ...

最新文章

  1. PHP 读取Excel数据
  2. 在ubuntu 14.04 编译android 2.3.1 错误解决办法
  3. 数据库读写分离 - MyBatis
  4. jquery中的left和top
  5. opencv threshold_基于深度学习OpenCV与python进行字符识别
  6. header.vue 调用变量,别的组件导入引用,组件方法事例实例
  7. 通俗易懂理解朴素贝叶斯分类的拉普拉斯平滑
  8. PhalApi视频教程
  9. 成功在中东和北非地区发布应用或游戏的 7 个技巧
  10. OKR 如何转变你的绩效管理策略
  11. 2019高考数学必考知识点,高考数学知识板块
  12. 【论文写作——投稿和审稿】
  13. 股豆网:欧洲5G套餐轮番公布 流量无限用
  14. 使用示波器的正确姿势
  15. 2021年吴文俊人工智能科学技术奖公布 华为云田奇获杰出贡献奖
  16. 移动硬盘格式化了的资料找到办法
  17. Python的爱心动效
  18. 企业业务招待费的税前扣除,不要出现以下5个错误!
  19. 江民公司网络版问题汇总三
  20. 关闭服务器共享文件,服务器如何关闭共享文件夹共享文件夹

热门文章

  1. 一个平庸程序员自白:我不牛逼但那又怎样?
  2. 图片优化瘦身 给网站提速
  3. 有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?
  4. .NET框架源码解读之MYC编译器
  5. 搜狐号第三届创作者大会落幕:胡锡进管清友谭飞雷建平论道
  6. 模型model的增删查改操作
  7. 30岁了还去面试基础岗位,是不是很失败?
  8. Mac M1 pro 安装 python2 教程
  9. 恶意代码检测技术的演化
  10. 什么是项目管理软件中的时间管理?