欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程之语音识别实现方法

程序员文章站 2024-03-03 20:08:40
本文实例讲述了android编程之语音识别实现方法。分享给大家供大家参考,具体如下: 语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,...

本文实例讲述了android编程之语音识别实现方法。分享给大家供大家参考,具体如下:

语音识别技术在手机上应用得相当广泛,人类日常最频繁的沟通方式是语音,而在手机应用中,大部分是通过硬件手动输入,目前这依然是主要与手机互动的方式。但是随着手机软硬件功能的不断提升,可以预见在不久的将来,语音交流将是人机交互的主要方式。iphone手机内置的siri语音助手就是一个很好的例子。而鲜为人知的是其使用的语音识别技术来自于google。而想而知,作为google力推的android自然被植入了最核心的语音识别技术,其还整合了google的云端技术以更好的实现人机语音互动。

android中主要通过recognizerintent来实现语音识别,它主要包括一些常量来表示语音的模式等,如下表所示:


常量

描述

action_recognize_speech

开启语音活动

action_web_search

开启网络语音模式,结果将以网页搜索显示

extra_language

设置语言库

extra_language_model

语音识别模式

extra_max_results

返回的最大结果

extra_prompt

提示用户可以开始语音

extra _results

将字符串返回到一个arraylist中

language_model-free_form

在一种语言模式上*语言

language_model-web_search

使用语言模型在web上搜索

result_audio_error

返回结果时,音频遇到错误

result_client_error

返回结果时,客户端遇到错误

result_network_error

返回结果时,网络遇到错误

result_no_match

没有检测到语音的错误

result_server_error

返回结果时,服务器遇到错误


这里我们只需要通过intent来传递一个动作以及一些属性,然后通过startactivityforresult来开始语音,代码如下:
intent intent= new intent(recognizerintent.action_recognize_speech);
    intent.putextra(recognizerintent.extra_language_model,recognizerintent.language_model_free_form);
    intent.putextra(recognizerintent.extra_prompt, "开始语音");

当然,如果找不到设置,就会抛出activitynotfoundexception,所以我们需要捕捉这个异常。在以下的例子中,我们实现了一个简单的语音识别程序,当我们点击“点击使用语音识别”按钮之后,开始语音,然后在onactivityresult方法中取得结果并显示出来,其中如果当前手机没有连接到互联网则会显示连接问题,运行效果如以下所示:

点击按钮后:

如果没联网会出现连接错误:

Android编程之语音识别实现方法 Android编程之语音识别实现方法

向话筒说完“电脑”一词后:

Android编程之语音识别实现方法

具体实现的代码如下:

public class recognizerintent_testactivity extends activity {
  private static final int voice_recognition_request_code = 1;
  private listview mlist;
  button mbutton;
  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    mbutton = (button) findviewbyid(r.id.button1);
    mbutton.setonclicklistener(new myrecognizerintentlistener());
    mlist = (listview) findviewbyid(r.id.listview1);
  }
  public class myrecognizerintentlistener implements onclicklistener {
    public void onclick(view v) {
      try {
        // 用intent来传递语音识别的模式,并且开启语音模式
        intent intent = new intent(
            recognizerintent.action_recognize_speech);
        // 语言模式和*形式的语音识别
        intent.putextra(recognizerintent.extra_language_model,
            recognizerintent.language_model_free_form);
        // 提示语言开始
        intent.putextra(recognizerintent.extra_prompt, "请开始语音");
        // 开始语音识别
        startactivityforresult(intent, voice_recognition_request_code);
      } catch (activitynotfoundexception e) {
        toast.maketext(recognizerintent_testactivity.this, "找不到语音设备",
            toast.length_long).show();
      }
    }
  }
  // 语音结束时的回调函数
  @override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {
    if (requestcode == voice_recognition_request_code
        && resultcode == result_ok) {
      // 取得语音的字符
      arraylist<string> results = data
          .getstringarraylistextra(recognizerintent.extra_results);
      // 设置视图的更新
      mlist.setadapter(new arrayadapter<string>(this,
          android.r.layout.simple_list_item_1, results));
      string resultsstring = "";
      for (int i = 0; i < results.size(); i++) {
        resultsstring += results.get(i);
      }
      toast.maketext(this, resultsstring, toast.length_long).show();
    }
    super.onactivityresult(requestcode, resultcode, data);
  }
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android多媒体操作技巧汇总(音频,视频,录音等)》、《android开发入门与进阶教程》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。