關(guān)于最近使用訊飛語音識(shí)別時(shí)出現(xiàn)的問題。
因?yàn)樾枨?,打算使用識(shí)別的實(shí)時(shí)返回結(jié)果的方式,進(jìn)行類似同傳的效果(一邊識(shí)別一邊返回結(jié)果,然后把返回結(jié)果進(jìn)行翻譯,并通過語音合成播放出來)的時(shí)候,出現(xiàn)了下面的錯(cuò)誤:
[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.
字面意思大致是說不能同時(shí)播放與錄音。
這就尷尬了,這大致是由于setActive沒有設(shè)置為 true 導(dǎo)致的。訊飛源碼不開放,所以沒法在里面實(shí)時(shí)修改。
這時(shí)想到使用分類重寫
-(BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError*_Nullable__autoreleasing*)outError {
return NO;
}
我認(rèn)為的分類是可以覆蓋super class的方法,所以新建分類 LSAudioSession,繼承于 AVAudioSession。
.h
#import? <AVFoundation/AVFoundation.h>? //這里默認(rèn)是AVFAudio/AVFAudio.h,但是這樣會(huì)有 not found 的錯(cuò)誤,既然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; //默認(rèn)是 NO,修改成 YES
}
@end
以上.
然后就是讓項(xiàng)目跑起來!
測(cè)試 -> 完美實(shí)現(xiàn)。