Ios 安装轻触音频引擎输入节点时出错

Ios 安装轻触音频引擎输入节点时出错,ios,swift,audio-recording,avaudioengine,avaudiofile,Ios,Swift,Audio Recording,Avaudioengine,Avaudiofile,只要代码到达 inputNode.installTap(onBus:0,bufferSize:1024,format:recordingFormat){[weak self](buffer:AVAudioPCMBuffer,when:AVAudioTime),应用程序因以下错误而崩溃 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“必需条件为false:format.sampleRate==hwFormat.sampleRate” 在添加另一个

只要代码到达
inputNode.installTap(onBus:0,bufferSize:1024,format:recordingFormat){[weak self](buffer:AVAudioPCMBuffer,when:AVAudioTime)
,应用程序因以下错误而崩溃

由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“必需条件为false:format.sampleRate==hwFormat.sampleRate”

在添加另一个水龙头之前,我已经厌倦了移除水龙头,我要确保我不会添加多个水龙头。 奇怪的是,该应用程序在iOS小于12的情况下运行良好,在所有模拟器上运行良好

它只在使用iOS 12的真实设备上崩溃。
我试图寻找解决方案,但找不到任何东西。

这是采样率不匹配

无法更改输入节点的格式,因此您需要匹配它。
installTap
侦听节点的输出,因此请使用inputNode的输出格式

inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputNode.outputFormat(forBus: 0))

另一种选择是将输入连接到混音器,然后使用首选录制格式轻触混音器。混音器在其输入和输出之间执行隐式采样率转换。

我发现唯一能改变采样率的方法是

AVAudioSettings.sharedInstance().setPreferredSampleRate(...)
不幸的是,虽然8000、12000、16000、22050、44100似乎都有效,但无法保证您将获得所需的采样率

以下情况不起作用:

  • 在tap off engine.inputNode中设置我的自定义格式。(例外,与OP相同)
  • 添加自定义格式的混音器并点击该混音器。(例外)
  • 添加混音器,将其连接到inputNode的格式,将混音器连接到使用我的自定义格式的主混音器,然后删除outputNode的输入,以便不将音频发送到扬声器并获得即时反馈。(工作正常,但得到全零)
  • 在AVAudioEngine中根本不使用我的自定义格式,并使用AVAudioConverter从我的tap中的硬件速率转换。(缓冲区长度未设置,无法判断结果是否正确)

  • 这是在iOS 12.3.1中出现的。

    我遇到了完全相同的问题。之前没有问题。iOS 12 real设备开始崩溃。但是,修复程序对mehi@user6631314不起作用。您是否解决了这个问题,在没有自己解释的情况下停止复制粘贴