[AVAudioIONodeImpl.mm:1158:SetOutputFormat: (format.sampleRate == hwFormat.s[通俗易懂]

[AVAudioIONodeImpl.mm:1158:SetOutputFormat: (format.sampleRate == hwFormat.s[通俗易懂]AVAudioInputNode闪退问题[AVAudioIONodeImpl.mm:1158:SetOutputFormat:(format.sampleRate==hwFormat.sCrashedatinstallTapOnBus…//Configurethemicrophoneinput.AVAudioInputNode*inputNode=self.audioEngine.inputNode;//[inputNoderemoveTapOnBus:0];AV.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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];
    }
}];

原因

有两种情况下会这样:

  1. 当audioEngine.isRunning是YES时,inputNode installTapOnBus:0…
  2. 在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,没问题。

解决

  1. stop的时候不removeTapOnBus
[self.audioEngine stop];

我不知道为什么这样做会不闪退。

  1. stop removeTapOnBus nil
[self.audioEngine stop];
[self.audioEngine.inputNode removeTapOnBus:0];
self.audioEngine = nil;

直接将audioEngine对象释放掉,重新创建。可以看看Apple官方提供的Demo。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183653.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Laravel DB批量更新的方法

    Laravel DB批量更新的方法Laravel DB批量更新的方法

    2022年4月24日
    63
  • 通俗、有逻辑的写一篇说下Xgboost的原理,供讨论参考

    通俗、有逻辑的写一篇说下Xgboost的原理,供讨论参考初看Xgboost,翻了多篇博客发现关于xgboost原理的描述实在难以忍受,缺乏逻辑性,写一篇供讨论。——以下是抛砖引玉。观其大略,而后深入细节,一开始扎进公式反正我是觉得效率不高,还容易打消人的积极性。首先说下决策树决策树是啥?举个例子,有一堆人,我让你分出男女,你依靠头发长短将人群分为两拨,长发的为“女”,短发为“男”,你是不是依靠一个指标“头发长短”将人群进行了划分,你就形成了一个

    2022年5月7日
    45
  • nginx启动停止命令[通俗易懂]

    nginx常用命令启动停止:先进入nginx目录,再进入子目录sbinnginx启动:./nginxnginx停止:./nginx-sstopnginx重新加载nginx.conf:./nginx-sreloadnginx查看nginx.conf配置是否正确:./nginx-t修改配置:先进入nginx目录,再进入子目录conf修改nginx.conf文件…

    2022年4月13日
    197
  • Ant Design setFieldsValue 无效问题

    Ant Design setFieldsValue 无效问题

    2020年11月9日
    886
  • 免费的ssl证书申请_微信小程序证书从哪里找

    免费的ssl证书申请_微信小程序证书从哪里找最近微信小程序很火,技术迷的我自然要选择跟风学习一下。按照微信小程序的官方文档,发出request请求链接地址必须为https。如果是使用http访问请求,那么在使用微信webapp开发工具时,如果像下面一样勾选“

    2022年10月1日
    2
  • python翻转字符串_Python字符串反转的3种方法

    python翻转字符串_Python字符串反转的3种方法前段时间看到 letcode 上的元音字母字符串反转的题目 今天来研究一下字符串反转的内容 主要有三种方法 1 切片法 最简洁的一种 切片法 defreverse1 s input 请输入需要反转的内容 returns 1 reverse1 运行结果 In 23 defreverse1 s input 请输入需要反转的内容 returns

    2025年7月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号