JUCE 断言失败 - iOS 上的 IIRFilter

Posted

技术标签:

【中文标题】JUCE 断言失败 - iOS 上的 IIRFilter【英文标题】:JUCE assertion failure - IIRFilter on iOS 【发布时间】:2017-12-14 01:20:41 【问题描述】:

我在 ios 音频应用程序中遇到了 IIRFilter 问题。

我在更改滑块时使用了 setCoefficients 方法,但是当我移动滑块时,我会发出噼啪声,然后应用程序冻结,并且出现 Juce 断言失败。

IIRFilter Assertion Error

这里是我改变系数以对应频率滑块的地方:

Changing filter coefficient on sliderValueChanged

但我不明白它是如何失败的。我在 MainContentComponenet 构造函数中将 lpfSlider 的范围设置为 20 到 20k:

Setting range for Frequency slider

据我了解,来自麦克风的 iOS 音频数据以 44.1 kHz 采样。

这是我在 prepareToPlay() 中定义全局采样率 fs 的地方:

Setting global sample rate

那么为什么这个断言失败了?

有人知道这里发生了什么吗?

谢谢!

【问题讨论】:

【参考方案1】:

我在您的屏幕截图中搜索了断言,找到了 cpp 文件和断言。

jassert (frequency > 0.0 && frequency <= sampleRate * 0.5);

您对采样率的假设是错误的,或者您的滑块允许频率超出 Nyquist 或低于 0。

噼啪声是突然改变滤波器系数的自然副作用。

【讨论】:

嗨,Jaket,感谢您花时间帮我解决这个问题。我自己已经检查了断言。 Nyquist 绝对是 44.1k/2(我将preparetoplay 的采样率打印到屏幕上),我的滑块范围绝对是 20 到 20k。所以这里发生了其他事情。 你忽略了显而易见的事情。你打电话给makeLowPassFilter(frequency, sampleRate)makeLowPassFilter 断言失败。不管你怎么说,你的频率和/或采样率并不是你想象的那样。我将首先在调用makeLowPassFilter 之前放置两个单独的断言,一个关于频率,一个关于采样率。 你是对的。采样率为 22050。我只是对它为什么改变感到困惑..??我将滑块的最大范围设置为取决于采样率。谢谢! @AndrewDoss。很高兴你解决了。如果它对你有用,请接受这个答案。谢谢!

以上是关于JUCE 断言失败 - iOS 上的 IIRFilter的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 上的 -[UITableView layoutSublayersOfLayer:] 中的断言失败

选择器视图上的断言失败

UICollectionView 上的断言失败

没有堆栈时如何调试iOS断言失败崩溃

为啥直接实现的接口上的这种类型断言会失败?

UICollectionView + iOS 7 / Xcode 5 = 断言失败