[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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络流量统计技术

    网络流量统计技术一、netstream“NetStreamNetStream技术应用背景Internet的高速发展为用户提供了更高的带宽,支持的业务和应用日渐增多,传统流量统计如SNMP、端口镜像等,由于统计流量

    2022年7月4日
    24
  • 记录一次XordDos(BillGates)木马导致Centos kworker线程占满CPU资源的解决过程「建议收藏」

    记录一次XordDos(BillGates)木马导致Centos kworker线程占满CPU资源的解决过程「建议收藏」1.问题现象​ 通过top命令查看资源占用发现有大量kworker线程占用CPU资源,如下图。怀疑是系统问题或平台程序导致的问题。2.是否是程序导致的论证过程​ 因平台有两部分组成socket+web端,考虑可能是两者中的一个导致的,因此采用以下三种方式验证:​ [1]只关掉socekt端,问题依旧出现​ [2]只关掉web端,问题依旧出现​ [3]全部关掉,问题依旧出现​ …

    2022年9月15日
    0
  • HTML点击按钮button跳转页面的几种实现方法

    HTML点击按钮button跳转页面的几种实现方法其实我比较喜欢第一种方法<buttononclick=”window.location.href=’../routeEdit/index.html'”type=”button”id=”add”>新增</button>方法一:在button标签中加上onclick属性,赋值为Javascript<inputtype=”button”name=”regi…

    2022年10月23日
    0
  • 网页文字不可以复制_html5实现复制粘贴

    网页文字不可以复制_html5实现复制粘贴大家在上网的时候是否曾经遇到过网页文字无法复制的情况呢?为什么网页文字无法复制呢?或者问如何把不能复制的网页文字复制下来呢?其实,网页文字不能复制原因大部分是网页的制作者为了防止网页内容被被人盗用而设置了复制限制,在网页中嵌入了Javascript语言,通过编程的手段屏蔽了复制功能。下面小编给大家分享下如何把被限制复制的网页文字复制下来。本方法以IE浏览器为例子,打开IE浏览器链接到需要访问的网页…

    2022年10月13日
    0
  • pycharm2021.12.13 10月29 激活码【2021.10最新】

    (pycharm2021.12.13 10月29 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1435QFILVV-eyJsaWN…

    2022年3月30日
    33
  • python中decode和encode的区别_python中decode和encode区别

    python中decode和encode的区别_python中decode和encode区别#-*-coding:utf-8importsys”’*首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb231…

    2022年10月7日
    0

发表回复

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

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