关键词:
讯飞的语音sdk是需要申请的,地址是:http://dev.voicecloud.cn/developer.php?vt=1 。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。
申请之后经过审核通过,会得到一个appid,这个是在使用语音服务时需要用到的。(笔者感觉申请还是比较容易通过的,简单地填写一下就通过了。速度也很快,我在晚上十一点多申请的,到第二天早上九点多就收到审核通过的邮件。个人感觉这个审核只是为了防止恶意使用,毕竟语音服务是要使用讯飞的服务器资源的。)
申请到appid之后就可以下载SDK了,然后使用语音服务了。
以下我试用的过程,(点击button,弹出语音框,说完之后将识别的结果显示在EditText中):
- 在eclipse里新建一个android工程
- 导入讯飞的语音jar包
- 讯飞的服务是需要一堆权限的,在manifest.xml中加入
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <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" />
- 在main.xml中添加一个EditText和一个Button,如下
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <EditText
- android:id="@+id/editText"
- android:layout_width="fill_parent"
- android:layout_height="300dp"
- android:gravity="top"
- android:inputType="textMultiLine" >
- <requestFocus />
- </EditText>
- <Button
- android:id="@+id/button_start"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="点击开始说话" />
- </LinearLayout>
- 然后在MainActivity中编写代码实现了
(这里可以看到在线的文档:http://dev.voicecloud.cn/developer.php?category=YW5kcm9pZA%3D%3D&column=ZG9jdW1lbnQ%3D&type=d2lkZ2V0)
通过阅读讯飞给的文档,可以发现标准的识别控件是RecognizerDialog——是一个Dialog的子类,所以我们是可以在Activity中通过showDialog(int)方法来调用它的。
重写Activity的方法
- @Override
- protected Dialog onCreateDialog(int id) {}
在其中创建并设置好一个RecognizerDialog即可。
创建RecognizerDialog方法为
- RecognizerDialog recognizerDialog = new RecognizerDialog(
- MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
(其中appid应该写自己从讯飞申请到的appid,由于协议的问题,我不便把自己申请的id公开,所以这里用了1234567来代替。根据讯飞的说明,非法的appid是不能使用语音服务的,但是我用随机数字试验了一下,居然也是能用的,不知道是不是BUG。)
官方的文档:
然后需要设置识别参数
- recognizerDialog.setEngine("sms", null, null);
第一个参数“sms”表示为请求的服务为“语音识别”。后两个参数暂时设为null就好。
官方文档:
最后还需给recognizerDialog设置一个listener,回调接口用以获取结果,
recognizerDialog.setListener(RecognizerDialogListener listener)的参数为RecognizerDialogListener接口,实现此接口要重写两个方法:onResults(ArrayList results,boolean isLast)和onEnd(SpeechError error)。用以获取和处理结果。
我的实现为直接写了一个匿名类:
- recognizerDialog.setListener(new RecognizerDialogListener() {
- @Override
- public void onResults(ArrayList<RecognizerResult> results,
- boolean arg1) {
- StringBuffer result = new StringBuffer();
- for (RecognizerResult r : results) {
- result.append(r.text);
- }
- editText.setText(result.toString());
- }
- @Override
- public void onEnd(SpeechError arg0) {
- }
- });
然后将此RecognizerDialog返回即可。
完整的MainActivity代码:
- import com.iflytek.speech.RecognizerResult;
- import com.iflytek.speech.SpeechError;
- import com.iflytek.ui.RecognizerDialog;
- import com.iflytek.ui.RecognizerDialogListener;
- public class MainActivity extends Activity {
- EditText editText = null;
- Button startButton = null;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- editText = (EditText) findViewById(R.id.editText);
- startButton = (Button) findViewById(R.id.button_start);
- startButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- showDialog(1);
- }
- });
- }
- @Override
- protected Dialog onCreateDialog(int id) {
- RecognizerDialog recognizerDialog = new RecognizerDialog(
- MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
- recognizerDialog.setEngine("sms", null, null);
- recognizerDialog.setListener(new RecognizerDialogListener() {
- @Override
- public void onResults(ArrayList<RecognizerResult> results,
- boolean arg1) {
- StringBuffer result = new StringBuffer();
- for (RecognizerResult r : results) {
- result.append(r.text);
- }
- editText.setText(result.toString());
- }
- @Override
- public void onEnd(SpeechError arg0) {
- }
- });
- return recognizerDialog;
- }
- }
程序在真机运行截图,经过检验,科大讯飞的识别率还是很高的。
自然语言交流系统phxnet团队创新实训个人博客
下载emacs-23.1.tar.gz http://ftp.gnu.org/pub/gnu/emacs/emacs-23.1.tar.gz cd/opt //cpemacs-23.1.tar.gz/opt &nbs 查看详情
自然语言交流系统phxnet团队创新实训个人博客
在本项目中关于天空盒子的使用的配置方法: 给场景添加天空盒 第二种方式 在菜单栏中选择:Edit->RenderSetting,在保证不在选择场景中其它文件的前提下,Inspector面板中将显示RenderSetting属性,入下图 c... 查看详情
自然语言交流系统phxnet团队创新实训个人博客
今天想测试一下“庖丁”分词的效果,编写了一个测试小程序,从文件中读入文本,并将分词结果显示到控制台。 环境平台:Win7+eclipse 过程如下:1.编辑paoding-analysis.jar中的paoding-dic-home.properties文件,去掉“#paod... 查看详情
自然语言交流系统phxnet团队创新实训个人博客
讯飞的语音sdk是需要申请的,地址是:http://dev.voicecloud.cn/developer.php?vt=1 。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。申请之后经过审核通过,会得到一个appid,这个... 查看详情
自然语言交流系统phxnet团队创新实训个人博客
名思义是给游戏场景添加一个天空背景让游戏更加精美,更具有魅力添加天空盒有两种方式 1: 在当前相机上添加skybox 2: 在当前场景上添加skybox上面的两种方式的结果是一样的 第一种方式的优势在于如果世... 查看详情
自然语言交流系统phxnet团队创新实训个人博客(十三)
关于javasocket的一些总结: Java Socket通信有很多的时候需要我们不断的学习。方面效率虽然不及C与C++但它以灵活语言优势,为大家广为使用。 本文就对在使用java做通信方面程序时候应改注意问题做以说明。1.... 查看详情
团队博客——1
...晗我们四个人一组;选择的题目是“互联网+智能家居系统”。由于之前没有接触过物联网这种与硬件相结合的课题,所以要学习的有很多,有很多资料需要查任务也比较艰巨。“行动是成功的开始,等待是失败的源头&r... 查看详情
创新实训定期汇报5.11
经组内成员讨论,我们决定每周四和周日汇报个人学习进度和项目进展,汇报内容会在各自博客上更新。本博客仅做简单汇总。最近这段时间,组内成员在学习原SDUOJ的前端框架和Python爬虫基础,并且可以根据国内OJ进行初步的... 查看详情
codingsouls团队-个人博客
...完成相应的安装 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括A 查看详情
实训二--博客三
...小组,然后博主会和大家互动,共同探讨,解决问题。在团队精神的作用下,团队成员产生了互相关心、互相帮助的交互行为,显示出关心团队的责任感,并努力自觉地维护团队的集体荣誉。感谢老师这几个月的谆谆教诲,今后... 查看详情
山东大学软件学院2021年春季创新项目实训个人总结
...没有花多少时间思考和准备,直到队长给出seafile开发团队的github地址之后才上去作了简单浏览。开始研究seahub以及seafile-server的时候,我才发现,源代码的规模过于庞大,以至于我像是个误入迷宫的孩子,迷... 查看详情
转:高创新团队
...跨界的、跨职业的、跨行业的、跨学门的人聚在一起共同交流才会产生真正的头脑风暴, 查看详情
软工团队项目个人总结
...在开发我们的这款游戏的开始阶段,我们与校内很多同学交流了一下他们对这款游戏的看法,并与他们在线下对游戏进行试玩,然后他们也对我们提出了很多意见,包括有些时候觉得我们某些地方设置的太傻了,随机性太大,博... 查看详情
[课程设计]scrum多鱼点餐系统(团队交流日)
[课程设计]Scrum 多鱼点餐系统(团队交流日)1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint1时间:11.14-11.2... 查看详情
实训二---博客一
一、团队介绍1、队员学号:16012124于俊渤(组长)博客链接 http://www.cnblogs.com/yujunchun/ 16012113孙宁君 博客链接 http://www.cnblogs.com/snjsnjsnj/ 16012111周帅 ... 查看详情
团队信息
团队名称:不正经团队选题:《餐厅到店点餐系统》WEB版成员学号姓名个人博客地址个人Github地址团队博客地址 http://www.cnblogs.com/jjy520/团队Github地址 https://github.com/huangMP2014061114102杨晶晶 http://www.cnblogs.com/jjy520/&nb... 查看详情
团队成员的简介和个人博客地址,团队的源码仓库地址
1.团队成员的简介和个人博客地址,团队的源码仓库地址。组长:刘映华(201421122021)组员:郭和水(201421122017)兰运良(201421122030)刘映华:擅长的技术:Java编程的兴趣:web前端开发、java后台开发博客地址:http://www.cnblogs.com/... 查看详情
软件工程团队——“星辰”成立,个人博客登记(非团队博客)
...了一个面向开发结构更复杂、任务量更庞大的软件的制作团队,名字由小组成员一致决定为“星辰”,哦!对了还有我们的口号——“我们的目标是星辰大海”! 我现在先不介绍我的队友了,就 查看详情