Android使用百度语音识别的示例代码

本文使用百度语音识别,完成语音识别的功能,使用百度语音识别,先要申请APP ID,这个直接到百度网站上有说明文档,本文不再赘述。申请之后,下载SDK包,按照百度官网要求,合并libs和res两个目录到项目中,然后在build.gradle(module:app)中的Android{...}下添加

sourceSets{
  main{
    jniLibs.srcDirs=['libs']
  }
} 

这样, 百度语音识别的so文件才能正常使用。

Manifest文件中添加权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

然后还要在Manifest中添加

<!-- 请填写应用实际的APP_ID -->
<meta-data android:name="com.baidu.speech.APP_ID" android:value="APP ID"/>
<!-- 请填写应用实际的API_KEY -->
<meta-data android:name="com.baidu.speech.API_KEY" android:value="API_KEY"/>
<!-- 请填写应用实际的SECRET_KEY -->
<meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="SECRET_KEY"/> 

<service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" /> 

其中的APP ID,API_KEY和SECRET_KEY替换为你申请的内容。

我们封装了一个工具类,用来使用语音识别

package com.yjp.speechrecognizer; 

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognitionListener;
import android.speech.SpeechRecognizer;
import android.widget.Toast; 

import com.baidu.speech.VoiceRecognitionService; 

public class SpeechRecognizerTool implements RecognitionListener { 

  public interface ResultsCallback {
    void onResults(String result);
  } 

  private Context mContext; 

  private SpeechRecognizer mSpeechRecognizer; 

  private ResultsCallback mResultsCallback; 

  public SpeechRecognizerTool(Context context) {
    mContext = context;
  } 

  public synchronized void createTool() {
    if (null == mSpeechRecognizer) { 

      // 创建识别器
      mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext,
          new ComponentName(mContext, VoiceRecognitionService.class)); 

      // 注册监听器
      mSpeechRecognizer.setRecognitionListener(this);
    }
  } 

  public synchronized void destroyTool() {
    mSpeechRecognizer.stopListening();
    mSpeechRecognizer.destroy();
    mSpeechRecognizer = null;
  } 

  // 开始识别
  public void startASR(ResultsCallback callback) {
    mResultsCallback = callback; 

    Intent intent = new Intent();
    bindParams(intent);
    mSpeechRecognizer.startListening(intent);
  } 

  //停止识别
  public void stopASR() {
    mSpeechRecognizer.stopListening();
  } 

  private void bindParams(Intent intent) {
    // 设置识别参数
  } 

  @Override
  public void onReadyForSpeech(Bundle params) {
    // 准备就绪
    Toast.makeText(mContext, "请开始说话", Toast.LENGTH_SHORT).show();
  } 

  @Override
  public void onBeginningOfSpeech() {
    // 开始说话处理
  } 

  @Override
  public void onRmsChanged(float rmsdB) {
    // 音量变化处理
  } 

  @Override
  public void onBufferReceived(byte[] buffer) {
    // 录音数据传出处理
  } 

  @Override
  public void onEndOfSpeech() {
    // 说话结束处理
  } 

  @Override
  public void onError(int error) {
  } 

  @Override
  public void onResults(Bundle results) { 

    // 最终结果处理
    if (mResultsCallback != null) {
      String text = results.get(SpeechRecognizer.RESULTS_RECOGNITION)
          .toString().replace("]", "").replace("[", "");
      mResultsCallback.onResults(text);
    }
  } 

  @Override
  public void onPartialResults(Bundle partialResults) {
    // 临时结果处理
  } 

  @Override
  public void onEvent(int eventType, Bundle params) {
  }
}

MainActivity的界面如下

<?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:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:orientation="vertical"
  android:gravity="center"
  tools:context="com.yjp.speechrecognizer.MainActivity"> 

  <Button
    android:id="@+id/startSpeechButton"
    android:layout_width="60dp"
    android:layout_height="40dp"
    android:background="@drawable/bdspeech_btn_orangelight_normal"
    android:text="按住说话"/> 

  <TextView
    android:id="@+id/speechTextView"
    android:layout_margin="10dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

MainActivity的类实现为:

package com.yjp.speechrecognizer; 

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity implements SpeechRecognizerTool.ResultsCallback { 

  private Button mStartSpeechButton;
  private TextView mTextView; 

  private SpeechRecognizerTool mSpeechRecognizerTool = new SpeechRecognizerTool(this); 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    mTextView = (TextView) findViewById(R.id.speechTextView); 

    mStartSpeechButton = (Button) findViewById(R.id.startSpeechButton);
    mStartSpeechButton.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action) {
          case MotionEvent.ACTION_DOWN:
            mSpeechRecognizerTool.startASR(MainActivity.this);
            mStartSpeechButton.setBackgroundResource(
                R.drawable.bdspeech_btn_orangelight_pressed);
            break;
          case MotionEvent.ACTION_UP:
            mSpeechRecognizerTool.stopASR();
            mStartSpeechButton.setBackgroundResource(
                R.drawable.bdspeech_btn_orangelight_normal);
            break;
          default:
            return false;
        } 

        return true;
      }
    });
  } 

  @Override
  protected void onStart() {
    super.onStart();
    mSpeechRecognizerTool.createTool();
  } 

  @Override
  protected void onStop() {
    super.onStop();
    mSpeechRecognizerTool.destroyTool();
  } 

  @Override
  public void onResults(String result) {
    final String finalResult = result;
    MainActivity.this.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        mTextView.setText(finalResult);
      }
    });
  }
}

可以运行看一下效果,感觉识别率还是不错的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android Studio应用开发集成百度语音合成使用方法实例讲解

    首先,语音合成是指将文本信息转换成声音.意思就是将文本转化为声音,让你的应用开口说话.国内在业内比较有名的第三方语音合成平台有百度语音和科大讯飞. 本文集成的是百度语音合成,其主要特点是: 完全永久免费 业界首创完全永久免费新形式,为开发者提供最流畅最自然的语音合成服务.完全免费,永久使用,彻底摆脱限制. 离线在线融合模式 SDK可以根据当前网络状况,自动判断使用本地引擎还是云端引擎进行语音合成,再也不用担心流量消耗! 多语言多音色可选 中文普通话.中英文混读.男声.女声任你选,更支持语速.音调

  • Android 基于百度语音的语音交互功能(推荐)

    项目里面用到了语音唤醒功能,前面一直在用讯飞的语音识别,本来打算也是直接用讯飞的语音唤醒,但是讯飞的语音唤醒要收费,试用版只有35天有效期.只好改用百度语音,百度语音所有功能免费,功能也比较简单实用,包括语音识别,语音合成和语音唤醒,正好可以组成一套完整的语音交互功能. 效果图: 首先是语音唤醒功能,说出关键词即可叫语音识别,唤醒成功会有语音提示,这里采用了百度语音的合成功能.然后百度语音识别会根据wifi情况自动切换在线或者离线识别,但是离线识别只能识别已经导入的关键词,而且离线第一次识别需要

  • android预置默认的语音信箱号码具体实现

    有些SIM卡在出厂时并没有预置VoiceMail number,但运营商又要求能够根据PLMN去自适应的从手机中读取到预设的VM number.在此介绍以xml的方式预置VM number的方法,以及如何允许用户去修改并能够记住用户的选择.VM number使用的优先级为: SIM卡读取>用户设置>xml预置.在用户修改voice mail number时,优先存储到SIM卡.若SIM卡存储失败,则以IMSI为单位存储到手机中. 1.支持以XML的方式预置VM number,文件名为:voic

  • Android仿微信语音聊天功能

    本文实例讲述了Android仿微信语音聊天功能代码.分享给大家供大家参考.具体如下: 项目效果如下: 具体代码如下: AudioManager.java package com.xuliugen.weichat; import java.io.File; import java.io.IOException; import java.util.UUID; import android.media.MediaRecorder; public class AudioManager { private

  • Android仿微信语音聊天界面设计

    有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录.代码和老师讲的基本一样,网上也有很多相同的博客.我只是在AndroidStudio环境下写的. --主界面代码-- public class MainActivity extends Activity { private ListView mListView; private ArrayAdapter<Recorder> mAdapter; private List<Recorder>

  • Android 轻松实现语音识别详解及实例代码

    使用Intent调用语音识别程序 说明 Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如果找不到语音识别设备,就会抛出异常 ActivityNotFoundException,所以我们需要捕捉这个异常.而且语音识别在模拟器上是无法测试的,因为语音识别是访问google 云端数据,所以如果手机的网络没有开启,就无法实现识别声音的!一定要开启手机的网络,如果手机不存在语音识别功能的话,也是无法启用识别! 注意:使用前需要安装语音识别程序.如<语音搜索>

  • Android实现语音数据实时采集、播放

    最近做的项目是和语音实时采集并发送,对方实时接收并播放相关,下面记录下实现的核心代码. 很多Android开发者应该知道android有个MediaRecorder对象和MediaPlayer对象,用于录制和播放音频.这个弊端在于他们不能实时采集并发送出去,所以,我们只能使用AudioRecord和AudioTrack来实现. 记得申明权限: <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS&qu

  • Android基于讯飞语音SDK实现语音识别

    一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科大语音官网下载:http://www.xfyun.cn/ 当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册,申请通过或可获得Appid 如下图,申请一个APPID,就可以了. 二.语音识别流程 1.创建识别控件 函数原型 Public RecognizerDialo

  • Android实现语音识别代码

    苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技术将其发扬光大. 所以Google Voice Recognition在Android 的实现就变得极其轻松. 语音识别,借助于云端技术可以识别用户的语音输入,包括语音控制等技术,下面我们将利用Google 提供的Api 实现这一功能. 功能点为:通过用户语音将用户输入的语音识别出来,并打印在列表上. 功能界面如下: 用户

  • android语音即时通讯之录音、播放功能实现代码

    在android中,实现录音与语音播放的功能算是比较简单的,但是作为参考,还是很有必要将语音相关的知识做一个简要的记录. 首先,在android中,支持录音支持两种方式.主要包括:字节流模式和文件流模式.用文件流模式进行录音操作比较简单,而且相对来说,因为其封装性比较好,录制下的文件也会比较小.但是相对于文件流模式,就没有字节流模式那么灵活,但是想要用好字节流模式还是需要下一点功夫的. 下面开始介绍文件流模式的语音操作: 文件流模式 我们来看录音部分的实现,首先我们实现开始录音的部分: 在正式编

随机推荐