gpt4 book ai didi

ios - 如何避免以下错误 : AVAudioEngineGraph required condition is false: NULL ! = tap

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:24 25 4
gpt4 key购买 nike

我搜索了这个错误,但没有发现任何人有同样的错误。我很确定我知道这个错误意味着什么,但我不知道如何避免它。

基本上,我通过 MultipeerConnectivity 接到了一个电话。我正在使用 AVAudioEngine 录制音频并播放来自对等方的音频。

我注意到用户说话的时间与其他设备播放该音频所需的时间之间存在相当大的延迟,但我通过移除水龙头并重新安装它解决了这个问题。这完全消除了任何延迟。但是,有时它会引发错误。

我还允许用户将他们的麦克风静音,当他们点击静音时,水龙头被移除。一旦他们点击取消静音,水龙头就会重新安装。有时这也会引发同样的错误:

AVAudioEngineGraph.mm:2707: InputAvailable: 所需条件为 false: NULL != tap

虽然这个错误似乎完全是随机的。有时会发生,有时不会。我无法始终如一地重现错误。


我猜这是因为它试图在已经存在水龙头的地方安装水龙头,但我不知道如何避免它。我想我可以增加安装水龙头的总线,但这似乎不是最佳选择。

我还查看了 AVAudioInputNode 上是否有一个属性可以告诉我是否已经在特定总线上安装了一个水龙头,但我似乎没有找到任何东西。

有人遇到过这个问题吗?

最佳答案

如果您找到更好的解决方案,请告诉我它是什么。这不是一个 100% 完整的解决方案,但它是我能找到的最好的解决方案,因为我在这个问题上得到的帮助很少。

我找到了一些解决方法,但可能还有更好的解决方案。这并不能完全解决问题,自从我进行更改以来,我已经看到过一两次问题,但它确实减少了它发生的可能性。

基本上我所做的是当我移除水龙头时,确保等到它完成后再安装水龙头。在我的例子中,我有一个静音按钮,我确保不允许用户触摸按钮的速度快于水龙头被移除的速度。因此,只要触摸按钮,我就不允许按下任何按钮,直到移开水龙头,然后重新激活按钮。

其次,我不确定这有什么用,但是在 inputNode 上安装 tap 之前,我总是先调用 inputNode.reset() ,然后调用 inputNode.removeTap(onBus: 0),然后安装点击。

inputNode.reset()
inputNode.removeTap(onBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 4096, format: localInputFormat) {
...
}

关于ios - 如何避免以下错误 : AVAudioEngineGraph required condition is false: NULL ! = tap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com