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()
,
WakeuperListener
public 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.SpeechInterface
key
- 参数名称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.SpeechInterface
key
- 参数名称,所有支持参数,参考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()