前段时间火了一个很牛的讯飞语音,去看官方文档,瞬间蒙逼,官方是用的eclipse,我用的Android Studio。好了,能上代码尽量不BB。 先来看看gradle里面要配置的东西。

module里面:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'com.jakewharton.butterknife'
复制代码

添加butterknife,然后再来看看

dependencies里面要写的:

compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
compile files('libs/Msc.jar')
compile files('libs/Sunflower.jar')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.code.gson:gson:2.7'
复制代码

添加了butterknife的包,并apt,然后呢,就要把官方要的包给放进去,没错,就是Msc.jar和Sunflower.jar,并把gson给弄进去,说到gson解析,那是没的说,好用。

Project的gradle里面的dependencies:

classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
复制代码

到这里,还不算结束,因为还有so文件,将项目换成Project Files展示方式,找到app-->src-->main,新建jniLibs,记得L要大写,然后把东西放进去。嗯,对,就像这样:

不要问我为什么文件都是红色,本来想传git,结果不会弄。。。 到这里,项目需要的包就弄完了。下面来看看manifest里面需要添加的权限

AndroidManifest.xml

    <!--连接网络权限,用于执行云端语音能力 --><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" />
复制代码

来来来,看看他的返回结果然后来写我们的bean

可以看到,一共3个list,我。。。还是先写最里面的吧。记得Getter and Setter啊 另外,变量的名字要和他返回的相同,便于gson解析。

TalkBackChineseWordVo

    // word,单字private String w;// score,分数private int sc;
复制代码

TalkBackWordsVo

    // begin,开始private int bg;// chinese word,中文分词private List<TalkBackChineseWordVo> cw;
复制代码

TalkBackVo

     // sentence,第几句private int sn;// last sentence,是否最后一句private boolean ls;// begin,开始private int bg;// end,结束private int ed;// words,词private List<TalkBackWordsVo> ws;
复制代码

在Activity中声明:

//语音合成器
private SpeechSynthesizer mSynthesizer;
复制代码

onCreate中: APPID是自己申请的,直接把12345678替换成申请好的ID

//语音初始化,在使用应用使用时需要初始化一次就好,如果没有这句会出现10111初始化失败
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=12345678");
//处理语音合成关键类
mSynthesizer = SpeechSynthesizer.createSynthesizer(this, mInitListener);
复制代码

mInitListener

    private InitListener mInitListener = new InitListener() {@Overridepublic void onInit(int code) {Log.e("tag", "initListener init code = " + code);}};复制代码

初始化成功就会打印tag: initListener init code = 0,不要问我为什么,因为成功状态的code就是0,哈哈哈哈。 接下来,看下语音播报

                //设置发音人mSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置音调mSynthesizer.setParameter(SpeechConstant.PITCH, "50");//设置音量mSynthesizer.setParameter(SpeechConstant.VOLUME, "50");int code;code = mSynthesizer.startSpeaking("你想要我说什么?", mTtsListener);Log.e("tag", "mSynthesizer start code = " + code);
复制代码

发音人还有很多选项,大家可参照官方文档中的发音人列表选择自己喜欢的。 startSpeaking方法的第一个参数就是播报的内容。

mTtsListender代码如下: 里面的方法,一猜名字就看懂了的,我就不贴出来咯

    //语音合成器listenerprivate SynthesizerListener mTtsListener = new SynthesizerListener() {// 方法未贴出,完整方法有onSpeakBegin,onBufferProgress,onSpeakPaused,onSpeakResumed,onSpeakProgress,onCompleted,onEvent};
复制代码

接下来就是语音识别了,官方给出的是用dialog来实现,方法已经封装好了,我们就先来搞一搞。 语音识别dialog

                //语音识别dialogRecognizerDialog mDialog = new RecognizerDialog(this, mInitListener);//设置accent、language等参数mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");mDialog.setListener(mRecognizerDialogListerer);mDialog.show();复制代码

诶,敲黑板啦,重点来了:


看这名字也知道,识别器的监听嘛,哈哈。

private RecognizerDialogListener mRecognizerDialogListerer = new RecognizerDialogListener() {@Overridepublic void onResult(RecognizerResult recognizerResult, boolean isLast) {}@Overridepublic void onError(SpeechError speechError) {}
};
复制代码

其中,onResult方法中,是重点,这时候会把识别结果返回给我们,期间可能会多次调用此方法。 recognizerResult就是返回的结果,isLast即判断是否是返回结果的最后一条 记得声明gson和list

private static Gson gson = new Gson();
private List<TalkBackVo> talkBackVoList;
复制代码

下面来看看怎么去获取最终的返回结果。

String jsonStr = new String(recognizerResult.getResultString());
//此处type中写TalkBackVo。
Type type = new TypeToken<TalkBackVo>() {}.getType();
TalkBackVo talkBackVo = gson.fromJson(jsonStr, type);
talkBackVoList.add(talkBackVo);//将此vo添加到我们的list中
String finalStr = "";//识别的最终结果
//当是最后一句话时,才执行拼接字段操作
if (isLast) {for (int i = 0; i < talkBackVoList.size(); i++) {for (int j = 0; j < talkBackVoList.get(i).getWs().size(); j++) {for (int k = 0; k < talkBackVoList.get(i).getWs().get(j).getCw().size(); k++) {finalStr = finalStr + talkBackVoList.get(i).getWs().get(j).getCw().get(k).getW();}}}
}
复制代码

gson会自动根据key去把value设置进去,省去手动解析的大半时间。

一定要最后一条的时候才去拼接。但是不知道为什么,我说“英雄联盟”的时候,他先给我返回一条“英雄”和“联盟”,然后再是一条“。”是的,只有一个句号。不过拼接出来就是完整的“英雄联盟。”

好了,我的装逼到此结束,谢谢各位。demo中还有开启悬浮框的代码,还有不用dialog语音识别的代码段,买一赠N,哈哈哈,良心商家。

讯飞开发平台:http://www.xfyun.cn/doccenter/awd demo地址:http://download.csdn.net/detail/u013806766/9668792


2016年11月1日更新,搞定github了,请各位审阅,以后如有更新,均在github。

github地址:https://github.com/SimbaLiu/VCApp

转载于:https://juejin.im/post/5a313cda6fb9a0452a3c5401

Android 讯飞语音开发(Android Studio)相关推荐

  1. Android 讯飞语音开发

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前段时间火了一个很牛的讯飞语音,去看官方文档,瞬间蒙逼,官方是用的eclipse,我用的Android Studio.好了,能上代 ...

  2. 讯飞社区android 源码,android 讯飞语音 demo

    [实例简介] android 讯飞语音 demo 博客地址:http://blog.csdn.net/chenshufei2/article/details/8496905 [实例截图] [核心代码] ...

  3. Android讯飞语音云语音听写学习

    讯飞语音云语音听写学习 这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google".但种种原因, ...

  4. android 讯飞语音 提示组件未安装,讯飞语音听写API 未安装组件 错误码21001

    在使用讯飞语音听写时,使用云端听写而不是使用本地出现这个未安装组件错误那可能就是so文件没有成功导入.文档中都是ADT环境的配置,在AndroidStudio中jar包等都和ADT差别不大,但是SO文 ...

  5. Android——讯飞语音唤醒简介及实现

    前段时间写了一个关于百度语音唤醒文章,最近有做了一个讯飞语音的应用,在这里把学习的资料整理一下. 唤醒的整个过程如下: (图源自讯飞官网) 讯飞的语音唤醒功能实现起来挺方便的(相比百度,百度语音And ...

  6. Android讯飞语音集成【语音评测3】

    前言: 语音评测(SpeechEvaluator): 通过智能语音技术自动对发音水平进行评价.发音错误.缺陷进行定位和问题分析.目前评音评测提供汉语.英语两种语言的评测,支持单字(汉语专有).词语 和 ...

  7. Android讯飞语音播报新闻

    1:讯飞开放平台注册登录:https://www.xfyun.cn/?ch=bdtg 2: 3:创建新应用获取APPID值 4:注册好就可以直接在项目中使用appid值 5:将下载的sdk中libs文 ...

  8. Android讯飞语音集成【在线语音合成2】

    前言: 语音合成: 与语音听写相反,语音合成是将一段文字转换为语音,可根据需要合成出不同音色.语速和语调的声音,让机器像人一样开口说话 效果图: 2.直接上代码,配置不再重复说明了: ①.TTSAct ...

  9. android 讯飞语音评测,非同凡响的语音输入法——讯飞Android输入法评测

    Android平台上的输入法实在是多得数不过来了,除了谷歌官方的输入法,还有老牌的搜狗等输入法以及后来的百度输入法等同样也在移动平台上大放异彩,可以说,如果再有人去开发输入法,如果不做出点差异化,那么 ...

最新文章

  1. XP与Windows 7(Win7)等操作系统Ghost备份
  2. java多态替换switch_使多态性无法解决那些switch / case语句的麻烦
  3. c++ :MFC 如何遍历窗口同类型控件ID
  4. 【LeetCode】617. 合并二叉树
  5. i386和X86各是什么意思
  6. Mingw编译DLib
  7. ueditor使用-图片上传正常,图片显示异常404
  8. Day05-循环和列表字符串、元组和字典
  9. java cropper 上传_java web 网站头像上传处理 (springmvc +bootstrap+cropper)
  10. 大数据系统如何提供抗击疫情信息
  11. rust哪里油桶多_我们在说Filecoin的时候为什么要说rust语言
  12. 对WORD文档的关键字搜索
  13. 解决使用sharding-jdbc-spring-boot-starter 造成SQLFeatureNotSupportedException: isValid的问题
  14. android barchart设置标题,android - 如何设置MPAndroidChart BarChart的高度和宽度? - 堆栈内存溢出...
  15. widows常用命令
  16. linux界面安装weblogic12c,Linux安装WebLogic12c
  17. QT-Linux安装
  18. Simulink 3D Animation的使用(V_realm builder2.0)
  19. 苹果备忘录显示无法连接服务器失败,备忘录帮助
  20. 垂直摄影——pix4d 4.4.10软件(附软件安装包)

热门文章

  1. 利用python编写一个pc模拟器明日方舟脚本_明日方舟脚本1.0(python\adb\cv2)
  2. C编译成其他语言,编程达人 所有的编程语言最后会编译成C,再编译成汇编,最后落实到硬件操作上吗?...
  3. android智能手机排行,智能手机性价比排行2015前十名-2015全球安卓智能手机性能排名...
  4. 我眼中的爱情----浅谈垃圾回收(转)
  5. 使用脚本记录 macbook 电池容量
  6. 华为OD机试 - 上班之路(Java JS Python)
  7. 那些激情排队的果粉们
  8. excel工作表标签颜色设置方法
  9. SpringMVC--Spring家族中关于MVC的Web框架
  10. 【Adobe Illustrator 教程】2. 认识矩形工具并绘制一些马赛克图案