1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Android开发 语音识别技术之科大讯飞语音识别(一) — 语音听写

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

时间:2023-02-22 16:58:14

相关推荐

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

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

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

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

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="/apk/res/android"xmlns:tools="/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"/><Buttonandroid: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;//听写dialogprivate RecognizerDialog recognizerDialog;@Overrideprotected 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);//创建听写dialogrecognizerDialog = new RecognizerDialog(this);}@Overridepublic 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 和 16krecognizerDialog.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() {@Overridepublic void onEvent(int arg0, Bundle arg1) {}@Overridepublic void onData(byte[] arg0) {}//登陆完成返回的结果@Overridepublic 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();}}};@Overrideprotected 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手机助手,豌豆荚,应用宝已上线

豌豆荚/apps/com.example.handmoney

安卓市场/appinfo/com.example.handmoney

百度手机助手/a/item?docid=6800908&pre=web_am_se

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

豌豆荚/apps/com.xj.facerecognition

安卓市场/appinfo/com.xj.facerecognition

百度手机助手/a/item?docid=6802582&pre=web_am_se

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。