AVAudioUnitEQ / .BandPass filter doesn't work

别等时光非礼了梦想. 提交于 2019-12-11 03:26:41

问题


I can't get the AVAudioUnitEQ to work.

Here's a piece of code that should filter out everything except 659.255Hz +/-0.05 octaves:

// Create Audio Engine

var audioEngine = AVAudioEngine()

// Create Equalizer Node

var equalizerNode = AVAudioUnitEQ(numberOfBands: 1) 
var epualizerParameters: AVAudioUnitEQFilterParameters = equalizerNode.bands.first as AVAudioUnitEQFilterParameters
epualizerParameters.filterType = .BandPass
epualizerParameters.frequency = 659.255
epualizerParameters.bandwidth = 0.05
epualizerParameters.bypass = false
audioEngine.attachNode(equalizerNode)

// Configure Audio Engine

var format = audioEngine.inputNode.inputFormatForBus(0)
audioEngine.connect(audioEngine.inputNode, to: equalizerNode, format: format)
audioEngine.connect(equalizerNode, to: audioEngine.outputNode, format: format)


// Start Audio Engine

var error:NSError?
audioEngine.startAndReturnError(&error)

However, when I run it, put on my headphones and sing into the microphone, I can hear myself loud and clear.

Now, according to Wikipedia, the Band Pass filter is:

... a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range.

What am I doing wrong? I want to filter out everything except given frequency range.


回答1:


It was your EQ params.

I created a github project with sliders and switches. You can hear the difference. Try it.




回答2:


This works in my project which uses a playerNode.

var format =  engine.mainMixerNode.outputFormatForBus(0)
engine.connect(playerNode, to: EQNode, format: format )
engine.connect(EQNode, to: engine.mainMixerNode, format: format)

I see you're using the engine's inputNode. Try swapping out these few lines (hook into the mixer instead of the outputNode) and let us know if it works.



来源:https://stackoverflow.com/questions/25688556/avaudiouniteq-bandpass-filter-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!