讯飞语音识别
来源:互联网 发布:陕西大数据集团笔试题 编辑:程序博客网 时间:2024/04/27 14:18
1.到http://www.xfyun.cn/?token=838b6419-6f9c-4644-a636-56785e709db8&account_id=3588587452 讯飞官网注册然后创建应用
得到appid
2.下载第一个语音识别的SDK 然后解压
3.解压出来之后把assets和libs里面的都复制到你的项目中
4.然后在导入一个json解析类到时候得到字符串用到解析 链接:https://pan.baidu.com/s/1geDouS7 密码:tlbf
5.当然还要在清单文件里面配置一哈 添加权限
<!--连接网络权限,用于执行云端语音能力 --> <uses-permission android:name="android.permission.INTERNET"/> <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <!--读取网络信息状态 --> <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.READ_CONTACTS"/> <!--外存储写权限,构建语法需要用到此权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!--外存储读权限,构建语法需要用到此权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!--配置权限,用来记录应用配置信息 --> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务--> <!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 --> <uses-permission android:name="android.permission.CAMERA" />
6.在项目的build.gradle里面配置
sourceSets{ main{ jniLibs.srcDirs=['libs'] } }
7.然后在主函数里面写代码
import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;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.SpeechUtility;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 { private TextView tv1; private SpeechRecognizer speechRecognizer; private RecognizerDialog recognizerDialog; private HashMap<String, String> hashMap= new LinkedHashMap<String, String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1=findViewById(R.id.tv1); // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn // 请勿在“=”与appid之间添加任何空字符或者转义符 SpeechUtility.createUtility(this, SpeechConstant.APPID + "=这里写你的APPID 等于号别删除"); // 初始化识别对象 speechRecognizer = SpeechRecognizer.createRecognizer(this,ini); //创建语言识别对话框 recognizerDialog = new RecognizerDialog(this, ini); // 缓存 getSharedPreferences(getPackageName(),MODE_PRIVATE); } private InitListener ini=new InitListener(){ @Override public void onInit(int i) { if(i!= ErrorCode.SUCCESS){ Toast.makeText(MainActivity.this, "初始化失败", Toast.LENGTH_SHORT).show(); } } }; public void cc(View view){ switch (view.getId()) { case R.id.but1: // 清空参数 speechRecognizer.setParameter(SpeechConstant.PARAMS, null); // 设置听写引擎,在线引擎. speechRecognizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 设置返回结果格式 speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "json"); // 设置语言 speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); // 设置语言区域 speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin"); // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理 speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000"); // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音 speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000"); // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点 speechRecognizer.setParameter(SpeechConstant.ASR_PTT, "1");// //设置云端识别使用的语法id// String grammarId = mSharedPreferences.getString("grammar_abnf_id", null);// speechRecognizer.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId); // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限 // 注:AUDIO_FORMAT参数语记需要更新版本才能生效 speechRecognizer.setParameter(SpeechConstant.AUDIO_FORMAT,"wav"); speechRecognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/asr.wav"); tv1.setText(""); recognizerDialog.setListener(new RecognizerDialogListener() { //识别成功的时候回调 @Override public void onResult(RecognizerResult recognizerResult, boolean b) { printResult(recognizerResult); } //识别错误的时候回调 @Override public void onError(SpeechError speechError) { Toast.makeText(MainActivity.this, "识别失败", Toast.LENGTH_SHORT).show(); } }); recognizerDialog.show();//这个别忘记了 不然录音对话框出不来// //识别监听器// speechRecognizer.startListening(new RecognizerListener() {// @Override// public void onVolumeChanged(int i, byte[] bytes) {// Toast.makeText(MainActivity.this, "正在说话中,音量大小:"+i, Toast.LENGTH_SHORT).show();// }//// @Override// public void onBeginOfSpeech() {// Toast.makeText(MainActivity.this, "开始说话", Toast.LENGTH_SHORT).show();//// }//// @Override// public void onEndOfSpeech() {// Toast.makeText(MainActivity.this, "说话结束", Toast.LENGTH_SHORT).show();// }//// @Override// public void onResult(RecognizerResult recognizerResult, boolean b) {//// }//// @Override// public void onError(SpeechError speechError) {//// }//// @Override// public void onEvent(int i, int i1, int i2, Bundle bundle) {//// }// }); break; case R.id.but2: break; } } 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(); } hashMap.put(sn, text); StringBuffer resultBuffer = new StringBuffer(); for (String key : hashMap.keySet()) { resultBuffer.append(mIatResults.get(key)); } tv1.setText(resultBuffer.toString()); }}
8.主布局
<LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="comqq.example.hasee.myapplication.MainActivity"> <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="400dp" /> <Button android:id="@+id/but1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="cc"/> <Button android:id="@+id/but2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="cc"/></LinearLayout>
9.要是还想在写文字转语言的话 只要在第二个buttton点击事件里面写下面代码
case R.id.but2: //实例化文字转语言对象 SpeechSynthesizer syn = SpeechSynthesizer.createSynthesizer(this, ini); // 清空参数 syn.setParameter(SpeechConstant.PARAMS,null); // 根据合成引擎设置相应参数 if(SpeechConstant.TYPE_CLOUD.equals(SpeechConstant.TYPE_CLOUD)){ syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置合成语速 syn.setParameter(SpeechConstant.SPEED, "50"); //设置合成音调 syn.setParameter(SpeechConstant.PITCH, "50"); //设置合成音量 syn.setParameter(SpeechConstant.VOLUME, "50"); }else { syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL); // 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。 syn.setParameter(SpeechConstant.VOICE_NAME, ""); /** * TODO 本地合成不设置语速、音调、音量,默认使用语记设置 * 开发者如需自定义参数,请参考在线合成参数设置 */ } //设置播放器音频流类型 syn.setParameter(SpeechConstant.STREAM_TYPE, "3"); // 设置播放合成音频打断音乐播放,默认为true syn.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true"); // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限 // 注:AUDIO_FORMAT参数语记需要更新版本才能生效 syn.setParameter(SpeechConstant.AUDIO_FORMAT, "wav"); syn.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav"); //这个就是获取到tv1控件上面的文字然后转成语言 syn.startSpeaking(tv1.getText().toString(), new SynthesizerListener() { @Override public void onSpeakBegin() { } @Override public void onBufferProgress(int i, int i1, int i2, String s) { } @Override public void onSpeakPaused() { } @Override public void onSpeakResumed() { } @Override public void onSpeakProgress(int i, int i1, int i2) { } @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }); break;
阅读全文
0 0
- 讯飞语音识别
- 讯飞语音识别
- android 讯飞语音识别的例子
- 讯飞语音语音识别辅助类
- Unity结合讯飞语音在线识别
- 讯飞语音在线识别快速接入
- 关于讯飞语音不能识别问题
- 讯飞语音识别配置笔记
- 讯飞语音识别SDK试用
- 讯飞语音识别和转写代码
- 项目集成讯飞语音识别
- 科大讯飞语音识别
- 科大讯飞语音识别
- 科大讯飞语音识别
- 科大讯飞语音识别 demo
- 详解科大讯飞语音识别
- android 语音识别 之 讯飞语音移植
- 用讯飞语音进行语音识别的一些问题
- 适配器模式
- 数据结构与算法分析-C语言描述 3.2
- 王百琛的期末总结
- 单链表(创建,增,删,查,改,打印,销毁链表)
- break和continue的区别
- 讯飞语音识别
- CDR X6设计师的福利,3折特惠!
- 如何选择一个好的B2B2C三级分销系统
- c++学习结构
- 371. Sum of Two Integers
- vue学习总结1
- Vue axios
- 3-1 Point类的构造函数
- More than one file was found with OS independent path