android 语音识别 之 讯飞话音移植

http://www.myexception.cn/android/1166876.html

android 语音识别 之 讯飞语音移植

一、简介

    语音识别现在应用越来越广泛了 比如语音写短信、语音搜索商品、语音搜索关键字等等,这遍我们就简单的谈谈国内比较流行的讯飞语音在android平台上的实现。

   笔者认为:

           google语音识别并不是十分符合中国人的习惯,且google语音识别一个重要弊端的是,需要用户手机上必须有google语音应用。

    一般的国行android手机并没有,比如笔记手机小米就没有。需要下载单独google语音apk。所以用户体现自然不如讯飞。

          但讯飞笔者认为,也有一定风险。讯飞应用协议中,他们是具有任何时候,停掉你语音识别服务的权限的,而且还不用和你商量。

      一旦你的应用达到了百万级了,那么讯飞是要收取你一定的服务费的,所以一般大公司的项目基本上不会用讯飞语音或与讯飞语音合作比如小米,

      Android4.0以上版本语音小助手就有小米与讯飞语音合作开发出来的。

二、讯飞Android小示例

     先看看效果图:

 

   嗯,看到效果图后下面就谈谈如何去实现效果:

   2.1 到讯飞官网开发者专区中注册用户并获取appid  地址:http://open.voicecloud.cn/developer.php

   2.2 新建android工程,并在清单文件中声明好相应的权限

  

    <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_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2.3 下载libmsc.so与Msc.jar,并分别放在android工程的libs/armeabi与libs文件夹中,如图
   

  3.4 使用示例如下,代码中都带有相应的注释了:

  

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechConfig.RATE;
import com.iflytek.speech.SpeechError;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;

/**
 * @author 陈淑飞
 * 2013-1-8 上午1:10:24
 */
public class HelloDemoActivity extends Activity implements OnClickListener {
	protected static final String TAG = "ThirdActivity";
	private EditText txt_result;
	private RecognizerDialog rd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.demo);
		
		findView();
		//RecognizerDialog(Context context, String params); "appid=1234567,usr=test,pwd=12345"  usr、pwd不是必选的
		//创建语音识别dailog对象,appid到讯飞就注册获取
		rd = new RecognizerDialog(this ,"appid=50e1b967");
	}

	private void findView() {
		txt_result = (EditText) findViewById(R.id.txt_result);
		findViewById(R.id.bt_search).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_search:
			showReconigizerDialog();
			break;

		default:
			break;
		}
	}

	private void showReconigizerDialog() {
		//setEngine(String engine,String params,String grammar);
		/**
		 * 识别引擎选择,目前支持以下五种
			“sms”:普通文本转写
			“poi”:地名搜索
			“vsearch”:热词搜索
			“vsearch”:热词搜索
			“video”:视频音乐搜索
			“asr”:命令词识别
			
			params	引擎参数配置列表
			附加参数列表,每项中间以逗号分隔,如在地图搜索时可指定搜索区域:“area=安徽省合肥市”,无附加参数传null
		 */
		rd.setEngine("sms", null, null);
		
		//设置采样频率,默认是16k,android手机一般只支持8k、16k.为了更好的识别,直接弄成16k即可。
		rd.setSampleRate(RATE.rate16k);
		
		final StringBuilder sb = new StringBuilder();
		Log.i(TAG, "识别准备开始.............");
		
		//设置识别后的回调结果
		rd.setListener(new RecognizerDialogListener() {
			@Override
			public void onResults(ArrayList<RecognizerResult> result, boolean isLast) {
				for (RecognizerResult recognizerResult : result) {
					sb.append(recognizerResult.text);
					Log.i(TAG, "识别一条结果为::"+recognizerResult.text);
				}
			}
			@Override
			public void onEnd(SpeechError error) {
				Log.i(TAG, "识别完成.............");
				txt_result.setText(sb.toString());
			}
		});
		
		txt_result.setText(""); //先设置为空,等识别完成后设置内容
		rd.show();
	}

}

笔者注:呵呵请大家转载时,注下来源呗,也帮我弄弄人气撒。

另:工程示例domo,已上传到csdn中(免积分哦),地址:http://download.csdn.net/detail/chenshufei2/4989030


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值