低通滤波器

Jog*_*ngh 0 core-audio avfoundation ios swift avaudioengine

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

Seb*_*aan 5

欢迎来到 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
    }
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助。AVAudioEngine 的世界相当孤独,所以我想向您推荐这个免费的应用程序:Phonique

这是一个由真正的 AudioEngine 专业人士 Chris Davis 创建的应用程序,可让您轻松地使用 AVAudioEngine 进行实验以找到您的效果,然后检查他干净生成的代码以了解其连接方式。在这篇文章中,他解释了它是如何工作的。它并不总是提供对您自己的代码的替代,但它是了解如何连接事物的完美地方。祝你好运