1.下载科大讯飞语音识别sdk(http://www.xfyun.cn/sdk/dispatcher)选择语音听写SDK(如下图) ,下载前会让你先创建应用,创建应用后会得到一个appid。然后点“立即开通”去开通“语音识别”功能,之后就会跳出“SDK下载”的页面,然后就可以下载了(未注册账号的要先注册一个账号)。


2.如果是android开发选择android如果是ios选择ios平台(如图)


3.将下载好的sdk中的libs里面的msc.jar以及libmsc.so文件复制到自己创建的libs下面 (如图)


4.接下来将Manifest中添加一下权限并且创建appid时包名需要跟自己创建的工程包名保持一致 (例如 com.vice.android)并且在application中设置android:name以及bunid gradle里面配置sourceSets(如下图)

  
android:name="android.permission.RECORD_AUDIO" />
android:name="android.permission.INTERNET" />
  android:name="android.permission.ACCESS_NETWORK_STATE" />
  android:name="android.permission.ACCESS_WIFI_STATE" />
 android:name="android.permission.CHANGE_NETWORK_STATE" />
  android:name="android.permission.READ_PHONE_STATE" />
android:name="android.permission.ACCESS_FINE_LOCATION" />android:name="android.permission.READ_CONTACTS" />android:name="android.permission.WRITE_EXTERNAL_STORAGE" />android:name="android.permission.WRITE_SETTINGS" />android:name="android.permission.READ_EXTERNAL_STORAGE" />android:name="android.permission.ACCESS_FINE_LOCATION" />android:name="android.permission.ACCESS_COARSE_LOCATION" />

5. 具体代码目录结构


6.主要代码如下

package com.voice.android;import android.os.Bundle;import android.preference.EditTextPreference;import android.preference.Preference;import android.preference.Preference.OnPreferenceChangeListener;import android.preference.PreferenceActivity;import android.view.Window;/** * 听写设置界面 */public class IatSettings extends PreferenceActivity implements OnPreferenceChangeListener {      public static final String PREFER_NAME = "com.iflytek.setting";   private EditTextPreference mVadbosPreference;   private EditTextPreference mVadeosPreference;      @SuppressWarnings("deprecation")   public void onCreate(Bundle savedInstanceState) {      requestWindowFeature(Window.FEATURE_NO_TITLE);      super.onCreate(savedInstanceState);      getPreferenceManager().setSharedPreferencesName(PREFER_NAME);      addPreferencesFromResource(R.xml.iat_setting);            mVadbosPreference = (EditTextPreference)findPreference("iat_vadbos_preference");      mVadbosPreference.getEditText().addTextChangedListener(new SettingTextWatcher(IatSettings.this,mVadbosPreference,0,10000));            mVadeosPreference = (EditTextPreference)findPreference("iat_vadeos_preference");      mVadeosPreference.getEditText().addTextChangedListener(new SettingTextWatcher(IatSettings.this,mVadeosPreference,0,10000));   }   @Override   public boolean onPreferenceChange(Preference preference, Object newValue) {      return true;   }}

package com.voice.android;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONTokener;/** * Json结果解析类 */public class JsonParser {   public static String parseIatResult(String json) {      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();   }}

package com.voice.android;import android.content.SharedPreferences;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;import com.iflytek.cloud.ErrorCode;import com.iflytek.cloud.InitListener;import com.iflytek.cloud.RecognizerResult;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechRecognizer;import com.iflytek.cloud.ui.RecognizerDialog;import com.iflytek.cloud.ui.RecognizerDialogListener;import org.json.JSONException;import org.json.JSONObject;import java.util.HashMap;import java.util.LinkedHashMap;public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private EditText et_name;    private ImageView iv_yuyin_button;    // 语音识别对象    private SpeechRecognizer mAsr;    private Toast mToast;    private SharedPreferences mSharedPreferences;    // 语音听写UI    private RecognizerDialog mIatDialog;    private HashMap, String> mIatResults = new LinkedHashMap, String>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_name= (EditText) findViewById(R.id.et_name);        iv_yuyin_button= (ImageView) findViewById(R.id.iv_yuyin_button);        initXfun();        initView();        initListener();        mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.iv_yuyin_button:                voiceTurnWords();                break;            default:                break;        }    }    private void initView(){        mIatDialog = new RecognizerDialog(this, mInitListener);    }    private void initListener(){        iv_yuyin_button.setOnClickListener(this);    }    private void initXfun(){        mAsr = SpeechRecognizer.createRecognizer(MainActivity.this, mInitListener);    }    /**     * 初始化监听器。     */    private InitListener mInitListener = new InitListener() {        @Override        public void onInit(int code) {            if (code != ErrorCode.SUCCESS) {                showTip("初始化失败,错误码:"+code);            }        }    };    private void showTip(final String str) {        runOnUiThread(new Runnable() {            @Override            public void run() {                mToast.setText(str);                mToast.show();            }        });    }    private void voiceTurnWords(){        setParam();        mIatDialog.setListener(mRecognizerDialogListener);        mIatDialog.show();        showTip(getString(R.string.text_begin));    }    public void setParam() {        // 清空参数        mAsr.setParameter(SpeechConstant.PARAMS, null);        // 设置听写引擎        mAsr.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);        // 设置返回结果格式        mAsr.setParameter(SpeechConstant.RESULT_TYPE, "json");        // 设置语言        mAsr.setParameter(SpeechConstant.LANGUAGE, "zh_cn");        // 设置语言区域        mAsr.setParameter(SpeechConstant.ACCENT, "mandarin");        // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理        mAsr.setParameter(SpeechConstant.VAD_BOS,"4000");        // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音        mAsr.setParameter(SpeechConstant.VAD_EOS,  "1000");        // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点        mAsr.setParameter(SpeechConstant.ASR_PTT,  "0");    }    /**     * 听写UI监听器     */    private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {        public void onResult(RecognizerResult results, boolean isLast) {            printResult(results);        }        /**         * 识别回调错误.         */        public void onError(SpeechError error) {            showTip(error.getPlainDescription(true));        }    };    private void printResult(RecognizerResult results) {        String text = JsonParser.parseIatResult(results.getResultString());        String sn = null;        // 读取json结果中的sn字段        try {            JSONObject resultJson = new JSONObject(results.getResultString());            sn = resultJson.optString("sn");        } catch (JSONException e) {            e.printStackTrace();        }        mIatResults.put(sn, text);        StringBuffer resultBuffer = new StringBuffer();        for (String key : mIatResults.keySet()) {            resultBuffer.append(mIatResults.get(key));        }        et_name.setText(resultBuffer.toString());        et_name.setSelection(et_name.length());    }}
package com.voice.android;import java.util.regex.Pattern;import android.content.Context;import android.preference.EditTextPreference;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.widget.Toast;/** * 输入框输入范围控制 */public class SettingTextWatcher implements TextWatcher {   private int editStart ;   private int editCount ;   private EditTextPreference mEditTextPreference;   int minValue;//最小值   int maxValue;//最大值   private Context mContext;      public SettingTextWatcher(Context context,EditTextPreference e,int min, int max) {      mContext = context;      mEditTextPreference = e;      minValue = min;      maxValue = max;    }      @Override   public void onTextChanged(CharSequence s, int start, int before, int count) {      editStart = start;      editCount = count;   }      @Override   public void beforeTextChanged(CharSequence s, int start, int count,int after) {          }      @Override   public void afterTextChanged(Editable s) {      if (TextUtils.isEmpty(s)) {         return;      }      String content = s.toString();      if (isNumeric(content)) {         int num = Integer.parseInt(content);         if (num > maxValue || num < minValue) {            s.delete(editStart, editStart+editCount);            mEditTextPreference.getEditText().setText(s);            Toast.makeText(mContext, "超出有效值范围", Toast.LENGTH_SHORT).show();         }      }else {         s.delete(editStart, editStart+editCount);         mEditTextPreference.getEditText().setText(s);         Toast.makeText(mContext, "只能输入数字哦", Toast.LENGTH_SHORT).show();      }   }      /**    * 正则表达式-判断是否为数字    */   public static boolean isNumeric(String str){        Pattern pattern = Pattern.compile("[0-9]*");        return pattern.matcher(str).matches();        } };
package com.voice.android;import android.app.Application;import com.iflytek.cloud.Setting;import com.iflytek.cloud.SpeechUtility;public class SpeechApp extends Application {   @Override   public void onCreate() {      // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成SpeechUtility对象为null      // 如在Application中调用初始化,需要在Mainifest中注册该Applicaiton      // 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数:SpeechConstant.FORCE_LOGIN+"=true"      // 参数间使用半角“,”分隔。      // 设置你申请的应用appid,请勿在'='appid之间添加空格及空转义符      // 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误      SpeechUtility.createUtility(SpeechApp.this, "appid=5a4ae664");      // 以下语句用于设置日志开关(默认开启),设置成false时关闭语音云SDK日志打印      super.onCreate();   }   }



更多相关文章

  1. Android常用权限permission列表摘录
  2. android 7.0以上获取图片工具类
  3. Android快速实现二维码扫描--Zbar
  4. Android使用webrtc实现检测用户是否在说话
  5. android 监听电话去电接通瞬间[非来电]
  6. android 打开蓝牙设备 显示已经配对的蓝牙设备 ,并将已配对的蓝牙
  7. Android实现语音识别 && 讯飞平台语音识别语音播报
  8. Android使用AOP
  9. 如何运用百度地图SDK进行开发(一)初级篇

随机推荐

  1. Android端JQueryMobile使用教程(二)
  2. 自定义progressbar 的思路
  3. android apk 签名
  4. android带进度的文件上传
  5. android横竖屏切换后不重建不销毁Activit
  6. gridlayout 子view撑出屏幕
  7. Android Studio中模拟器中关于VT-x is di
  8. Android获取IPV4的方法
  9. 关于Android加快应用崩溃效率
  10. Android开发必备的免费资源和工具