title: Silence when adding kAudioUnitSubType_MultiChannelMixer to AUGraph
body: <p>I'm having trouble inserting a mixer unit into an <code>AUGraph</code> that otherwise works OK on both Mac OS and iOS.</p>
  
  <p>My working graph looks like this:</p>
  
  <pre><code>(My Audio render callback) &lt;- [Format converter] &lt;- [DefaultOutput]
  </code></pre>
  
  <p>In addition, I'm able to successfully insert an EQ unit like this: </p>
  
  <pre><code>(My Audio render callback) &lt;- [Format converter] &lt;- [GraphicEQ] &lt;- [DefaultOutput]
  </code></pre>
  
  <p>My goal is to insert a mixer unit but no EQ so I can control the volume of my graph independently of the system volume on iOS. However, when I set up the graph it seems to <em>look</em> OK, but all I get is silence.</p>
  
  <p>Here's what the graph looks like: </p>
  
  <pre><code>(My Audio render callback) &lt;- [Format converter] &lt;- [MultiChannelMixer] &lt;- [DefaultOutput]
  </code></pre>
  
  <p>…and the output of CAShow:</p>
  
  <pre><code>AudioUnitGraph 0x397000:
    Member Nodes:
      node 1: 'auou' 'def ' 'appl', instance 0x8039704d O I
      node 2: 'aumx' 'mcmx' 'appl', instance 0x8039704e O I
      node 3: 'aufc' 'conv' 'appl', instance 0x8039704f O I
    Connections:
      node   3 bus   0 =&gt; node   2 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
      node   2 bus   0 =&gt; node   1 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    Input Callbacks:
      {0x100035d90, 0x10037cd60} =&gt; node   3 bus   0  [2 ch, 44100 Hz]
    CurrentState:
      mLastUpdateError=0, eventsToProcess=F, isRunning=T (1)
  </code></pre>
  
  <p>And, finally, the code that's setting up the graph with error-checking and iOS-specific code removed: </p>
  
  <pre><code>// A description of the output device we're looking for.
  AudioComponentDescription outputDescription;
  outputDescription.componentType = kAudioUnitType_Output;
  outputDescription.componentSubType = kAudioUnitSubType_DefaultOutput;
  outputDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
  outputDescription.componentFlags = 0;
  outputDescription.componentFlagsMask = 0;
  
  // A description of the mixer unit
  AudioComponentDescription mixerDescription;
  mixerDescription.componentType = kAudioUnitType_Mixer;
  mixerDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer;
  mixerDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
  mixerDescription.componentFlags = 0;
  mixerDescription.componentFlagsMask = 0;
  
  // A description for the libspotify -&gt; standard PCM device
  AudioComponentDescription converterDescription;
  converterDescription.componentType = kAudioUnitType_FormatConverter;
  converterDescription.componentSubType = kAudioUnitSubType_AUConverter;
  converterDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
  converterDescription.componentFlags = 0;
  converterDescription.componentFlagsMask = 0;    
  
  // Create an AUGraph
  OSErr status = NewAUGraph(&amp;audioProcessingGraph);
  
  // Open the graph. AudioUnits are open but not initialized (no resource allocation occurs here)
  AUGraphOpen(audioProcessingGraph);
  
  // Add audio output...
  status = AUGraphAddNode(audioProcessingGraph, &amp;outputDescription, &amp;outputNode);
  
  // Add mixer
  status = AUGraphAddNode(audioProcessingGraph, &amp;mixerDescription, &amp;mixerNode);
  
  // Get mixer unit so we can change volume etc
  status = AUGraphNodeInfo(audioProcessingGraph, mixerNode, NULL, &amp;mixerUnit);
  
  // Set mixer bus count
  UInt32 busCount = 1;
  status = AudioUnitSetProperty(mixerUnit, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &amp;busCount, sizeof(busCount));
  
  // Create PCM converter
  status = AUGraphAddNode(audioProcessingGraph, &amp;converterDescription, &amp;inputConverterNode);
  
  // Connect converter to mixer
  status = AUGraphConnectNodeInput(audioProcessingGraph, inputConverterNode, 0, mixerNode, 0);
  
  // Connect mixer to output
  status = AUGraphConnectNodeInput(audioProcessingGraph, mixerNode, 0, outputNode, 0);
  
  // Set render callback
  AURenderCallbackStruct rcbs;
  rcbs.inputProc = AudioUnitRenderDelegateCallback;
  rcbs.inputProcRefCon = (__bridge void *)(self);
  
  status = AUGraphSetNodeInputCallback(audioProcessingGraph, inputConverterNode, 0, &amp;rcbs);
  
  // Init Queue
  status = AUGraphInitialize(audioProcessingGraph);
  
  AUGraphUpdate(audioProcessingGraph, NULL);
  AUGraphStart(audioProcessingGraph);
  </code></pre>