大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
在做语音识别功能时,AVAudioInputNode闪退。
问题
2020-11-26 09:55:40.405867+0800 Encompass[444:39363] [avae] AVAEInternal.h:76 required condition is false: [AVAudioIONodeImpl.mm:1158:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)]
Crashed at installTapOnBus…
// Configure the microphone input.
AVAudioInputNode *inputNode = self.audioEngine.inputNode;
//[inputNode removeTapOnBus:0];
AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];
[inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
if (weakSelf.recognitionRequest) {
[weakSelf.recognitionRequest appendAudioPCMBuffer:buffer];
}
}];
原因
有两种情况下会这样:
- 当audioEngine.isRunning是YES时,inputNode installTapOnBus:0…
- 在inputNode installTapOnBus:0…之前调用了audioEngine stop
audioEngine.isRunning
如果audioEngine.isRunning是YES状态时,再installTapOnBus:0会闪退。
当是audioEngine.isRunning状态时,下面的block回调还是在继续的,并没有停止。
[inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
if (weakSelf.recognitionRequest) {
[weakSelf.recognitionRequest appendAudioPCMBuffer:buffer];
}
}];
runing状态下再次installTapOnBus:0…导致了这个问题。
audioEngine removeTapOnBus
我出现这个问题的原因是,在调用installTapOnBus:0…前面调用了如下代码:
[self.audioEngine stop];
[self.audioEngine.inputNode removeTapOnBus:0];
在之后installTapOnBus的时候也执行了removeTapOnBus:0
[inputNode removeTapOnBus:0];
[inputNode installTapOnBus:0 bufferSize:1024 format:format block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
...
将stop注释掉,保留removeTapOnBus,也闪退了。将removeTapOnBus注释掉,留stop,没问题。
解决
- stop的时候不removeTapOnBus
[self.audioEngine stop];
我不知道为什么这样做会不闪退。
- stop removeTapOnBus nil
[self.audioEngine stop];
[self.audioEngine.inputNode removeTapOnBus:0];
self.audioEngine = nil;
直接将audioEngine对象释放掉,重新创建。可以看看Apple官方提供的Demo。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183653.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...