700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android语音识别接科大讯飞sdk

android语音识别接科大讯飞sdk

时间:2023-02-16 23:49:45

相关推荐

android语音识别接科大讯飞sdk

1.下载科大讯飞语音识别sdk(/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(如下图)

<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限-->

<uses-permission android:name="android.permission.RECORD_AUDIO" />

<!--连接网络权限,用于执行云端语音能力--><uses-permission android:name="android.permission.INTERNET" />

<!--读取网络信息状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--获取当前wifi状态--><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.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission 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, String> mIatResults = new LinkedHashMap<String, 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 = pile("[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(); }}

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