慎用其代理IFlySpeechRecognizerDelegate的可选实现方法
/*!
* 开始录音回调<br>
* 当调用了`startListening`函数之后,如果没有发生错误则会回调此函数。<br>
* 如果发生错误则回调onError:函数
*/
- (void) onBeginOfSpeech;
/*!
* 停止录音回调<br>
* 当调用了`stopListening`函数或者引擎内部自动检测到断点,如果没有发生错误则回调此函数。<br>
* 如果发生错误则回调onError:函数
*/
- (void) onEndOfSpeech;
/*!
* 取消识别回调<br>
* 当调用了`cancel`函数之后,会回调此函数,在调用了cancel函数和回调onError之前会有一个<br>
* 短暂时间,您可以在此函数中实现对这段时间的界面显示。
*/
- (void) onCancel;
我在这些监听事件中,加入播放音效的代码,是不能正常工作的,找了半天,发现不能在这些代理中播放音效.原因是这些监听事件,是在讯飞启动录音之后触发的回调.而一旦开启录音模式,就不能同时开启播放模式,就好像你录音的时候你录音的设备不能听歌是一样的.因此要关于开始播放,停止播放,取消播放等,何时播放需要自己控制.
额外的,在点击取消播放时,因为语音识别引擎取消播放需要时间,因此取消播放声音的音效经常是放不出的,因此需要延时播放.
if ([_speechRecognizer isListening]) {
[_speechRecognizer stopListening];
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 播放取消音效
});