写的第一篇博客,因为最近姐姐说起了一个段子, 一男子在地铁站手机找不到了,但是带了蓝牙耳机,耳机还有内容,男子想手机一定还在附近,随即大喊一句,悟空你在哪儿, 手机循环回答,我在这.....这时,拿手机那哥们回了男子一个尴尬而不失礼貌的微笑,哈哈

所以我想起讯飞语音,就试着写了一下语音唤醒的Demo, 也借鉴了很多前辈的博客, 就不一一列举了,各位不喜勿喷

接下来进入正题,首先在讯飞官网下载对应的SDK, 下载之前需要开通服务,如图

Step1: 进入讯飞开放平台

进入后点击立即开通

Step2: 创建应用开通服务

Step3: 应用可享受3个装机量,5个唤醒词, 35天试用,需要用到的就是提供的APPID

Step4: 进来服务管理后, 输入5个唤醒词,生成体验包

Step5: 下载体验包,注意,每个唤醒词不一样,服务不一样,生成的SDK里的资源是不一样的

下载完后的目录是这样

libs下是要用到的jar包和各个平台的so文件,直接放入项目的libs目录

res目录下的为对应APPID生成的资源文件,把里面的东西放入项目的assets目录下

sample中是官方提供的Demo,其实还是比较全面的

其他几个txt大家可以自己看一下,是一些版本更新日志,wordlist是你的关键词

Step6:

在工程 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"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<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" />

注意:如需在打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码:

-keep class com.iflytek.**{*;}
-keepattributes Signature

Step7: 初始化, 可以放在Application或Activity的onCreate()中初始化(请勿在字符串加各种字符)

SpeechUtility.createUtility(this, SpeechConstant.APPID + "=你的appid");

还有其他可以设置的参数

createUtility方法的第二个参数为传入的初始化参数列表,可配置的参数如下:

参数 说明 必填
appid 8位16进制数字字符串,应用的唯一标识,与下载的SDK一一对应。
usr 开发者在云平台上注册的账号。
pwd 账号对应的密码,与账号同时存在。
engine_mode 引擎模式,可选值为:msc:只使用MSC的能力;plus:只使用语记能力;auto:云端使用MSC,本地使用语记;默认取值为auto。注:使用MSC本地功能的请设置为msc。
force_login 在createUtility时会对进程名称进行检查,如果名称与应用包名不一致则不进行login操作,返回null,用以规避在子进程反复进行调用的问题。此参数设置是否强制login。默认值:false (进行检查,不强制login)。
lib_name 在createUtility时会加载动态库,此时可以传入动态库名称。例如:libmsc_xxx_1072.so(xxx为您的公司名,1072为科大讯飞sdk版本号), 默认值:msc。注:如您是预装软件,为了避免动态库冲突建议修改名称。

注意:参数需要以键值对的形式存储在字符串中传入createUtility方法,以逗号隔开,如“appid=12345678,usr=iflytekcloud,pwd=123456”。

Step8: 工具类

import org.json.JSONException;
import org.json.JSONObject;import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.VoiceWakeuper;
import com.iflytek.cloud.WakeuperListener;
import com.iflytek.cloud.WakeuperResult;
import com.iflytek.cloud.util.ResourceUtil;
import com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE;import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;/*** Created by Administrator on 2018/2/28.* 讯飞语音唤醒*/public abstract class WakeUpUtil {/*** 唤醒的回调*/public abstract void wakeUp();// Log标签private static final String TAG = "WakeUpUtil";// 上下文private Context mContext;// 语音唤醒对象private VoiceWakeuper mIvw;private int curThresh = 40;public WakeUpUtil(Context context) {mContext = context;// 初始化唤醒对象mIvw = VoiceWakeuper.createWakeuper(context, null);}/*** 获取唤醒词功能** @return 返回文件位置*/private String getResource() {final String resPath = ResourceUtil.generateResourcePath(mContext,RESOURCE_TYPE.assets, "ivw/" + mContext.getString(R.string.IflytekAPP_id) + ".jet");return resPath;}/*** 唤醒*/public void wake() {// 非空判断,防止因空指针使程序崩溃mIvw = VoiceWakeuper.getWakeuper();if (mIvw != null) {// textView.setText(resultString);// 清空参数mIvw.setParameter(SpeechConstant.PARAMS, null);// 设置唤醒资源路径mIvw.setParameter(SpeechConstant.IVW_RES_PATH, getResource());// 唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:" + curThresh);// 设置唤醒模式mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup");// 设置持续进行唤醒mIvw.setParameter(SpeechConstant.KEEP_ALIVE, "1");mIvw.startListening(mWakeuperListener);} else {Toast.makeText(mContext, "唤醒未初始化", Toast.LENGTH_SHORT).show();}}public void stopWake() {mIvw = VoiceWakeuper.getWakeuper();if (mIvw != null) {mIvw.stopListening();} else {Toast.makeText(mContext, "唤醒未初始化", Toast.LENGTH_SHORT).show();}}String resultString = "";private WakeuperListener mWakeuperListener = new WakeuperListener() {@Overridepublic void onResult(WakeuperResult result) {try {String text = result.getResultString();JSONObject object;object = new JSONObject(text);StringBuffer buffer = new StringBuffer();buffer.append("【RAW】 " + text);buffer.append("\n");buffer.append("【操作类型】" + object.optString("sst"));buffer.append("\n");buffer.append("【唤醒词id】" + object.optString("id"));buffer.append("\n");buffer.append("【得分】" + object.optString("score"));buffer.append("\n");buffer.append("【前端点】" + object.optString("bos"));buffer.append("\n");buffer.append("【尾端点】" + object.optString("eos"));resultString = buffer.toString();stopWake();wakeUp();} catch (JSONException e) {resultString = "结果解析出错";e.printStackTrace();}}@Overridepublic void onError(SpeechError error) {Log.i(TAG, error.getPlainDescription(true));}@Overridepublic void onBeginOfSpeech() {Log.i(TAG, "开始说话");}@Overridepublic void onEvent(int eventType, int isLast, int arg2, Bundle obj) {}@Overridepublic void onVolumeChanged(int i) {}};}

Step9: 测试类

public class MainActivity extends AppCompatActivity {private TextView mTvLog;private WakeUpUtil wakeUpUtil;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SpeechUtility.createUtility(this, SpeechConstant.APPID + "=" +getString(R.string.IflytekAPP_id));mTvLog = (TextView) findViewById(R.id.tv_log);mTvLog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 开启唤醒wakeUpUtil.wake();}});wakeUpUtil = new WakeUpUtil(this) {@Overridepublic void wakeUp() {Toast.makeText(MainActivity.this, "唤醒成功", Toast.LENGTH_SHORT).show();// 开启唤醒wakeUpUtil.wake();}};}
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="#000"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FF000000"android:gravity="center"android:padding="10dp"android:text="唤醒词:你好悟空, 悟空你好, 悟空出来"android:textColor="#FFFFFFFF"android:textSize="20dp" /><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#FFFFFFFF" /><TextViewandroid:id="@+id/tv_log"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FF000000"android:gravity="center"android:padding="10dp"android:text="点击开始唤醒"android:textColor="#FFFFFFFF"android:textSize="10dp" /><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#FFFFFFFF" /></LinearLayout>

结果展示:

讯飞语音--唤醒Demo相关推荐

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

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

  2. 讯飞语音唤醒SDK集成流程

    唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q48788 ...

  3. 讯飞语音唤醒、识别、合成

    文章目录 讯飞SDK的使用 官网SDK所提供的的文件 官网Demo的使用 自己新建工程导包步骤 语音唤醒 语音识别 在线语音合成 讯飞SDK的使用 Demo链接: 语音唤醒 [link] (https ...

  4. IOS 集成讯飞语音唤醒+语音识别,实现语音控制效果

    前言 最近项目上需要实现语音调度,一开始是想用苹果原生speech Framework框架的,但是网上找了很久都没有原生实现语音唤醒功能的栗子,到时有不少百度,讯飞的语音唤醒,语音识别的栗子,不过都是 ...

  5. 讯飞语音唤醒和语义识别同时使用,错误代码20006的解决方法

    今天测试了一下语音唤醒和语义识别,在我Android5.1的手机上用着好好的,换了一台Android6.0的设备就不能用了,报了一个20006的错误,这个错误的官方解释是"录音失败没有录音权 ...

  6. android 讯飞语音评测,讯飞语音评测demo

    英文测评 class IseRecorder { constructor({ language, accent, appId } = {}) { let self = this this.status ...

  7. 研究讯飞语音 demo,下载跑跑

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53401000 未经博主允许不得转载. 博主地址是:http://blog.csd ...

  8. 讯飞语音转文字 PHP demo

    讯飞语音转文字PHP tp6 demo 讯飞官网没有PHP demo我是很诧异的 改成了我需要的tp6 demo 讯飞官网没有PHP demo我是很诧异的 我php天下第一就这么没牌面吗 网上找了很久 ...

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

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

最新文章

  1. windows服务安装
  2. (4)段描述符P,G位
  3. java16下载_java lombok下载
  4. 使用JUnit的ExpectedException和@Rule测试自定义异常
  5. hdu 1698 Just a Hook(线段树区间修改)
  6. 【SCIR笔记】ACL20 让模型“事半功倍”,探究少样本序列标注方法
  7. 金蝶K3老单新增自定义菜单按钮
  8. 22.TCP/IP 详解卷1 --- TCP 的坚持定时器
  9. OpenOffice java api UNO 教程
  10. 解决阿里云FTP 227 Entering Passive Mode
  11. 三个数相减的平方公式_小学二年级数学34个必考公式以及重难点解析
  12. GPLv2许可证正经人话翻译
  13. python 两点曲线_Python自学教程| 3万字详解每个重要知识点(内附视频)
  14. 图书管理系统 jsp + servlet + mysql (2023)
  15. CSS样式属性margin,padding详解
  16. 毕业设计 stm32的人体健康状态检测系统(项目开源)
  17. pycharm专业版许可证申请(特定人群)
  18. 洛谷P1085——不高兴的津津(c++)
  19. 。系统美化 ① FAQ
  20. Linux驱动加载实例

热门文章

  1. 使用YQL解决跨域请求json转jsonp问题
  2. android otg读写文件,Android USB Host在USB设备OTG中读/写文件
  3. DELL Inspiron_620/620s网卡驱动
  4. 激励反向传播的自上而下注意力神经模型
  5. ftp连接服务器失败:响应:220-FileZilla Server version 0.9.24 beta 响应:220-written by Tim Kosse (Tim.Kosse@gmx.d
  6. LSF_安装(UNIX or Linux)
  7. switch()语句中,default,break关键字作用,以及贯穿问题
  8. undefined symbol nvic 报错 undefined symbol TIM_Cmd报错
  9. 简易记账开发笔记之Fragment(后续)
  10. 经验分享:《节奏大师》UI优化历程