【问题标题】:Low pass filter低通滤波器
【发布时间】:2020-02-26 07:49:34
【问题描述】:

目前我正在使用 AVAudioEngine 从麦克风获取音频样本并成功实现 FFT。 对于稳定的频率值,我还在 FFT 之前在音频样本上实现了一个 Hann 窗口。 现在我想对音频样本实施低通滤波器以消除高频。 我对 iOS 中的低通滤波器做了一些研究,但大多数答案都是用 AVAudioUnit 找到的。 这让我很困惑,是否可以仅在 AVAudioEngine 中实现低通滤波器? 可以对音频样本应用低通滤波器吗? 如果是,我们需要遵循哪种方法? 提前致谢。

【问题讨论】:

    标签: ios swift avfoundation core-audio avaudioengine


    【解决方案1】:

    欢迎来到记录不充分的 AVAudioEngine 世界。

    不确定您是如何设置 AVAudioEngine 的,但作为快速浏览,我猜您会看到以下几行:

    创建引擎let engine = AVAudioEngine() 创建效果节点var equalizer = AVAudioUnitEQ(numberOfBands: 1) 附加节点engine.attach(equalizer) 连接节点engine.connect(equalizer, to: engine.mainMixerNode, format: audioFormat) 准备并启动发动机。 engine.prepare();try engine.start(); 您还将为您的音频样本附加并连接一个 playerNode。

    至于你的问题。 AVAudioUnits 是效果节点用来让 AVAudioEngine 操纵音频的子类。您可以通过您操作的节点间接将这些与 AVAudioEngine 一起使用。

    为了让 AVAudioEngine 操纵低通滤波器,您可以用一个波段(如上)实例化一个 AVAudioUnitEQ。然后使用改变滤波器频率的函数来操纵效果:

        func setLowPassFilter(frequency: Float){
            filter.bands[0].filterType = .lowPass
            filter.bands[0].frequency = frequency
            filter.bands[0].bypass = false
        }
    

    这些 AVAudioUnitEQ 效果的关键是设置 bypass = false,否则它会忽略你的效果。

    我希望这会有所帮助。 AVAudioEngine 的世界很寂寞,所以我想向您指出这个免费的应用程序:Phonique

    这是一款由真正的 AudioEngine 专业人士 - Chris Davis 创建的应用程序,可让您轻松试验 AVAudioEngine 以找到您的效果,然后检查他干净生成的代码以了解其连接方式。在this 帖子中,他解释了它是如何工作的。它并不总是为您自己的代码提供替代品,但它是查看应该如何连接的理想场所。祝你好运

    【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2011-05-29
    • 2019-04-29
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多