安卓Android科大讯飞语音识别代码使用详解

简介: 科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务。科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表结果集的方式获取数据。

科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务。科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表结果集的方式获取数据。 
这个语音识别需要在官网申请APPID

本博来自:http://blog.csdn.net/zhaocundang 小波LinuxQQ463431476

测试:

这里写图片描述

这里写图片描述

自己项目采用了科大讯飞语音识别服务,报告中是这样解释的:

语音Service服务代码设计

(1)要想写好Service代码,必须了解Service的生命周期.

(2)首先启动Service服务的方法是: 
getActivity().startService(new Intent(getActivity(),VoiceService.class)); 
停止Service服务: 
getActivity().stopService(new Intent(getActivity(),VoiceService.class)); 
(3)将类继承与Service: 
public class VoiceService extends Service{ 
} 
自动重载OnBind()函数,通过OnBind()的返回值,将Service的实例返回调用者。 
(3) 调用科大讯飞语音API接口代码 
先调用手机麦克风录音: 
rd.setSampleRate(RATE.rate16k); 
调用语音API包中的语音识别对话框,将录音发送到服务器,并接受服务器返回的结果,将数据以链表数据结构的形式传过来,获取结果: 
final StringBuilder sb = new StringBuilder(); 
rd.setListener(new RecognizerDialogListener() { 
public void onResults(ArrayList result, boolean isLast) { 
for (RecognizerResult recognizerResult : result) { 
sb.append(recognizerResult.text); 
} 
} 
public void onEnd(SpeechError error) { 
} 
}); 
(4)文本语音朗读的调用: 
先是声明播放对象: 
private static SynthesizerPlayer player ; 
这里我直接封装一个朗读函数,appid是申请的应用授权id,代码如下: 
public void speak(String words){ 
player = SynthesizerPlayer.createSynthesizerPlayer(getActivity(),”appid=57527406”); 
player.playText(words, null,null); //播放文本 
}

主要的代码:

开启和关闭服务:


public void onClick(View v) {
        // TODO Auto-generated method stub
       switch(v.getId()){ case R.id.button1: getActivity().startService(new Intent(getActivity(),VoiceService.class)); break; case R.id.button2: getActivity().stopService(new Intent(getActivity(),VoiceService.class)); break; } } 

服务中:

package zcd.voice;

import java.util.ArrayList;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder; import android.view.WindowManager; import android.widget.Toast; import com.iflytek.speech.RecognizerResult; import com.iflytek.speech.SpeechConfig.RATE; import com.iflytek.speech.SpeechError; import com.iflytek.ui.RecognizerDialog; import com.iflytek.ui.RecognizerDialogListener; public class VoiceService extends Service{ private RecognizerDialog rd; private String text; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); // Toast.makeText(this, "Service onCreated", Toast.LENGTH_LONG).show(); rd = new RecognizerDialog(this ,"appid=57627d9c"); } public void onStart(Intent intent, int startId) { // Toast.makeText(this, " Service onStart", Toast.LENGTH_LONG).show(); showReconigizerDialog(); } private void showReconigizerDialog() { //sms 简单语音识别文本 rd.setEngine("sms", null, null); //设置麦克风采样频率 rd.setSampleRate(RATE.rate16k); final StringBuilder re = new StringBuilder(); //设置识别后的回调结果 rd.setListener(new RecognizerDialogListener() { @Override public void onResults(ArrayList<RecognizerResult> result, boolean isLast) { for (RecognizerResult recognizerResult : result) { re.append(recognizerResult.text); } } @Override public void onEnd(SpeechError error) { //识别完成 //R.id.txt_result.setText(sb.toString()); text = re.toString(); Toast.makeText(VoiceService.this,re.toString(), Toast.LENGTH_LONG).show(); sendmsg(); } }); //txt_result.setText(""); //先设置为空,等识别完成后设置内容 rd.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); // service 中getwindowmanager 设置优先级显示对话框 rd.show(); } public void sendmsg() { //broadcast // service 通过广播来发送识别结果到Voice Fragment Intent intent=new Intent(); intent.putExtra("message",text); intent.setAction("zcd.voice"); sendBroadcast(intent); } } 

Service中是无法显示对话框的,显示对话框的方式就是使用getwindow的方法,设置窗口最高优先级即可了!

相关实践学习
一键创建和部署高分电影推荐语音技能
本场景使用天猫精灵技能应用平台提供的技能模板,在2-5分钟内,创建一个好玩的高分电影推荐技能,使用模板后无须代码开发,系统自动配置意图、实体等,新手0基础也可体验创建技能的乐趣。
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
1月前
|
Ubuntu 网络协议 Java
【Android平板编程】远程Ubuntu服务器code-server编程写代码
【Android平板编程】远程Ubuntu服务器code-server编程写代码
|
3月前
|
Linux 调度 Android开发
【系统启动】Kernel怎么跳转到Android:linux与安卓的交界
【系统启动】Kernel怎么跳转到Android:linux与安卓的交界
49 0
|
18天前
|
监控 API Android开发
构建高效安卓应用:探究Android 12中的新特性与性能优化
【4月更文挑战第8天】 在本文中,我们将深入探讨Android 12版本引入的几项关键技术及其对安卓应用性能提升的影响。不同于通常的功能介绍,我们专注于实际应用场景下的性能调优实践,以及开发者如何利用这些新特性来提高应用的响应速度和用户体验。文章将通过分析内存管理、应用启动时间、以及新的API等方面,为读者提供具体的技术实现路径和代码示例。
|
2月前
|
Ubuntu 网络协议 Linux
【Linux】Android平板上远程连接Ubuntu服务器code-server进行代码开发
【Linux】Android平板上远程连接Ubuntu服务器code-server进行代码开发
57 0
|
3月前
|
Android开发 容器
Android安卓gravity和layout_gravity的区别
Android安卓gravity和layout_gravity的区别
46 2
|
3月前
|
XML Android开发 数据格式
Android安卓 match_parent与match_parent区别
Android安卓 match_parent与match_parent区别
32 0
|
3月前
|
算法 Java 定位技术
Android 安卓益智休闲源码
Android 安卓益智休闲源码
37 1
|
3月前
|
安全 算法 JavaScript
安卓逆向 -- 关键代码定位与分析技术
安卓逆向 -- 关键代码定位与分析技术
43 0
|
3月前
|
安全 Android开发 数据安全/隐私保护
代码安全之代码混淆及加固(Android)
代码安全之代码混淆及加固(Android)
42 0
|
3月前
|
Linux 调度 Android开发
Kernel怎么跳转到Android:linux与安卓的交界
Kernel怎么跳转到Android:linux与安卓的交界
36 0