Note that there are some explanatory texts on larger screens.

plurals
  1. POSilence when adding kAudioUnitSubType_MultiChannelMixer to AUGraph
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload