[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.

關(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容