您的位置:首页 > 移动开发 > Android开发

Android开发 语音识别技术之科大讯飞语音识别(一) — 语音听写

2014-03-31 00:45 567 查看
      接触android几个月以来第一次写博客,有点小激动,相信这一举动会慢慢见证我在IT路上的成长;由于最近项目中用到了语音识别技术,乘着周末有时间记录下来,本人新手一枚,高手勿喷 ^_^

我这里用的是科大讯飞语音API,具体步骤如下:

1、首先进入科大讯飞语音云平台http://open.voicecloud.cn/,注册一个开发者账号

2、创建新应用,得到一个app_id号,然后下载android平台SDK

3、开始创建我们自己的应用,项目中需要在lib文件夹下加入Msc.jar和libmsc.so两个文件,注意libmsc.so是在armeabi文件夹下

布局界面和运行界面










在工程AndroidManifest.xml 文件中添加如下权限

<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"/>


布局文件代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xj.audiodemo.MainActivity"
android:orientation="vertical"
tools:ignore="MergeRootFrame" >

<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:background="@drawable/titlebar_bg"
android:text="@string/audio_write"
android:textSize="25dp"
/>

<EditText
android:id="@+id/et_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="match_parent"
android:gravity="top"
android:layout_height="180dp"
android:background="@drawable/logo"
/>
<Button
android:id="@+id/bt_start"
android:layout_marginTop="10dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/start_audio"
android:background="@drawable/btn_effect"
/>

</LinearLayout>


MainActivity代码

package com.xj.audiodemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.EditText;
import android.widget.Toast;

import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechListener;
import com.iflytek.cloud.speech.SpeechUser;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import com.xj.audiodemo.util.JsonParser;

public class MainActivity extends ActionBarActivity implements OnClickListener {
private EditText editText;
//听写dialog
private RecognizerDialog recognizerDialog;

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

loginAudio();
init();
}

private void loginAudio() {
SpeechUser.getUser().login(this, null, null, "appid="+getString(R.string.app_id), listener);
}

private void init() {
editText = (EditText) findViewById(R.id.et_content);
findViewById(R.id.bt_start).setOnClickListener(this);

//创建听写dialog
recognizerDialog = new RecognizerDialog(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_start://开始录音
showAduioDialog();
break;
}
}

/**
* 显示听写dialog
*/
private void showAduioDialog(){
if(null != recognizerDialog){
recognizerDialog = new RecognizerDialog(this);
}
//清空Grammar_ID,防止识别后进行听写时Grammar_ID的干扰
recognizerDialog.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
//设置听写dialog的引擎
recognizerDialog.setParameter(SpeechConstant.DOMAIN, getString(R.string.engine));
//设置采样率参数  支持8k 和 16k
recognizerDialog.setParameter(SpeechConstant.SAMPLE_RATE, "8000");
//清空显示框
editText.setText(null);
//显示听写对话框
recognizerDialog.setListener(dialogListener);
recognizerDialog.show();
}

private RecognizerDialogListener dialogListener = new RecognizerDialogListener() {

//识别返回结果
@Override
public void onResult(RecognizerResult results, boolean isLast) {
//results返回的是json串 需要解析
String text = JsonParser.parseIatResult(results.getResultString());
editText.append(text);
editText.setSelection(editText.length());
}

//识别回调错误
@Override
public void onError(SpeechError error) {

}
};

/**
* 用户的登陆的回调函数
*/
private SpeechListener listener = new SpeechListener() {

@Override
public void onEvent(int arg0, Bundle arg1) {}

@Override
public void onData(byte[] arg0) {}

//登陆完成返回的结果
@Override
public void onCompleted(SpeechError error) {
if(null != error){
Toast.makeText(MainActivity.this, getString(R.string.login_error), Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, getString(R.string.login_success), Toast.LENGTH_SHORT).show();
}
}
};

@Override
protected void onStop() {
super.onStop();
if(null != recognizerDialog){
recognizerDialog.cancel();
}
}

}


Util工具类 JSON解析

package com.xj.audiodemo.util;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.text.TextUtils;

/**
* @author x j
*/
public class JsonParser {

/**
* 听写结果的Json格式解析
* @param json
* @return string
*/
public static String parseIatResult(String json) {
if(TextUtils.isEmpty(json))
return "";

StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);

JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
JSONArray items = words.getJSONObject(i).getJSONArray("cw");// 听写结果词,默认使用第一个结果
JSONObject obj = items.getJSONObject(0);
ret.append(obj.getString("w"));
}
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
}


本程序员自己开发的两款小应用,欢迎大家试玩 

《史上最牛的手相大师》 在安卓市场,91,百度手机助手,360手机助手,豌豆荚,应用宝已上线

豌豆荚 http://www.wandoujia.com/apps/com.example.handmoney

安卓市场 http://apk.hiapk.com/appinfo/com.example.handmoney

百度手机助手 http://as.baidu.com/a/item?docid=6800908&pre=web_am_se

《史上最牛的人脸评分仪》 在 在安卓市场,91,百度手机助手,360手机助手,豌豆荚已上线

豌豆荚 http://www.wandoujia.com/apps/com.xj.facerecognition

安卓市场 http://apk.hiapk.com/appinfo/com.xj.facerecognition

百度手机助手 http://as.baidu.com/a/item?docid=6802582&pre=web_am_se








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息