Hmm. I think if this were my thing, I would drop the idea of switching between two IOs because that sounds a bit complex to me as an approach, and put all the energy into debugging why VPIO is quiet, because there is no intrinsic reason that its playback should be quieter than remoteIO.
I might check this out by first writing a _really_ simple app that does nothing but set up a VPIO and plays something back to see if it is always an issue or if it is an issue due to something in AudioSessionManager, and start building up the code until it exhibits the bad behavior. If the simplest possible version exhibits the bad behavior, I’d add a really simple remoteIO version for comparison to show the expected behavior and send it to Apple DTS and ask them why they play back at different volumes and if you need to change any code.
Does it help if you give whatever you are playing back an explicit volume level?
The echo cancellation works perfectly. It’s amazing.
Good to know, this should probably be reexamined.