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


相关推荐

  • 实现一个基于tcc/tlink的简单的编译链接工具

    实现一个基于tcc/tlink的简单的编译链接工具

    2021年9月4日
    67
  • qt服务器主动断开tcp连接_qtcpsocket 多线程

    qt服务器主动断开tcp连接_qtcpsocket 多线程简述对于一个C/S结构的程序,客户端有些时候需要实时得知与服务器的连接状态。而对于客户端与服务器断开连接的因素很多,现在就目前遇到的情况进行一下总结。分为下面六种不同情况客户端网线断开客户端网络断开客户端通过HTTP代理连接服务器,代理机器断开代理客户端通过HTTP代理连接服务器,代理机器的网络断开客户端通过HTTP代理连接服务器,代理机器的网线断开服务器断开同时对于以上六种情况又分为连接服务器之…

    2022年9月9日
    0
  • notepad++正则表达式替换字符串

    notepad++正则表达式替换字符串则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它能很好提高工作效率。EditPlus的查找,替换,文件中查找支持以下的正则表达式:表达式说明/t制表符./n新行..匹配任意字符.|匹配表达式左边和右边的字符.例如,”ab|bc”匹配”ab”或者”bc”….

    2022年5月17日
    41
  • anaconda+pycharm的安装与配置教程

    anaconda+pycharm的安装与配置教程注:anaconda是自带Python解释器和Python编辑器于一身的,但是Python编辑器中pycharm更好用,所以本教程是写给自己的,每次重新安装anaconda和pycharm的时候有的要注意的地方都记不住了1.安装anaconda1.1.去官网下载anaconda的安装包(官网:https://www.anaconda.com/products/individual)在官网下载很忙的话可以去这里https://mirrors.tuna.tsinghua.edu.cn/下1.2.安装过

    2022年8月28日
    0
  • 我的python之路6(基础练习)

    我的python之路6(基础练习)恢复内容开始1、执行Python脚本的两种方式打开Windows命令提示符二、使用其它集成开发工具进行PYTHON程序的开发,如Eclips\Pycharm等,使用这种集成开发工具开发时,那都

    2022年7月5日
    15
  • IOS如何发送大文件到QQ[通俗易懂]

    IOS如何发送大文件到QQ[通俗易懂]很多人问IOS的文件要怎么传到QQ,这里以在微信中打开的文件为例讲解一下:打开文件后选择使用其他应用打开→找到QQ的图标后长按图标→接着在弹出的两个选项中,选择用APP打开即可。详见图解:…

    2022年7月11日
    84

发表回复

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

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