【问题标题】:Error when installing a tap on audio engine input node在音频引擎输入节点上安装水龙头时出错
【发布时间】:2018-12-14 11:50:05
【问题描述】:

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

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

我厌倦了在添加另一个水龙头之前移除水龙头,我确保我不会添加多个水龙头。 奇怪的是,该应用在低于 12 的 iOS 上运行良好,并且在所有模拟器上运行良好。

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

【问题讨论】:

    标签: ios swift audio-recording avaudioengine avaudiofile


    【解决方案1】:

    这是采样率不匹配。

    输入节点的格式不能改变,所以你需要匹配它。 installTap监听一个节点的输出,所以使用inputNode的输出格式。

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

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

    【讨论】:

    • 我遇到了完全相同的问题。早一点没问题。在 IOS 12 真实设备上开始崩溃。但是,修复对我不起作用
    【解决方案2】:

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

    AVAudioSettings.sharedInstance().setPreferredSampleRate(...)
    

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

    以下操作无效:

    1. 在分接 engine.inputNode 中设置我的自定义格式。 (例外,同OP)
    2. 使用我的自定义格式添加混音器并点击它。 (例外)
    3. 添加一个混音器,将其与 inputNode 的格式连接,将混音器连接到具有我自定义格式的主混音器,然后删除 outputNode 的输入,以免将音频发送到扬声器并获得即时反馈。 (有效,但全为零)
    4. 在 AVAudioEngine 中根本没有使用我的自定义格式,而是使用 AVAudioConverter 从我的 Tap 中的硬件速率进行转换。 (缓冲区的长度没有设置,无法判断结果是否正确)

    这适用于 iOS 12.3.1。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2021-10-17
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多