Audiobus: Use your music apps together.
What is Audiobus? — Audiobus is an award-winning music app for iPhone and iPad which lets you use your other music apps together. Chain effects on your favourite synth, run the output of apps or Audio Units into an app like GarageBand or Loopy, or select a different audio interface output for each app. Route MIDI between apps — drive a synth from a MIDI sequencer, or add an arpeggiator to your MIDI keyboard — or sync with your external MIDI gear. And control your entire setup from a MIDI controller.
Download on the App StoreAudiobus is the app that makes the rest of your setup better.
Comments
I see. AUM currently does not look at an AU's
channelCapabilities
, and just tries a stereo config. But it should not hang if the config was not accepted by the AU. Did you try this with the recent version?Using
channelCapabilities
would require the user to start loading of a plugin before getting to choose between mono/stereo. It would be nicer if it could be queried without instantiating it, perhaps via the app extension Info.plist. I don't think there's any standard for that though.No, this was definitely on older versions of all the hosts I tested in. Since it became pretty obvious to me that stereo-stereo processing was the de facto standard on iOS, I changed the AU's I was working to support it and just went with it for the things I've worked on since. It would be pretty easy for me to test this again but I haven't seen the need to.
Yeah, it's definitely not ideal. I don't know of any other way to do it though. That's part of the reason that I think the macOS based hosts do some scanning and caching to get this info. The other reason I think they might do this is the AU validation tool thing on macOS and the way it get's used. I am just guessing here though. I should do some more investigation. It might be helpful for me to attach a debugger to the channelCapabilities property of a test AU and mess with the version numbers and see when it gets called.
However, I think a way to do it would be to allow the user to set a preferred stereo/mono config before selecting AU's to load, and only when loading it would check if the AU could be instantiated with that config or not. It wouldn't even need to check channelCapabilities, it could just try and see if allocateRenderResources fails or not. (Since I guess most iOS AU's out there in the wild does not set channelCapabilities..)
This sounds like a reasonable approach to me. It might be a problem if some AU's don't check the channel configurations on the busses in allocateRenderResources. Maybe a check on channelCapabilities before you do allocateRenderResources to catch those that do set the channelCapabilities param would help. Checking in the debugger on the default value of channelCapabilities before I set it I get that it is set to nil. So, if you see a nil value you could try doing the allocate call and see if it passes. I think you are right that there are going to be AU's on iOS that don't set the parameter, but those that are coming over from macOS should.
I've been doing some sifting through the AVFoundation header files and come across something that is related and indicates why this is more common on macOS hosts. On macOS, AVAudioUnitComponent has a call, supportsNumberInputChannels(_:outputChannels:) -> Bool, that isn't available on iOS and there is a parameter passesAUVal that is also not available on iOS. So, I'm guessing that the reason that it is more painful on the iOS side is the lack of the auval tool.
Sure, that sounds like the safest way. However, setting channelCapabilities is optional (as far as I know), while checking that the bus format is supported in allocateRenderResources is not optional - a plugin that doesn't do that will be considered buggy until fixed!
Ah, good find!
@brambos
Would it be possible (UI & technically) to add main out to multiout version of Ruismakers, so it's switchable instead of 'all or nothing'
In most cases I don't need all outputs only 1-2 and looking for ways to reduce channel count.
Actually never mind, sorry
I guess you would have gone that route in the first place if it wouldn't require too much rework...