讯飞语音
来源:互联网 发布:手机淘宝如何改身份证 编辑:程序博客网 时间:2024/04/27 18:17
1.首先在讯飞开放平台注册账号
http://www.xfyun.cn/?ch=bdtg
2.在控制台添加应用 获得APPID
在项目build.gradle文件的android{}内,配置下面一段代码,同步一下gradle文件
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
在项目build.gradle文件的android{}内,配置下面一段代码,同步一下gradle文件
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
权限<!--连接网络权限,用于执行云端语音能力 --><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.CAMERA" />public class App extends Application { @Override public void onCreate() { super.onCreate();// 将“12345678”替换成您申请的APPID,申请地址:http://open.voicecloud.cn SpeechUtility.createUtility(this, SpeechConstant.APPID +"=59f853e3"); }}public class MainActivity extends AppCompatActivity { //全局变量 private StringBuilder mStringBuilder; private EditText edit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 edit = (EditText) findViewById(R.id.edit); } //语音听写 public void discern(View view){ btnVoice(); } //TODO 开始说话: private void btnVoice() { RecognizerDialog dialog = new RecognizerDialog(this,null); dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); dialog.setParameter(SpeechConstant.ACCENT, "mandarin"); dialog.setListener(new RecognizerDialogListener() { @Override public void onResult(RecognizerResult recognizerResult, boolean b) { printResult(recognizerResult); } @Override public void onError(SpeechError speechError) { } }); dialog.show(); Toast.makeText(this, "请开始说话", Toast.LENGTH_SHORT).show(); } //回调结果: private void printResult(RecognizerResult results) { String text = parseIatResult(results.getResultString()); // 自动填写地址 edit.append(text); } 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(); } //语音合成 public void compound(View view){ String s = edit.getText().toString(); show(s); } public void show(String result) { //1.创建 SpeechSynthesizer 对象, 第二个参数:本地合成时传 InitListener SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null); //2.合成参数设置,详见《MSC Reference Manual》SpeechSynthesizer 类 // 设置发音人(更多在线发音人,用户可参见 附录13.2 mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置发音人 mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速 mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围 0~100 mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端,这些功能用到了讯飞服务器,所以要有网络 //设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm” //保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限 //仅支持保存为 pcm 和 wav 格式,如果不需要保存合成音频,注释该行代码 // mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm"); // 3.开始合成,第一个参数就是转换成声音的文字,自定义,第二个参数就是合成监听器对象,我们不需要对声音有什么特殊处理,就传null mTts.startSpeaking(result, null); } private String parseData(String resultString) { //创建gson对象.记得要关联一下gson.jar包,方可以使用 Gson gson = new Gson(); //参数1 String类型的json数据 参数2.存放json数据对应的bean类 XFBean xfBean = gson.fromJson(resultString,XFBean.class); //创建集合,用来存放bean类里的对象 ArrayList<XFBean.WS> ws = xfBean.ws; //创建一个容器,用来存放从每个集合里拿到的数据,使用StringBUndle效率高 StringBuilder stringBuilder = new StringBuilder(); for (XFBean.WS w : ws) { String text = w.cw.get(0).w; stringBuilder.append(text); } //把容器内的数据转换为字符串返回出去 return stringBuilder.toString(); }}public class XFBean { public ArrayList<WS> ws; public class WS{ public ArrayList<CW> cw; } public class CW{ public String w; }}<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="discern" android:text="语音识别"/><Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="compound" android:text="语音合成"/><EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit"/>
阅读全文
0 0
- 讯飞语音
- 讯飞语音
- 讯飞语音
- 讯飞语音唤醒
- 讯飞语音识别
- 讯飞语音集成
- 讯飞语音
- 讯飞语音
- 讯飞语音
- 讯飞语音
- 讯飞语音识别
- 讯飞语音TTS10111错误
- 讯飞语音使用笔记
- 讯飞语音唤醒技术
- Android 讯飞语音合成
- 讯飞语音听写常见问题
- 讯飞语音合成方案
- 讯飞语音合成问题
- #CCF准备一年日常刷题#201703-1 分蛋糕
- HTML的了解
- ccf-2017091-打酱油
- C模块化编程总结
- LintCode 栅栏染色
- 讯飞语音
- 支配树学习笔记
- BZOJ 1969: [Ahoi2005]LANE 航线规划
- apt-get update 和 upgrade 的区别
- Python学习笔记——函数式方程
- HDU 5575 Discover Water Tank(并查集+左偏树/启发式合并)
- 2017年迄今最新人工智能资源盘点
- Dll和lib笔记
- 浮动 透明 定位 表单