public class VoiceWakeuper
extends com.iflytek.cloud.msc.module.SpeechInterface
唤醒包括:单唤醒,多唤醒,特定人唤醒,唤醒识别。见SpeechConstant.IVW_SST。
其中,特定人唤醒暂不支持。
1. 单唤醒:说出唤醒词,返回唤醒消息,其它情况无消息返回。
2. 多唤醒:用户说出预定的几个唤醒词中任意一个,给用户反馈唤醒,并区分由什么词唤醒。
3. 特定人唤醒:用户注册特定人唤醒词,用户说出特定人唤醒词时,给用户反馈唤醒。
特定人唤醒有一定声纹效果,注册用户的唤醒率较高,其他人的唤醒率较低。特定人唤醒
功能,需要先通过唤醒注册辅助资源
注册并生成特定人唤醒词资源。
可通过更新唤醒词把注册生成的新资源,与已有的资源合并。
在唤醒时,单唤醒、多唤醒和特定人唤醒使用基本一致,只需要通过setParameter(java.lang.String, java.lang.String)
设置资源路径 SpeechConstant.IVW_RES_PATH等参数后,
开始唤醒即可。
4. 唤醒识别:说出预定义的唤醒词接着识别词,引擎给出唤醒识别结果。
例如,“打电话给XXX”;其中“打电话给”是固定的,用唤醒引擎检测,是唤醒词;
“XXX”是人名,不固定,用识别引擎检测;当用户说出“打电话给XXX”时,引擎返
回唤醒识别结果。唤醒识别在开始识别前,需要设置
云端语法或
本地语法(视使用本地还是云端识别而定)。
由于唤醒开始后,会一直占用MIC(音频源为MIC时),
开发安卓手机的唤醒应用时,应该通过实现android.content.BroadcastReceiver#onReceive,
监听系统广播android.content.Intent#ACTION_SCREEN_ON,
在屏幕点亮时,通过cancel()取消会话;监听系统广播
android.content.Intent#ACTION_SCREEN_OFF,在屏幕锁住时,通过startListening(com.iflytek.cloud.WakeuperListener)
开启唤醒会话。这样在屏幕点亮时,使用其他应用就不会出现由于唤醒在占用MIC,而无法使用MIC的问题。
另外,由于唤醒一般在幕屏息灭时起作用,就要求集成唤醒功能时,应该作为服务android.app.Service,
运行在后台,避免由于系统清理应用,而导致唤醒不起作用的问题。
本类使用单例,调用者使用本类的对象,只需要通过createWakeuper(Context, com.iflytek.cloud.InitListener)创建
一次对象后,便可一直使用该对象,直到通过调用destroy()进行单例对象销毁。调
用者可通过getWakeuper()获取当前已经创建的单例。在销毁本类的单例对象后,
需要先通过createWakeuper(Context, com.iflytek.cloud.InitListener)再次创建单例对象,方可再使用。
在当前应用生命周期第一次使用本类的任何函数前,须先调用
SpeechUtility.createUtility(Context, java.lang.String)进行SDK初始化。
SpeechUtility.createUtility(Context, java.lang.String)| 限定符和类型 | 方法和说明 |
|---|---|
void |
cancel()
取消会话
通过此函数取消当前的会话。
|
static VoiceWakeuper |
createWakeuper(Context context,
InitListener listener)
创建单例对象
使用此函数创建一个本类单例对象。
|
boolean |
destroy()
销毁单例对象
通过本函数,销毁由
createWakeuper(Context, com.iflytek.cloud.InitListener)创建的单例对象。 |
java.lang.String |
getParameter(java.lang.String key)
获取参数
获取指定的参数的当前值。
|
static VoiceWakeuper |
getWakeuper()
获取单例对象
通过函数获取已创建的单例对象。
|
boolean |
isListening()
是否在会话中
通过此函数,获取当前SDK是否正在进行会话。
|
boolean |
setParameter(java.lang.String key,
java.lang.String value)
参数设置
可设置的参数有:
SpeechConstant.IVW_SST:唤醒类务类型;
SpeechConstant.IVW_THRESHOLD:唤醒门限值;
SpeechConstant.KEEP_ALIVE:持续唤醒;
SpeechConstant.IVW_SHOT_WORD:包含唤醒词;
SpeechConstant.IVW_ENROLL_RES_PATH:注册辅助资源路径;
SpeechConstant.IVW_ENROLL_DEST_PATH:注册生成资源目标路径;
SpeechConstant.IVW_ENROLL_TMIN:唤醒注册的最短语音时间;
SpeechConstant.IVW_ENROLL_TMAX:唤醒注册的最长语音时间;
SpeechConstant.IVW_VOL_CHECK:唤醒注册是否返回音量;
SpeechConstant.IVW_RES_PATH:唤醒资源路径;
SpeechConstant.ENGINE_TYPE:引擎类型;(在唤醒里,引擎类型
仅作用于唤醒识别时的识别部分,而唤醒部分始终在离线模式。) |
void |
startListening(WakeuperListener listener)
开始录音
调用此函数,开始唤醒和注册会话。
|
void |
stopListening()
停止录音
调用本函数告知SDK,当前会话音频已全部录入。
|
int |
updateWords(java.lang.String action,
java.lang.String params)
更新唤醒词
注意:此函数会阻塞调用的线程,建议别在UI线程调用。
|
int |
writeAudio(byte[] buffer,
int offset,
int length)
写入录音数据
通过调用此函数,把音频数据传给SDK。
|
public static VoiceWakeuper createWakeuper(Context context, InitListener listener)
使用此函数创建一个本类单例对象。当成功创建一次单例对象后,可一直使用此对象,
直到调用destroy()销毁已创建的单例对象为止。若在当前应用生命周期内调用
destroy()前再次调用本函数,则直接返回已创建的单例对象。可通过
getWakeuper()获取已创建的单例对象。
destroy(),
getWakeuper()public static VoiceWakeuper getWakeuper()
通过函数获取已创建的单例对象。当单例对象未创建时,将返回null,此时应先通过
createWakeuper(Context, com.iflytek.cloud.InitListener)创建单例对象。
createWakeuper(Context, com.iflytek.cloud.InitListener),
destroy()public void startListening(WakeuperListener listener)
调用此函数,开始唤醒和注册会话。
目前SDK不支持多线程,所以在调用本函数开始一次会话后,直到结束前(结果返回 完毕,或出现错误),不能再调用本函数开始新的会话(否则当前会话将自动结束)。 一次会话,即从会话开始,到结束为止。
在调用本函数开始会话前,通过setParameter(java.lang.String, java.lang.String)设置相应的参数。包括
唤醒资源路径,
唤醒业务类型等,参考setParameter(java.lang.String, java.lang.String)。
调用本函数开始会话后,通过SDK的录音机录取用户通过麦克风读入的音频(当
SpeechConstant.AUDIO_SOURCE 值>=0时),或由应用层调用
writeAudio(byte[], int, int)写入音频流,获取用于唤醒或注册的音频。在完成音频
录入(包括麦克风或写音频流方式)后,通过调用stopListening()告知SDK已完
成音频录入。
在开始会话后,如果通过SDK的录音机录取用户通过麦克风读入的音频(当
SpeechConstant.AUDIO_SOURCE 值>=0时),直到用户读到唤醒词而
唤醒成功(非持续唤醒时),
或取消会话,或出现出错WakeuperListener.onError(com.iflytek.cloud.SpeechError)为止,录音将一直持续。
可通过cancel()取消当前的会话。
public int writeAudio(byte[] buffer,
int offset,
int length)
通过调用此函数,把音频数据传给SDK。
仅在SpeechConstant.AUDIO_SOURCE值为-1时,需要通过调用本函数,把
音频数据传给SDK。在写入音频数据前,应先通过startListening(com.iflytek.cloud.WakeuperListener)
开启会话。在结束录音数据写入后,调用startListening(com.iflytek.cloud.WakeuperListener)告知应用层,当前会话
音频数据已全部写入。
非持续唤醒下,当SDK回调
WakeuperListener.onResult(com.iflytek.cloud.WakeuperResult)返回完结果,或任意模式下,回调
WakeuperListener.onError(com.iflytek.cloud.SpeechError)返回错误时,会话结束,应该停止当次会话的音频写入。
支持的音频格式,请参考setParameter(String, String)的参数说明。
buffer - 要写入的录音数据缓存offset - 实际音频在传入缓存的起始点length - 音频数据长度ErrorCode.SUCCESS表示成功,其他值表示有错误,
具体错误码,请参考ErrorCode。startListening(com.iflytek.cloud.WakeuperListener),
stopListening(),
WakeuperListenerpublic void stopListening()
public boolean isListening()
通过此函数,获取当前SDK是否正在进行会话。应用层可通过此函数,查询能否 开始一路新的会话等。
调用了stopListening()停止录音后,如果会话未出现错误或返回最后的结果,
当前状态依然处于会话中,即本函数会返回true。如果调用cancel()取消了会话,
则当前状态处于不在会话中。
startListening(com.iflytek.cloud.WakeuperListener),
stopListening(),
cancel()public int updateWords(java.lang.String action,
java.lang.String params)
注意:此函数会阻塞调用的线程,建议别在UI线程调用。
更新唤醒词,用于合并(merge)已有的两个唤醒资源,或删除(delete)资源中的某个唤醒词 (目前暂不支持删除功能)。
更新唤醒词参数仅在此函数的参数2设置起作用,通过setParameter(java.lang.String, java.lang.String)
设置的参数,对此函数不起作用。更新唤醒词参数,包括:
SpeechConstant.IVW_WORD_PATH:合并资源目标路径。
SpeechConstant.IVW_RES_PATH:待合并资源路径。因合并资源一定是包含
两个以上的资源,两个资源之间,以英文的分号";"分隔,并通过
ResourceUtil.generateResourcePath(Context, com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE, java.lang.String)生成标准路径,
如 generateResourcePath( context,
ResourceUtil.RESOURCE_TYPE.path,
"/sdcard/res_01.jet;/sdcard/res_02.jet" );。
action - 唤醒词操作:merge、delete。params - 操作参数,见上文。ErrorCode.SUCCESS成功,否则失败,详细错误码,请
参考ErrorCode类。startListening(com.iflytek.cloud.WakeuperListener),
ResourceUtil.generateResourcePath(Context, com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE, java.lang.String)public void cancel()
通过此函数取消当前的会话。
在会话被取消后,当前唤醒会话结束,未返回的结果将不再返回。
public boolean setParameter(java.lang.String key,
java.lang.String value)
可设置的参数有:
SpeechConstant.IVW_SST:唤醒类务类型;
SpeechConstant.IVW_THRESHOLD:唤醒门限值;
SpeechConstant.KEEP_ALIVE:持续唤醒;
SpeechConstant.IVW_SHOT_WORD:包含唤醒词;
SpeechConstant.IVW_ENROLL_RES_PATH:注册辅助资源路径;
SpeechConstant.IVW_ENROLL_DEST_PATH:注册生成资源目标路径;
SpeechConstant.IVW_ENROLL_TMIN:唤醒注册的最短语音时间;
SpeechConstant.IVW_ENROLL_TMAX:唤醒注册的最长语音时间;
SpeechConstant.IVW_VOL_CHECK:唤醒注册是否返回音量;
SpeechConstant.IVW_RES_PATH:唤醒资源路径;
SpeechConstant.ENGINE_TYPE:引擎类型;(在唤醒里,引擎类型
仅作用于唤醒识别时的识别部分,而唤醒部分始终在离线模式。)
SpeechConstant.SAMPLE_RATE:采样率;
SpeechConstant.CLOUD_GRAMMAR:云端语法ID;
SpeechConstant.LOCAL_GRAMMAR:本地语法ID;
SpeechConstant.AUDIO_SOURCE:音频源;
SpeechConstant.RESULT_TYPE:识别结果类型;
目前唤醒仅支持未压缩的16位,单声道,采样率为16000,字节顺序为
Little-Endian的Windows PCM音频。唤醒识别若使用本地识别时,需要有相
应的资源文件才支持对应的采样率的音频识别。
setParameter 在类中 com.iflytek.cloud.msc.module.SpeechInterfacekey - 参数名称value - 参数值startListening(com.iflytek.cloud.WakeuperListener),
getParameter(java.lang.String)public java.lang.String getParameter(java.lang.String key)
获取指定的参数的当前值。
某些有默认的值的参数,如SpeechConstant.SAMPLE_RATE,在应用层未
调用setParameter(String, String)来设置参数值前,可能获取到的是null值,
但在实际会话会始时,SDK会使用默认值传给服务器。
getParameter 在类中 com.iflytek.cloud.msc.module.SpeechInterfacekey - 参数名称,所有支持参数,参考setParameter(String, String)SpeechConstant对各参数的说明。setParameter(String, String)public boolean destroy()
通过本函数,销毁由createWakeuper(Context, com.iflytek.cloud.InitListener)创建的单例对象。
在调用本函数进行销毁前,应先保证当前不在会话中,否则,本函数将尝试取消当前
会话,并返回false,此时销毁失败。关于当前是否在会话中,请参考函数
isListening()。若销毁失败,请在取消当前会话后,再次调用本函数重试。
当本函数返回true时,销毁成功。此时,之前创建的单例对象已不能再使用,否则,
将会报错。此时需要再使用,应先通过createWakeuper(Context, com.iflytek.cloud.InitListener)创建一个新的单例
对象。
createWakeuper(Context, com.iflytek.cloud.InitListener),
cancel()