> Date: Thu, 14 Apr 2016 09:35:04 -0500
> From: Lucas Goossen <[email protected]>
> To: CoreAudio API <[email protected]>
> Subject: Multiple RemoteIO
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset=us-ascii
>
> I would like to be able to have access to hardware while simletaiously 
> registering a remoteIO with IAA. I know this is possible becasue Audiobus 
> does this when you create a ABFilterPort with processBlock. The filter port 
> created has its own remoteIO that it uses for IAA under the hood, but I can 
> still use my own remoteIO for hardware. When I try to replicate this myself 
> by the whole AudioComponentFindNext - AudioComponentInstanceNew sequence the 
> second remoteIO seems to kill the first. What am i missing?

Yes, this is totally possible, and it's what I do in my app AUM - Audio Mixer:

I have a main RIO unit for hardware I/O, that I never publish as an
IAA connectable node.

    AudioComponentDescription cd = {kAudioUnitType_Output,
kAudioUnitSubType_RemoteIO, kAudioUnitManufacturer_Apple, 0, 0};
    AudioComponent comp = AudioComponentFindNext(NULL, &cd);
    OSStatus status = AudioComponentInstanceNew(comp, &unit);
    etc...
    And don't forget to AudioUnitInitialize() your unit.

I set the client-side streamFormat to non-interleaved float, with the
same number of input/output channels as the currently connected
hardware route.

Also I add a property listener on kAudioUnitProperty_StreamFormat to
be able to observe sample rate and channel-count changes and sync the
client-side stream format to avoid automatic sample-rate conversion by
the system. Also the usual enable IO for both input and output using
kAudioOutputUnitProperty_EnableIO, set
kAudioUnitProperty_MaximumFramesPerSlice to 4096, and set my main
render callback with kAudioUnitProperty_SetRenderCallback.

Then, I create 8 additional RIO units for my IAA output ports:

Same thing to create RIO units for these, except I disable input since
they are output ports and not filter ports. The render callback for
these units provide the audio to the host. I set the stream format to
stereo float using the current sample rate (and in the main RIO unit
StreamFormat listener callback I update the format on these IAA units
as well!)

Then I publish the IAA units, if using Audiobus this is taken care of
by creating an ABSenderPort for each unit and adding it to the
audiobusController.

I have some various developer notes regarding iOS audio and IAA here:
http://lijon.github.io

Important stuff regarding multiple IAA ports:
http://lijon.github.io/iaa_quirks.html

And how sample rates and stream formats work in IAA (there's actually
a chain of 3 different streamFormats, with 2 potential places for
sample rate conversion, in each direction of the host<->node audio
signal flow): http://lijon.github.io/iaa_sample_rates.html

-- 
/Jonatan
http://kymatica.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to