关于最近使用讯飞语音识别时出现的问题。
因为需求,打算使用识别的实时返回结果的方式,进行类似同传的效果(一边识别一边返回结果,然后把返回结果进行翻译,并通过语音合成播放出来)的时候,出现了下面的错误:
[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
以上.
然后就是让项目跑起来!
测试 -> 完美实现。
网友评论