title: Connecting AVAudioMixerNode to AVAudioEngine
body: <p>I use AVAudioMixerNode to change audio format. <a href="https://stackoverflow.com/a/37547476/1517943">this</a> entry helped me a lot. Below code gives me data i want. But i hear my own voice on phone's speaker. How can i prevent it?</p>
  
  <pre><code>func startAudioEngine()
  {
      engine = AVAudioEngine()
  
      guard let engine = engine, let input = engine.inputNode else {
          // @TODO: error out
          return
      }
  
      let downMixer = AVAudioMixerNode()
      //I think you the engine's I/O nodes are already attached to itself by default, so we attach only the downMixer here:
      engine.attach(downMixer)
  
      //You can tap the downMixer to intercept the audio and do something with it:
      downMixer.installTap(onBus: 0, bufferSize: 2048, format: downMixer.outputFormat(forBus: 0), block:  //originally 1024
          { (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -&gt; Void in
  
              //i get audio data here
          }
      )
  
      //let's get the input audio format right as it is
      let format = input.inputFormat(forBus: 0)
      //I initialize a 16KHz format I need:
      let format16KHzMono = AVAudioFormat.init(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: 11025.0, channels: 1, interleaved: true)
  
      //connect the nodes inside the engine:
      //INPUT NODE --format-&gt; downMixer --16Kformat--&gt; mainMixer
      //as you can see I m downsampling the default 44khz we get in the input to the 16Khz I want
      engine.connect(input, to: downMixer, format: format)//use default input format
      engine.connect(downMixer, to: engine.outputNode, format: format16KHzMono)//use new audio format
  
      engine.prepare()
  
      do {
          try engine.start()
      } catch {
          // @TODO: error out
      }
  }
  </code></pre>