iOS AUGraph connecting kAudioUnitSubType_Reverb2 unit between Mixer and kAudioUnitSubType_RemoteIO

0

In my AuGraph I have following situation:

sampler --------->

                mixer ----> remoteIO

6 callbacks ----->

AudioUnitGraph 0x311E02A:   
Member Nodes:   
   node 1: 'auou' 'rioc' 'appl', instance 0xc66c020 O       
   node 2: 'aumx' 'mcmx' 'appl', instance 0x598f20 O    
   node 3: 'aumu' 'samp' 'appl', instance 0x59ba40 O    
Connections:    node   3 bus   0 => node   2 bus   7  [ 2 ch,  44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]  
                node   2 bus   0 => node   1 bus   0  [ 2 ch,      0 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]   
Input Callbacks:    {0x1a7bb1, 0xd1f5648} => node   2 bus   0  [1 ch, 44100 Hz]
                    {0x1a7bb1, 0xd1f5648} => node   2 bus   1  [1 ch, 44100 Hz]     {0x1a7bb1, 0xd1f5648} => node   2 bus   2  [1 ch, 44100 Hz]     
                    {0x1a7bb1, 0xd1f5648} => node   2 bus   3  [1 ch, 44100 Hz]     
                    {0x1a7bb1, 0xd1f5648} => node   2 bus   4  [1 ch, 44100 Hz]     
                    {0x1a7bb1, 0xd1f5648} => node   2 bus   5  [1 ch, 44100 Hz]           
                    {0x1a7bb1, 0xd1f5648} => node   2 bus   6  [1 ch, 44100 Hz]

And everything is working fine, nevertheless formats don't match. Callbacks work and sampler sounds like a charm.

Now I try to plug in reverb like this:

sampl->

mixer ----> reverb --> remoteIO

6 call-->

And I get this graph:

AudioUnitGraph 0x313402A:
  Member Nodes:
    node 1: 'auou' 'rioc' 'appl', instance 0x569060 O  
    node 2: 'aumx' 'mcmx' 'appl', instance 0x56a210 O  
    node 3: 'aumu' 'samp' 'appl', instance 0x56b200 O  
    node 4: 'aufx' 'rvb2' 'appl', instance 0x56ba30 O  
  Connections:
    node   3 bus   0 => node   2 bus   7  [ 2 ch,  44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
    node   2 bus   0 => node   4 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   4 bus   0 => node   1 bus   0  [ 2 ch,      0 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]

    Input Callbacks: (the same as before)

And the error: AUGraphInitialize error: -10868*

Connection code:

result = AUGraphConnectNodeInput ( processingGraph,
            mixerNode,         // source node
             0,                 // source node output bus number
             revNode,            // destination node
             0                  // desintation node input bus number
         );


result = AUGraphConnectNodeInput ( processingGraph,
                                                                    revNode,         // source node
                                                                    0,                 // source node output bus number
                                                                    iONode,            // destination node
                                                                    0                  // desintation node input bus number                                                         );

Also I tried to unify formats for Reverb and Mixer:

AudioStreamBasicDescription asbd;
UInt32 asbdSize = sizeof (asbd);
memset (&asbd, 0, sizeof (asbd));

AudioUnitGetProperty(mixerUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &asbd, &asbdSize);
AudioUnitSetProperty(reverbUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &asbd, sizeof(asbd));

What am I doing wrong? Sorry for the bad formatting, joined today.

ios5
audio
core-audio
asked on Stack Overflow Aug 30, 2012 by LielisksLatvietis • edited May 6, 2013 by Beleg

1 Answer

3

I had the same problem, but found out that I had to copy the ASBD from one of the units at the mixer input and set it to the output scope of the mixer unit.

AudioStreamBasicDescription asbd;
UInt32 sz = sizeof(asbd);
result = AudioUnitGetProperty(someUnitBeforeMixer, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &asbd, &sz);
NSCAssert (result == noErr, @"Unable to get ASBD. Error code: %d '%.4s'", (int) result, (const char *)&result);
result = AudioUnitSetProperty(mixerUnit,
                              kAudioUnitProperty_StreamFormat,
                              kAudioUnitScope_Output,
                              0,
                              &asbd,
                              sizeof(asbd));
NSCAssert (result == noErr, @"Unable to set ASBD. Error code: %d '%.4s'", (int) result, (const char *)&result);

Instead of copying the ASBD, you could set it up manually if you know what format it should be.

answered on Stack Overflow Oct 5, 2012 by Jonatan Liljedahl

User contributions licensed under CC BY-SA 3.0