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文件夹下
布局界面和运行界面
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/8d8963d1ce5a92b109256c35ace87a1c)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/aa6d3c56b0097f0303257838943f0d7d)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201403/8da22cff3a06a94623e6361c1497d33c)
在工程AndroidManifest.xml 文件中添加如下权限
布局文件代码
MainActivity代码
Util工具类 JSON解析
本程序员自己开发的两款小应用,欢迎大家试玩
《史上最牛的手相大师》 在安卓市场,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
我这里用的是科大讯飞语音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
相关文章推荐
- Android开发 语音识别技术之科大讯飞语音识别(二) — 语音合成
- Android开发集成科大讯飞语音识别+语音合成功能
- Android开发集成科大讯飞语音识别+语音合成功能
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android开发集成科大讯飞语音识别+语音合成功能
- android语音识别方法一:使用intent调用语音识别程序
- Android下通过pocketsphinx实现离线语音识别的环境搭建和demo运行(续)--实现Windows下的语音识别
- 自动语音识别技术(ASR)在聋哑儿童计算机辅助教学中的开发与应用
- Android开发之语音合成及听写(二)
- 【游戏语音技术开发互联网公司】android 主程
- android语音识别之科大讯飞语音API的使用
- 使用科大讯飞的语音技术实现语音识别
- Android开发学习之使用百度语音识别SDK实现语音识别(下)
- 转载 android语音识别之科大讯飞语音API的使用
- android集成科大讯飞语音听写和语音合成
- Android特色开发之语音识别
- Android下通过pocketsphinx实现离线语音识别的环境搭建和demo运行(续)--实现Windows下的语音识别
- 转:基于科大讯飞语音API语音识别开发详解
- 开发具备语音识别功能的 Android* 应用