集合讯飞语音输入法时遇到的问题

慎用其代理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(), ^{
        // 播放取消音效
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容