美文网首页
[avas] AVAudioSession.mm:1074:-[

[avas] AVAudioSession.mm:1074:-[

作者: lusen_b | 来源:发表于2017-10-16 12:17 被阅读0次

    关于最近使用讯飞语音识别时出现的问题。


    因为需求,打算使用识别的实时返回结果的方式,进行类似同传的效果(一边识别一边返回结果,然后把返回结果进行翻译,并通过语音合成播放出来)的时候,出现了下面的错误:

    [avas] AVAudioSession.mm:1074:-[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

    字面意思大致是说不能同时播放与录音。

    这就尴尬了,这大致是由于setActive没有设置为 true 导致的。讯飞源码不开放,所以没法在里面实时修改。

    这时想到使用分类重写

    -(BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError*_Nullable__autoreleasing*)outError {

    return NO;

    }

    我认为的分类是可以覆盖super class的方法,所以新建分类 LSAudioSession,继承于 AVAudioSession。

    .h

    #import  <AVFoundation/AVFoundation.h>  //这里默认是AVFAudio/AVFAudio.h,但是这样会有 not found 的错误,既然AVFAudio/AVFAudio.h 是继承于AVFoundation,所以改成AVFoundation/AVFoundation.h

    @interfaceAVAudioSession (LSAudioSession)

    @end

    .m

    #import "AVAudioSession+LSAudioSession.h"

    @implementationAVAudioSession (AddAction)

    -(BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError*_Nullable__autoreleasing*)outError {

    return YES; //默认是 NO,修改成 YES

    }

    @end

    以上.

    然后就是让项目跑起来!

    测试 -> 完美实现。

    相关文章

      网友评论

          本文标题:[avas] AVAudioSession.mm:1074:-[

          本文链接:https://www.haomeiwen.com/subject/lzjkuxtx.html