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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux双网卡架设FTP,LINUX系统上架设FTP服务器[通俗易懂]

    linux双网卡架设FTP,LINUX系统上架设FTP服务器[通俗易懂]CentOS上搭建FTP服务器服务器软件:vsftpd简要说明:vsftpd是linux下的一款小巧轻快,安全易用的FTP服务器软件,是一款在各个LINUX发行版中最受推崇的FTP服务器软件。至于它的安装教程,网络上也是数不胜数,每个教程都有各自的优缺点,祥哥特意做了个总结,取别人之长处,尽量做到菜鸟级别的教程。当你看见祥哥的这篇文章,能更好的使用和运用VSFTPD。下面正题开始。安装vsftpd…

  • java jsonarray string,java json字符串转JSONObject和JSONArray以及取值的实例「建议收藏」

    java jsonarray string,java json字符串转JSONObject和JSONArray以及取值的实例「建议收藏」javajson字符串转JSONObject和JSONArray以及取值的实例实现代码:importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;publicclassJsonTest{publicstaticvoidmain(String[]args){StringjoStr=”{name:\”张三\”,age:…

  • git log 查看 当前分支的 提交历史[通俗易懂]

    git log 查看 当前分支的 提交历史[通俗易懂]gitlog查看当前分支的提交历史在提交了若干更新之后,想回顾下提交历史,可以使用gitlog命令查看默认不用任何参数的话,gitlog会按提交时间列出所有的更新,最近的更新排在最上面。看到了吗,每次更新都有一个SHA-1校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。gitlog有许多选项可以帮助你搜寻感兴趣的提交,接下来我们…

  • java如何打印数组的值,Java打印数组元素的值[通俗易懂]

    java如何打印数组的值,Java打印数组元素的值[通俗易懂]本篇文章帮大家学习java打印数组元素的值,包含了Java打印数组元素的值使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。以下实例演示了如何通过重载MainClass类的printArray方法输出不同类型(整型,双精度及字符型)的数组:publicclassMainClass{publicstaticvoidprintArray(Integer[…

  • java运行时异常的特点是什么_java运行时异常与一般异常

    java运行时异常的特点是什么_java运行时异常与一般异常1,java.lang.NullPointerException这个异常的解释是”程序遇上了空指针”,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。2,java.lang.ClassNotFoundException异常的解释是”指定的类不存在”,这里主要考虑一下类的名称和路径是否正确即可…

  • 现代数字图像处理作业———对lena图像进行简单处理[通俗易懂]

    现代数字图像处理作业———对lena图像进行简单处理[通俗易懂]对lena图像加入椒盐噪声,强度为30%,分别采用均值滤波,中值滤波进行处理。并讨论不同尺度的模板对结果的影响。

发表回复

您的电子邮箱地址不会被公开。

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