ISpeechRecoContext(事件)自动化接口定义了可以被识别上下文接收的各种类型的事件。
ISpeechRecoContext(事件)自动化接口包含以下的事件:
Adaptation事件:当SR引擎完成加工一大块适应数据后发生;
这个事件表示引擎不仅已经加工适应性字符串,并且准备去接受另一个SetAdaptation调用。
AudioLevel事件:当SAPI音频对象检测到音频位准发生变化时候发生;
AudioLevel事件是SAPI自动化中唯一的没有被默认设置的事件。如果需要这个事件,必须和EventInterests事件一起,显式地设置。
Bookmark事件:当SR引擎遇到当前输入流中一个书签时发生;
EndStream事件:当SR引擎遇到输入音频流的末尾时发生;
FalseRecognition事件:当SR引擎产生一个错误的识别时发生;
一个识别企图在识别单词或者词组不在语法中,或者语音并不完全符合应用程序要求的时候将会产生一个错误的识别。尽管对于听写式是可以接受的,它对于命令和控制语法更加普通,因为在其中,可以使用的单词已经被明确地限制了。
一个识别结果如果返回的是FalseRecognition是有效的,同时,也包含有Recognition事件所有的信息,包括文本。尽管文本不是语音所预期的必须的代表。它表现了这个语音的最佳估计。如果使用替换(自动选择替换句子),第一个替换的返回值就像FalseRecognition结果一样。
注意:
一个识别企图可能会产生三种结果
1、第一个结果是Recognition事件是一个成功识别的结果。这个事件表示一个单词或者短语和开放语法中的元素相匹配,并且这种匹配有很高的满意率;
2、第二个可能的结果是FalseRecognition事件。这个事件表示语音已经被检测到,但是它或者不匹配开发语法,或者这种匹配没有足够高的信任度。这个识别结果返回仍然是有效的,而且包括所有Recognition事件所应有的信息,包括文本;
3、第三个可能的结果是RecognitionForOtherContext事件。这个事件表示一个成功的识别结果,但是一个不同的识别上下文被使用来匹配词语。SAPI试图使用当前的识别上下文去匹配单词或者短语。然而,如果不匹配产生(可能识别上下文当前处于非激活状态,规则是非激活的,或者单词或短语太简单并没有被包括在语法中),这时候,SAPI试图去其他的识别上下文中寻找匹配。如果在另一个应用程序的激活语法中发现匹配,识别事件就会把这个应用程序发送去替代,而当前的应用程序就会收到一个RecognitionForOtherContext事件;
Hypothesis事件:当SR引擎产生一个假设时发生;
一个假设是一个中间的识别结果每次引擎试图尝试一个识别,它通常产生一个中间结果,并且将Hypothesis事件送出,一个假设可能/不可能接近识别的最终结果。事实上,一个假设可能因为声音质量、习惯用语、或者不常用的单词或者短语等原因而和最终的结果没有相似性。
成员结果是有效的识别结果,并且可以像Recognition事件一样使用,然而,这些值是中间结果,并且在下一次Hypothesis事件中被改变。
Interference事件:当SR引擎遇到输入音频流中的冲突时发生;
冲突可能被很多因素引起。其中6个普通因素在SpeechInterference列表中被列出。Interference事件表示引擎检测到一个状况,这个状况阻碍最佳识别过程。冲突并不阻碍识别的完成。但是,应用程序在声音质量阻碍一个成功识别实现的时候,会收到这个事件,这可能意味着一个低质量的识别结果(最终文本结果可能不准确反映被发音的文本)。
SpeechInterference列表列举出引起冲突或对输入音频流的差识别的原因:
Enum SpeechInterference
SINone = 0
SINoise = 1
SINoSignal = 2
SITooLoud = 3
SITooQuiet = 4
SITooFast = 5
SITooSlow = 6
End Enum
元素:
SINone:私有,不被使用;
SINoise:接收到的声音被SR引擎解释为噪声。这个事件在SOUND_START跟随一个没有被PHRASE_START干涉的SOUND_END时产生。这个事件也可以在听写期间产生,这个听写在一系列假设以后确定是一个噪声信号。
SINoSignal:一个声音被接收,但是它是连续的强度。这同样包括麦克风被拔掉或者静音。
SITooLoud:一个声音被接收,但是音频流的强度相对于分离识别来说太高了;
SITooQuiet:一个声音被接收,但是音频流的强度相对于分离识别来说太低了;
SITooFast:所说的话对于分离识别来说太快了;
SITooSlow:所说的话对于分离识别来说太慢了;
PhraseStart事件:当SR引擎识别出一个短语的开始时发生;
注意:
对于语音处理来说,SR引擎必须按照以下的顺序执行:音频流开始,声音开始,短语开始。一个音频流开始表示的是一个有效的流已经为声音输入做好了准备。这个流持续,除非识别上下文是禁用的或者关联的语法是无效的。一个声音开始表示一个音响量度已经被检测到。然而,SR引擎可以因为一个输入声音有问题而停止一个识别企图。例如,如果一个音响是一个持续不变的量度或者高于、低于预定的音响量度。如果音响量度是可接受的或者是变化的,短语开始就初始化了,并且被假定为一个识别企图的开始。
Recognition事件:当SR引擎产生一个识别时发生;
它被作为语音识别中最重要的一个事件,因为它返回一次成功识别的结果。一次成功的识别就是一个单词或者短语满足识别上下文的的开发语法的要求或者语音质量满足最低信任值。如果上述两点都不符合,引擎将会返回FalseRecognition事件。被发音的内容不满足信任值有很多原因,如背景干扰、不清晰语音、不常用单词或短语。
结果成员中包括识别结果对象,并且从这些可以得出更多关于语音的信息。
SpeechRecognitionType列举类型:列出了语音识别的类型;
SpInProcRecognizer和SpSharedRecognizer对象的Recognition方法返回SpeechRecogintionType成员,指示产生识别结果的识别的类型;
Enum SpeechRecognitionType
SRTStandard = 0
SRTAutopause = 1
SRTEmulated = 2
End Enum
元素:
SRTStandard:表示识别结果是由标准识别而产生的;
SRTAutopause:表示识别结果是由标准识别产生的,并且这个识别的引擎可以暂停;
SRTEmulated:表示识别结果是由仿真识别产生的;
RecognitionForOtherContext事件:当识别上下文遇到一个识别结果属于其他的识别上下文时发生;
一个RecognitionForOtherContext事件表示一个成功的识别,但是这个识别是被其他正在运行的应用程序请求的。当多重共享的例子在同时运行的时候,它将是一个很有用的事件。如果拥有它的应用程序不能使用或者请求这个识别,这个事件将发送给可以请求的其他的识别上下文。在这种情况下,正在请求的识别上下文会得到Recognition事件,所有其他的识别上下文得到RecognitionForOtherContex事件。
这个事件相对于听写型而言,更适合命令和控制语法。例如,当前的识别上下文返回“File”的识别结果,如果这个识别上下文在活动语法中没有“File”这个单词。SR引擎将会搜索所有的开放、活动语法,即使这些语言属于其他的应用程序。如果其他的上下文提供有单词“File”,Recognition事件将会发送到那里去代替。
如果其他的识别上下文没有收到Recognition事件,可能因为这个窗体或者应用程序不处于举例的那种状态,改变这些上下文的状态用ISpeechRecoContext.State。
RecognizerStateChange事件:当SR引擎改变状态时发生;
其中需要使用SpeechRecognizerState列举类型
SpeechRecognizerState列举类型:列出来识别器对象的状态;
Enum SpeechRecognizerState
SRSInactive = 0
SRSActive = 1
SRSActiveAlways = 2
SRSInactiveWithPurge = 3
End Enum
元素:
SRSInactive:引擎和音频输入时不活动的,并且没有音频正在被读取,即使在规则是活动的状态下。音频设备在这种状态下将会被关闭。
SRSActive:只要有规则处于活动状态,识别就会发生。如果规则处于活动状态,音频将会被读取,并且被传递给SR引擎,识别将会发生。
SRSActiveAlways:表示音频将会在不考虑规则状态的情况下运行,甚至这里没有活动的规则,音频仍然被读取并且传递给引擎。
SRSInactiveWithPurge:表示引擎的状态被设置为不活动的,并且所有的活动音频数据都将被清除。当应用程序想要尽快关闭引擎时,将使用这个状态。不需要等待它去完成处理任何正在被缓冲的音频数据。
RquestUI事件:当SR引擎要求从用户处得到附加信息时发生;
SpeechRecoContext.RequestUI(
StreamNumber As Long,
StreamPosition As Variant,
UIType As String
)
参数:
UIType:表示UI的类型。UIType是一个与UI要求完全一致的字符串;
用户界面(UI):
下面列出可供使用的UI,每一个UI都有给C/C++提供的和自动化接口提供的标示。这些UI被提供SAPI5的SR引擎和TTS引擎。
尽管不作要求,SR引擎可能使用一个进程改进过程,并且要求从用户处得到附加信息。例如:识别企图一贯很差劲,或者引擎检测到持续的背景干扰。SR引擎可能要求应用程序使用训练向导或者麦克风向导。这个事件将是SR引擎提供的一个建议去运行特别的用户界面(UI),应用程序可以选择去初始化UI或者忽略这个要求。
SPDUI_AddRemoveWord(C/C++)/SpeechAddRemoveWord(Automation):显示增加、删除单词的对话框,它定义一个字符串去显示UI,目的是修正词典。
SAPI5并没有为SR引擎提供承诺要求去实现SPDUI_AddRemoveWord的UI
当访问时:
应用程序可以监视用户的语音经历(修正的类型或频率)。如果用户修正一个识别通过键入一个词典没有的单词。应用程序可以提示用户使用ISpRcognizer::DisplayerUI和SPDUI_AddRemoveWord增加这个单词到词典。
#defineSPDUI_AddRemoveWord L"AddRemoveWord"
SPDUI_UserTraining(C/C++)/SpeechUserTraining(Automation):显示用户训练向导。也可以使用控制面板中的语音属性进行设置。他是为显示一个SR引擎的用户训练UI定义一个字符串。
当访问时:
应用程序可以通过识别准确率来监视用户的识别经历。如果一个用户遇到太多的错误识别或者识别纠正,应用程序可能要求用户执行更多的识别训练。
同样地,如果用户确实需要执行一个额外的识别训练,一个SR引擎可以发送一个SPEI_REQUEST_UI事件给应用程序。
#defineSPDUI_UserTraining L"UserTraining"
SPDUI_MicTraining(C/C++)/SpeechMicTraining(Automation):显示麦克风向导,也可以使用控制面板中的语音属性进行设置。它是为显示一个SR引擎的麦克风向导定义一个字符串;
当实现时:
当为桌面或者图形环境写入一个语音引擎时,用户可在第一次使用之前或者识别准确率低的情况下改进引擎。麦克风的质量和识别的准确率有很大的关系,甚至为一个说话者无关的引擎。
当访问时:
应用程序可以通过识别准确率来监视用户的发音经历。如果用户遇到太多的错误识别或者识别修正,应用程序可以让用户来让SR引擎重新适应麦克风。
同样地,如果用户需要执行一个额外的训练,一个SR引擎可以发送一个SPEI_REQUEST_UI事件给应用程序。例如:如果输入太低或者太高,典型的UI类型将会是SPDUI_MicTraining去确保SR引擎适应当前的音频设置。
#defineSPDUI_MicTraining L"MicTraining"
SPDUI_RecoProfileProperties(C/C++)/SpeechRecoProfileProperties(Automation):显示用户配置向导,也可以使用控制面板中的语音属性进行设置。它是为显示与特殊识别配置有关的属性设置而定义的一个字符串。
SAPI5并没有为SR引擎提供承诺要求去实现SPDUI_AddRemoveWord的UI
当实现时:
当为桌面或者图形环境写入一个语音引擎时,用户可以为特殊的运行时环境而修改设置。(例如,活动装置和桌面、喧闹和安静、快和慢的计算机等等)。
使用控制面板中的语音属性可以改变所有安装的SAPI5的承诺的TTS和SR引擎的设置。点击“设置”按钮可以用户通用、引擎通用的基础上改变设置。使用SPDUI_RecoProfileProperties可以直接访问每个引擎的识别属性设置UI。如果引擎不支持识别属性设置UI,设置将为不可用的。
当访问时:
应用程序可以显示一个按钮或者菜单选项为访问SPDUI_RecoProfileProperties的环境配置设置。如果一个应用程序在太吵或者太安静的环境中使用,用户可能被提示区更新当前的识别配置去适应它们的特殊的环境。
#defineSPDUI_RecoProfileProperties L"RecoProfileProperties"
SPDUI_AudioProperties(C/C++)/SpeechAudioProperties(Automation):显示SR引擎的音频属性,它是为显示音频对象的属性的UI而定义一个字符串。
当实现时:
一个应用程序可以修改对象的特殊实现属性为自定义音频对象。例如,SAPI实现多媒体音频对象有一个UI,以使用户可以选择多媒体设备线路(如麦克风输入、线路输入等)。一个自定义音频对象(其执行在输入流上降低噪声)可以有一个UI去选择音频输入对象从开头读取数据。它同样可以显示一个允许用户可以去调整执行噪声降低的UI。
控制面板中的语音属性允许用户区选择默认的音频输入和输出对象。点击“属性”按钮可以使用SPDUI_AudioProperties直接访问每一个音频对象属性UI。
#defineSPDUI_AudioProperties L"AudioProperties"
SPDUI_AudioVolume(C/C++)/SpeechAudioVolume(Automation):显示SR引擎的声音音量。它是为显示一个音频对象声音的音量的UI定义一个字符串。
当实现时:
一个应用程序为随机的音频对象修改对象的音量设置。例如:在多媒体音频对象中的SAPI实现显示Windows音频设备混合器。
当访问时:
如果输出的声音太高或者太低时,应用程序可以访问音频对象的音量UI。
同样地,如果用户需要执行一个额外的训练,一个SR引擎可以发送一个SPEI_REQUEST_UI事件给应用程序。例如:如果输入太低或者太高,典型的UI类型将会是SPDUI_MicTraining去确保SR引擎适应当前的音频设置。
SAPI通常不识别对于Windows混声器的设置的改变。这个混声器的设置是在麦克风向导不能适当地设置音量,万不得已的情况下去调整声音系统的方法。
#defineSPDUI_AudioVolume L"AudioVolume"
SPDUI_EngineProperties(C/C++)/SpeechEngineProperties(Automation):显示引擎属性。这个UI只在SAPI5.0中被提供,在5.1及以后的版本没有。
#defineSPDUI_EngineProperties L"EngineProperties"
SoundEnd事件:当SR引擎遇到输入音频流的声音末尾时发生;
SoundStart表示一个声音水平强烈到可以作为一个声音。当声音停止时,一个SoundEnd事件就会发生。一个识别企图只有在SoundEnd事件之后才会发生。因此,一个长的连续的发音可能占用同样长的时间去进行加工。
一个轻柔的背景噪声将不会被作为一个输入声音。同样地,一个响亮的噪声竟会被认为是一个输入声音的开始。如果生意是不变的,一个暂停重现发送一个SoundEnd事件。
SoundStart事件:当SR引擎遇到输入音频流的声音开始时发生;
StartStream事件:当SR引擎遇到输入音频流的开始时发生;
每一个新的音频流的流数目将会在最后的流数目的基础上增加。所以每一个值都是对于应用程序生命周期来说唯一的。流数目可以被用来跟踪输入资源。在批处理环境中,识别Wav文件。例如,流数目可以被用来唯一标识资源。在其他情况下,一个StreamStart事件可以表示一个新的识别企图的开始。