AVAudioUnitEQ / .BandPass filter doesn't work

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:

  • iOS - Scale and crop CMSampleBufferRef/CVImageBufferRef
  • iOS : Call a method just one time
  • Determine which share extension was used
  • Parsing nested JSON objects with JSON Framework for Objective-C
  • The concept of file's owner,first responder, and application delegate in iPhone
  • How to invoke “Turn Off Airplane Mode” notification
  • // 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.

    2 Solutions Collect From Internet About “AVAudioUnitEQ / .BandPass filter doesn't work”

    It was your EQ params.

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

    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.