Jog*_*ngh 0 core-audio avfoundation ios swift avaudioengine
目前我正在使用 AVAudioEngine 从麦克风获取音频样本并成功实现 FFT。为了获得稳定的频率值,我还在 FFT 之前对音频样本实现了 Hann 窗。现在我想对音频样本实施低通滤波器以消除高频。我做了一些关于 iOS 中低通滤波器的研究,但大多数答案都是通过 AVAudioUnit 找到的。这让我很困惑,是否可以仅在 AVAudioEngine 中实现低通滤波器?可以对音频样本应用低通滤波器吗?如果是,我们需要遵循哪种方法?提前致谢。
欢迎来到 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 进行实验以找到您的效果,然后检查他干净生成的代码以了解其连接方式。在这篇文章中,他解释了它是如何工作的。它并不总是提供对您自己的代码的替代,但它是了解如何连接事物的完美地方。祝你好运
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |