Android 语音识别(Recognizer)

这里介绍的是Android API关于语音识别(Recognizer)的相关说明,点击右侧目录可快速找到相应文件。

类SpeechRecognizer

com.iflytek.cloud

java.lang.Object
	com.iflytek.cloud.msc.module.SpeechInterface
		com.iflytek.cloud.SpeechRecognizer
		
public final class SpeechRecognizer
extends com.iflytek.cloud.msc.module.SpeechInterface

语音识别类

语音识别,包括听写、语法识别功能。语音识别技术(Auto Speech Recognize, 简称ASR)即把人的自然语言音频数据转换成文本数据。关于识别对话框,请参考 RecognizerDialog

听写,是基于自然语言处理,将自然语言音频转换为文本输出的技术。语音听写技术 与语法识别技术的不同在于,语音听写不需要基于某个具体的语法文件,其识别 范围是整个语种内的词条。在听写时,应用还可以上传个性化的词表,如联系人 列表等,提高列表中词语的匹配率。关于个性化词表上传,请参考updateLexicon(String, String, LexiconListener)

语法识别,是基于语法规则,将与语法一致的自然语言转换为文本输出的技术。语法识别相比听写,有更高的匹配率,多用于要更准确结果且有限说法的语音控制,如空调的语音控制等。在使用语法识别时,应用需要先构建一个语法文件上传,并在会话时,传入语法ID,以使用该语法。语法识别目前仅支持离线(即离线命令词识别),不支持在线。

关于上传语法文件,请参考 buildGrammar(String, String, GrammarListener)。 关于语法文件的编写,请参考 语法编写指南。 关于语法ID设置,请参考setParameter(String, String)SpeechConstant.CLOUD_GRAMMARSpeechConstant.LOCAL_GRAMMAR

听写与语法识别的区别,在于语法识别需要指写一个语法ID,而听写不需要。

本类使用单例,调用者使用本类的对象,只需要通过createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)创建 一次对象后,便可一直使用该对象,直到通过调用destroy()进行单例对象销毁。调 用者可通过getRecognizer()获取当前已经创建的单例。在销毁本类的单例对象后, 需要先通过createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)再次创建单例对象,方可再使用。

在当前应用生命周期第一次使用本类的任何函数前,须先调用 SpeechUtility.createUtility(android.content.Context, java.lang.String)进行SDK初始化。

嵌套类概要

从类继承的嵌套类/接 com.iflytek.cloud.msc.module.SpeechInterface

com.iflytek.cloud.msc.module.SpeechInterface.ENGINE_MODE

方法概要

限定符和类型 方法和说明
int buildGrammar(java.lang.String grammarType, java.lang.String grammarContent,GrammarListener grammarListener)
构建语法文件 在使用语法识别时,需要先构建语法。
void cancel()
取消会话 通过此函数取消当前的会话。
static SpeechRecognizer createRecognizer(android.content.Context context, InitListener listener)
创建单例对象 使用此函数创建一个本类单例对象。
boolean destroy()
销毁单例对象 通过本函数,销毁由createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)创建的单例对象。
java.lang.String getParameter(java.lang.String key)
获取参数 获取指定的参数的当前值。
static SpeechRecognizer getRecognizer()
获取单例对象 通过函数获取已创建的单例对象。
boolean isListening()
是否在会话中 通过此函数,获取当前SDK是否正在进行会话。
boolean setParameter(java.lang.String key, java.lang.String value)
参数设置
int startListening(RecognizerListener listener)
开始录音 调用此函数,开始听写或语法识别。
void stopListening()
停止录音 调用本函数告知SDK,当前会话音频已全部录入。
int updateLexicon(java.lang.String lexiconName, java.lang.String lexiconContent, LexiconListener lexiconListener)
更新词典 更新应用个性化的词典,如联系人列表等。
int writeAudio(byte[] buffer, int offset, int length)
写入录音数据 通过调用此函数,把音频数据传给SDK。

从类继承的方法 com.iflytek.cloud.msc.module.SpeechInterface

setParameter

从类继承的方法 java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

方法详细资料

createRecognizer

public static SpeechRecognizer createRecognizer(android.content.Context context,
                                                InitListener listener)

创建单例对象

使用此函数创建一个本类单例对象。当成功创建一次单例对象后,可一直使用此对象, 直到调用destroy()销毁已创建的单例对象为止。若在当前应用生命周期内调用 destroy()前再次调用本函数,则直接返回已创建的单例对象。可通过 getRecognizer()获取已创建的单例对象。

  • 返回:

    识别对象

getRecognizer

public static SpeechRecognizer getRecognizer()

获取单例对象

通过函数获取已创建的单例对象。当单例对象未创建时,将返回null,此时应先通过 createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)创建单例对象。

  • 返回:

    识别对象

buildGrammar

public int buildGrammar(java.lang.String grammarType,
                        java.lang.String grammarContent,
                        GrammarListener grammarListener)

构建语法文件

在使用语法识别时,需要先构建语法。参考本类开头的介绍。

本地语法仅支持"bnf"类型,构建在线语法支持“abnf”(在线语法已下线)。

关于语法文件的编写,请参考 语法编写指南

updateLexicon

public int updateLexicon(java.lang.String lexiconName,
                         java.lang.String lexiconContent,
                         LexiconListener lexiconListener)

更新词典

更新应用个性化的词典,如联系人列表等。热词更新后,在5~10分钟内生效。

  • 参数:

    lexiconName - 词典名称,{ "userword", "contact" }。

    lexiconContent - 词典内容,联系人列表:以换行符"\n"分隔的词语字符串,如"张三,李四,王五"; 用户热词:满足一定格式的json字符串,格式如下:

    {
      "userword": [
        {
          "name": "default",
          "words": [
            "默认词条1",
            "默认词条2"
          ]
        },
        {
          "name": "词表名称1",
          "words": [
            "词条1的第一个词",
            "词条1的第二个词"
          ]
        },
        {
          "name": "词表名称2",
          "words": [
            "词条2的第一个词",
            "词条2的第二个词"
          ]
        }
      ]
    }
    

    同时请参考相关DEMO的示例, 或UserWords类。

    lexiconListener - 词典更新回调接口

startListening

public int startListening(RecognizerListener listener)

开始录音

调用此函数,开始听写或语法识别。

目前SDK不支持多线程,所以在调用本函数开始一次会话后,直到结束前(结果返回 完毕,或出现错误),不能再调用本函数开始新的会话。一次会话,即从会话开始,到结 束为止。

在调用本函数开始听写或语法识别前,通过setParameter(String, String)设置相 应的参数。

调用本函数开始识别后,通过SDK的录音机录取用户通过麦克风读入的音频(当 SpeechConstant.AUDIO_SOURCE 值>=0时),或由应用层调用 writeAudio(byte[], int, int)写入音频流,获取用于识别的音频。在完成音频 录入(包括麦克风或写音频流方式)后,通过调用stopListening()告知SDK已完 成音频录入,或由SDK自带的VAD(Voice Activity Detection,静音抑制)自动结束音频录 入,见RecognizerListener.onEndOfSpeech()。(关于写入音流方式的SDK自动结束 录入应注意的地方,请参考writeAudio(byte[], int, int);VAD端点长度设置,请 参考setParameter(String, String)

可通过cancel()取消当前的会话。

writeAudio

public int writeAudio(byte[] buffer,
                      int offset,
                      int length)

写入录音数据

通过调用此函数,把音频数据传给SDK。

仅在SpeechConstant.AUDIO_SOURCE值为-1时,需要通过调用本函数,把 音频数据传给SDK。在写入音频数据前,应先通过startListening(RecognizerListener) 开启会话。在结束录音数据写入后,调用stopListening()告知应用层,当前会话 音频数据已全部写入。

当SDK回调RecognizerListener.onEndOfSpeech()时,说明SDK已经通过VAD检测 到了静音末端点,应该立即停止写入音频数据。当SDK回调 RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean)返回完结果,或回调 RecognizerListener.onError(SpeechError)返回错误时,也应该停止当次会话的音频写 入。

支持的音频格式,请参考setParameter(String, String)的参数说明。

  • 参数:

    buffer - 要写入的录音数据缓存

    offset - 实际音频在传入缓存的起始点

    length - 音频数据长度

  • 返回:

    是否成功写入数据,ErrorCode.SUCCESS表示成功,其他值表示有错误, 具体错误码,请参考ErrorCode

stopListening

public void stopListening()

停止录音

调用本函数告知SDK,当前会话音频已全部录入。

在调用本函数后,已录入的音频还在继续上传到服务器,结果不会马上就返回,当前会 话还在继续,直到结果返回完毕,或出现错误。

要取消会话,请参考cancel()函数。

当应用调用本函数结束停止录音时,SDK不会再回调 RecognizerListener.onEndOfSpeech()。相反的,当SDK回调 RecognizerListener.onEndOfSpeech()时,应用层可不必再调用本函数通知SDK停止 录音。

isListening

public boolean isListening()

是否在会话中

通过此函数,获取当前SDK是否正在进行会话。应用层可通过此函数,查询能否 开始一路新的会话等。

调用了stopListening()停止录音后,如果会话未出现错误或返回最后的结果, 当前状态依然处于会话中,即本函数会返回true。如果调用cancel()取消了会话, 则当前状态处于不在会话中。

  • 返回:

    会话状态,true:正在会话中;false:不在会话中。

cancel

public void cancel()

取消会话

通过此函数取消当前的会话。

在会话被取消后,当前会话结束,未返回的结果将不再返回。

setParameter

public boolean setParameter(java.lang.String key,
                            java.lang.String value)

参数设置

可设置的参数有:
SpeechConstant.NET_TIMEOUT: 网络连接超时时间
SpeechConstant.KEY_SPEECH_TIMEOUT:语音输入超时时间
SpeechConstant.LANGUAGE:语言
SpeechConstant.ACCENT:语言区域
SpeechConstant.DOMAIN:应用领域
SpeechConstant.LOCAL_GRAMMAR:本地语法ID
SpeechConstant.AUDIO_SOURCE:音频源
SpeechConstant.BLUETOOTH: 蓝牙录音
SpeechConstant.VAD_BOS:前端点超时
SpeechConstant.VAD_EOS:后端点超时
SpeechConstant.VAD_ENABLE:启用VAD
SpeechConstant.SAMPLE_RATE:识别采样率
SpeechConstant.ASR_NBEST:句子级多候选
SpeechConstant.ASR_WBEST:词级多候选
SpeechConstant.ASR_PTT:设置是否有标点符号
SpeechConstant.RESULT_TYPE:识别结果类型
SpeechConstant.ASR_AUDIO_PATH:识别录音保存路径
SpeechConstant.ENGINE_TYPE:引擎类型;
ResourceUtil.ASR_RES_PATH:离线资源路径;
ResourceUtil.ENGINE_START:启动离线引擎;
ResourceUtil.GRM_BUILD_PATH:离线语法路径;
SpeechConstant.DVC_INFO: 设备信息
SpeechConstant.AUDIO_FORMAT_AUE:音频流编解码格式,非音频流操作并不支持此参数设置,如命令词识别

当前识别支持未压缩的16位,单声道,采样率为16000(在离线均支持)或8000(仅在线支持),字节顺序为 Little-Endian的Windows PCM音频。本地识别时,需要有相应的资源文件才支 持对应的采样率的音频识别。

  • 覆盖:

    setParameter 在类中 com.iflytek.cloud.msc.module.SpeechInterface

  • 参数:

    key - 参数名称

    value - 参数值

  • 返回:

    是否设置成功

getParameter

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对各参数的说明。

destroy

public boolean destroy()

销毁单例对象

通过本函数,销毁由createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)创建的单例对象。

在调用本函数进行销毁前,应先保证当前不在会话中,否则,本函数将尝试取消当前 会话,并返回false,此时销毁失败。关于当前是否在会话中,请参考函数 isListening()。若销毁失败,请在取消当前会话后,再次调用本函数重试。

当本函数返回true时,销毁成功。此时,之前创建的单例对象已不能再使用,否则, 将会报错。此时需要再使用,应先通过createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)创建一个新的单例 对象。

  • 覆盖:

    destroy 在类中 com.iflytek.cloud.msc.module.SpeechInterface

  • 返回:

    销毁成功:true;销毁失败:false。

类RecognizerDialog

com.iflytek.cloud.ui
java.lang.Object
	android.app.Dialog
		com.iflytek.cloud.ui.control.MscDialog
			com.iflytek.cloud.ui.RecognizerDialog

所有已实现的接口:

android.content.DialogInterface, android.view.KeyEvent.Callback, android.view.View.OnCreateContextMenuListener, android.view.Window.Callback


public class RecognizerDialog extends com.iflytek.cloud.ui.control.MscDialog

识别对话框

识别对话框是识别时,SDK自带的,用于用户交互的对话框界面。关于无对话框识别, 请参考SpeechRecognizer

调用show()显示对话框后,自动开始录音(当设置 音频源为麦克风时), 即相当于调用了SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener)。 在录音过程中点击对话框内任意地方停止录音并等待结果返回,即相当于调用了 SpeechRecognizer.stopListening()。点击对话框外的 任意地方取消识别,对话框自动消失,即相当于调用了 SpeechRecognizer.cancel()。 可以调用Dialog.setOnDismissListener(android.content.DialogInterface.OnDismissListener)来设置对话框消失时的监听器。

因识别对话框,实际上还是调用了SpeechRecognizer的单例 进行识别会话(在首次通过构造函数创建实例时,自动创建 SpeechRecognizer的单例),所以应用不能在识别对话框还在进 行会话(对话框在显示)时,调用 SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener) 开启新的会话。

嵌套类概要

从类继承的嵌套类/接口 com.iflytek.cloud.ui.control.MscDialog

com.iflytek.cloud.ui.control.MscDialog.DismissCallBack

从接口继承的嵌套类/接口 android.content.DialogInterface

android.content.DialogInterface.OnCancelListener, android.content.DialogInterface.OnClickListener, android.content.DialogInterface.OnDismissListener, android.content.DialogInterface.OnKeyListener, android.content.DialogInterface.OnMultiChoiceClickListener, android.content.DialogInterface.OnShowListener

字段概要

从接口继承的字段 android.content.DialogInterface

BUTTON_NEGATIVE, BUTTON_NEUTRAL, BUTTON_POSITIVE, BUTTON1, BUTTON2, BUTTON3

构造器概要

构造器和说明
RecognizerDialog(android.content.Context context, InitListener listener)构造函数 初始化一个识别对话框。

方法概要

限定符和类型 方法和说明
void dismiss()消失 使弹出框消失,同时取消当前会话,即相当于点击了对话框外的其他地方, 或相当于调用了SpeechRecognizer.cancel()
void setListener(RecognizerDialogListener listener)设置识别对话框监听器 通过监听器,获取识别状态和结果。
void setParameter(java.lang.String key, java.lang.String value)设置参数 请参考SpeechRecognizer.setParameter(String, String)说明。
void setUILanguage(java.util.Locale lan)设置对话框语言 目前支持以下语言:
简体中文:Locale.CHINA;
繁体中文:Locale.TRADITIONAL_CHINESE;
美式英语:Locale.US;
void show()显示 显示对话框,并开始识别,即相当于调用了SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener)

从类继承的方法 com.iflytek.cloud.ui.control.MscDialog

destroy

从类继承的方法 android.app.Dialog

addContentView, cancel, closeOptionsMenu, create, dispatchGenericMotionEvent, dispatchKeyEvent, dispatchKeyShortcutEvent, dispatchPopulateAccessibilityEvent, dispatchTouchEvent, dispatchTrackballEvent, findViewById, getActionBar, getContext, getCurrentFocus, getLayoutInflater, getOwnerActivity, getSearchEvent, getVolumeControlStream, getWindow, hide, invalidateOptionsMenu, isShowing, onActionModeFinished, onActionModeStarted, onAttachedToWindow, onBackPressed, onContentChanged, onContextItemSelected, onContextMenuClosed, onCreateContextMenu, onCreateOptionsMenu, onCreatePanelMenu, onCreatePanelView, onDetachedFromWindow, onGenericMotionEvent, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyShortcut, onKeyUp, onMenuItemSelected, onMenuOpened, onOptionsItemSelected, onOptionsMenuClosed, onPanelClosed, onPrepareOptionsMenu, onPreparePanel, onRestoreInstanceState, onSaveInstanceState, onSearchRequested, onSearchRequested, onTouchEvent, onTrackballEvent, onWindowAttributesChanged, onWindowFocusChanged, onWindowStartingActionMode, onWindowStartingActionMode, openContextMenu, openOptionsMenu, registerForContextMenu, requestWindowFeature, setCancelable, setCanceledOnTouchOutside, setCancelMessage, setContentView, setContentView, setContentView, setDismissMessage, setFeatureDrawable, setFeatureDrawableAlpha, setFeatureDrawableResource, setFeatureDrawableUri, setOnCancelListener, setOnDismissListener, setOnKeyListener, setOnShowListener, setOwnerActivity, setTitle, setTitle, setVolumeControlStream, takeKeyEvents, unregisterForContextMenu

从类继承的方法 java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

从接口继承的方法 android.view.Window.Callback

onPointerCaptureChanged, onProvideKeyboardShortcuts

构造器详细资料

RecognizerDialog

public RecognizerDialog(android.content.Context context,
                        InitListener listener)

构造函数

初始化一个识别对话框。

参数:

context - 上下文环境变量

listener - 初始化监听器

另请参阅:

SpeechRecognizer.createRecognizer(android.content.Context, com.iflytek.cloud.InitListener)

方法详细资料

setListener

public void setListener(RecognizerDialogListener listener)

设置识别对话框监听器

通过监听器,获取识别状态和结果。

参数:

listener - 识别对话框监听器

另请参阅:

RecognizerDialogListener

setParameter

public void setParameter(java.lang.String key,
                         java.lang.String value)

设置参数

请参考SpeechRecognizer.setParameter(String, String)说明。

setUILanguage

public void setUILanguage(java.util.Locale lan)

设置对话框语言

目前支持以下语言: 简体中文:Locale.CHINA; 繁体中文:Locale.TRADITIONAL_CHINESE; 美式英语:Locale.US;

  • 参数:

    lan - 语言种类,见上文说明。

show

public void show()

显示

显示对话框,并开始识别,即相当于调用了SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener)。 若当前[音频源]((https://www.ai-nanchang.cn/doc/mscapi/Android/androidbasic.html#audio-source)为麦克风, 将自动开启录音;若音频源为 写音频流,则应用可通过调用SpeechRecognizer.writeAudio(byte[], int, int)写 入音频数据。

关于对话框显示过程的其他操作,参考类说明。

  • 覆盖:

show 在类中 com.iflytek.cloud.ui.control.MscDialog

dismiss

public void dismiss()

消失

使弹出框消失,同时取消当前会话,即相当于点击了对话框外的其他地方, 或相当于调用了 SpeechRecognizer.cancel() 。 会话被取消后,未返回的结果将不再返回。

指定者: dismiss 在接口中 android.content.DialogInterface 覆盖: dismiss 在类中 com.iflytek.cloud.ui.control.MscDialog

类RecognizerResult

com.iflytek.cloud
java.lang.Object
	com.iflytek.cloud.RecognizerResult

所有已实现的接口:

android.os.Parcelable


public class RecognizerResult
extends java.lang.Object
implements android.os.Parcelable

识别结果

​ 识别结果为文本内容,格式包括自然语言文本(plain)、xml结构化文本(xml)、json结构化文本(json)3种。

​ 当使用听写(SpeechConstant.CLOUD_GRAMMAR为null)时,结果文本格式支持:plain、json(默认)。

​ 当使用命令词识别(SpeechConstant.CLOUD_GRAMMAR为非null)时,结果文本格式支持:plain、xml、 json(默认)。

​ 关于json和xml格式的各关键字说明,请参考**科大讯飞MSC集成指南**。

嵌套类概要

从接口继承的嵌套类/接口 android.os.Parcelable

 android.os.Parcelable.ClassLoaderCreator<T>, android.os.Parcelable.Creator<T> 

字段概要

限定符和类型 字段和说明
static android.os.Parcelable.Creator<RecognizerResult> CREATOR

从接口继承的字段 android.os.Parcelable

CONTENTS_FILE_DESCRIPTOR, PARCELABLE_WRITE_RETURN_VALUE

构造器概要

构造器和说明
RecognizerResult(android.os.Parcel in)构造函数 应用层只通过RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean)得到结果,可忽略此类的构造函数。
RecognizerResult(java.lang.String result)构造函数 应用层只通过RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean)得到结果,可忽略此类的构造函数。

方法概要

限定符和类型 方法和说明
int describeContents()
java.lang.String getResultString()获取识别结果
void writeToParcel(android.os.Parcel dest, int flags)

从类继承的方法 java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段详细资料

CREATOR

public static final android.os.Parcelable.Creator<RecognizerResult> CREATOR

构造器详细资料

RecognizerResult

public RecognizerResult(android.os.Parcel in)

构造函数

应用层只通过RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean)得到结果,可忽略此类的构造函数。

  • 参数:

    in - 文本结果

RecognizerResult

public RecognizerResult(java.lang.String result)

构造函数

应用层只通过RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean)得到结果,可忽略此类的构造函数。

  • 参数:

    result - 文本结果

方法详细资料

describeContents

public int describeContents()

指定者:

describeContents 在接口中 android.os.Parcelable

getResultString

public java.lang.String getResultString()

获取识别结果

返回:

String类型识别结果文本。返回的结果文本有可能为空字符串。

writeToParcel

public void writeToParcel(android.os.Parcel dest,
                          int flags)

指定者:

writeToParcel 在接口中 android.os.Parcelable

接口RecognizerListener

com.iflytek.cloud
public interface RecognizerListener

识别监听器

通过实现此接口,获取当前识别的状态和结果

识别对话框监听器,请参考RecognizerDialogListener

方法概要

限定符和类型 方法和说明
void onBeginOfSpeech()开始说话 在录音模式(音频源参数设为 > -1时 )下, 调用开始录音函数后,会自动开启系统的录音 机,并在录音机开启后,会回调此函数(这中间的过程应该在几毫秒内,可以忽略,除非系 统响应很慢)。
void onEndOfSpeech()结束说话 在SDK检测到音频的静音端点时,回调此函数(在录音模式或写音频模式下都会回调, 应用层主动调用SpeechRecognizer.stopListening()则不会回调此函数, 在识别出错时,可能不会回调此函数)。
void onError(SpeechError error)错误回调 当此函数回调时,说明当次会话出现错误,会话自动结束,录音也会停止。
void onEvent(int eventType, int arg1, int arg2, android.os.Bundle obj)事件 扩展用接口,由具体业务进行约定。
void onResult(RecognizerResult result, boolean islast)返回结果 返回的结果可能为null,请增加判断处理。
void onVolumeChanged(int volume, byte[] data)音量变化 当开始识别,到停止录音(停止写入音频流)或SDK返回最后一个结果自动结束识别为止, SDK检测到音频数据(正在录音或写入音频流)的音量变化时,会多次通过此函数回调,告 知应用层当前的音量值。

方法详细资料

onVolumeChanged

void onVolumeChanged(int volume,
                     byte[] data)

音量变化

当开始识别,到停止录音(停止写入音频流)或SDK返回最后一个结果自动结束识别为止, SDK检测到音频数据(正在录音或写入音频流)的音量变化时,会多次通过此函数回调,告 知应用层当前的音量值。应用层可通过此函数传入的值变化,改变自定义UI的画面等。

参数:

volume - 当前音量值,范围[0-30]

data - 录音数据,格式请参考SpeechConstant.SAMPLE_RATE , SpeechConstant.AUDIO_FORMAT。此参数返回的数据,即使 SpeechConstant.NOTIFY_RECORD_DATA为false,也会返回。

onBeginOfSpeech

void onBeginOfSpeech()

开始说话

在录音模式(音频源参数设为 > -1时 )下, 调用开始录音函数后,会自动开启系统的录音 机,并在录音机开启后,会回调此函数(这中间的过程应该在几毫秒内,可以忽略,除非系 统响应很慢)。

应用层可通过此函数回调,告知用户,当前可开始说话。若应用层使用的是声音提示, 则应该在调用开始录音函数前,提放提示音, 并在提示音非静音数据播放结束时,调用 开始录音函数,开始录音。若太早调用,则 可能会把提示音录进要识别的音频中,若太晚,则可能会漏掉部分用户说话的音频。

onEndOfSpeech

void onEndOfSpeech()

结束说话

在SDK检测到音频的静音端点时,回调此函数(在录音模式或写音频模式下都会回调, 应用层主动调用SpeechRecognizer.stopListening()则不会回调此函数, 在识别出错时,可能不会回调此函数)。在此函数回调后,当前识别会话可能并没有结束, 识别结果可能还要等待一定的时间才会返回。

此函数回调后,应用层应立即停止调用SpeechRecognizer.writeAudio(byte[], int, int)写入音 频数据,(当音频源设置为音频流时(SpeechConstant.AUDIO_SOURCE为-1时) 否则,再通过SpeechRecognizer.writeAudio(byte[], int, int)写入的音频也会被忽略。

应用层可以通过此函数回调,告知用户,当次说话已结束,正在等待识别结果(若结果 未返回)等。

onResult

void onResult(RecognizerResult result,
              boolean islast)

返回结果

返回的结果可能为null,请增加判断处理。

一次识别会话的结果可能会多次返回(即多次回调此函数),通过参数2,判断是否是最后 一个结果,true时为最后一个结果,否则不是。当最后一个结果返回时,本次会话结束,录 音也会停止,在重新调用 SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener)开启新的识别会话前, 停止调用SpeechRecognizer.writeAudio(byte[], int, int)写入音频(当音频源设置为音频流时 (SpeechConstant.AUDIO_SOURCE为-1时)。 当出现错误,或应用层调用SpeechRecognizer.cancel()取消当次识别时,在当次识 别会话过程可能不会回调此函数。

识别采用边录边上传的分次上传音频数据方式,可能在结束录音前,就有结果返回。

参数:

result - 结果数据

islast - 是否最后一次结果标记

onError

void onError(SpeechError error)

错误回调

当此函数回调时,说明当次会话出现错误,会话自动结束,录音也会停止。应在再次调用 SpeechRecognizer.startListening(com.iflytek.cloud.RecognizerListener)开启新的识别会话前, 停止调用SpeechRecognizer.writeAudio(byte[], int, int)写入音频(当音频源设置为音频流时 ([SpeechConstant.AUDIO_SOURCE]https://www.ai-nanchang.cn/doc/mscapi/Android/androidbasic.html#audio-source)为-1时)。

  • 参数:

    error - 错误类型

onEvent

void onEvent(int eventType,
             int arg1,
             int arg2,
             android.os.Bundle obj)

事件

扩展用接口,由具体业务进行约定。例如eventType为0显示网络状态,agr1为网络连接值。

  • 参数:

    eventType - 消息类型

    arg1 - 参数1

    arg2 - 参数2

    obj - 消息内容

接口RecognizerDialogListener

com.iflytek.cloud.ui
public interface RecognizerDialogListener

识别对话框监听器

通过实现此接口,获取识别对话框识别过程的结果和错误信息

方法概要

限定符和类型 方法和说明
void onError(SpeechError error)错误回调 请参考RecognizerListener.onError(com.iflytek.cloud.SpeechError)说明。
void onResult(RecognizerResult result, boolean isLast)结果回调 请参考RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean) 说明。

方法详细资料

onResult

void onResult(RecognizerResult result,
              boolean isLast)

结果回调

请参考RecognizerListener.onResult(com.iflytek.cloud.RecognizerResult, boolean) 说明。

参数:

result - 识别结果

isLast - 是否是最后一次返回结果

onError

void onError(SpeechError error)

错误回调

请参考RecognizerListener.onError(com.iflytek.cloud.SpeechError)说明。

  • 参数:

    error - 错误信息

接口GrammarListener

com.iflytek.cloud
public interface GrammarListener

语法构建回调接口

通过实现此接口,获取语法上传的状态

方法概要

限定符和类型 方法和说明
void onBuildFinish(java.lang.String grammarId, SpeechError error)语法构建结束回调

方法详细资料

onBuildFinish

void onBuildFinish(java.lang.String grammarId,
                   SpeechError error)

语法构建结束回调

参数:

grammarId - 语法ID,将用于在语法识别时,设置语法参数

error - 错误信息,null时表示成功,其他值则有错误 ,详细错误码请看ErrorCode

接口LexiconListener

com.iflytek.cloud
public interface LexiconListener

词典更新回调接口

通过实现此接口,获取词典更新状态

方法概要

限定符和类型 方法和说明
void onLexiconUpdated(java.lang.String lexiconId, SpeechError error)词典更新结束回调

方法详细资料

onLexiconUpdated

void onLexiconUpdated(java.lang.String lexiconId,
                      SpeechError error)

词典更新结束回调

参数:

lexiconId - 词典ID。目前即使上传成功,此值也是null,只要上传成功,个性化词表便可生效,可忽略此参数值。

error - 错误信息。值为null时表示成功,其他值时表示有错误。 详细错误码请看ErrorCode