I don’t even understand with this process function stills “manually” does int/float and float/int conversions in the first place… CoreAudio contains highly optimized conversion code to do that.
The proper way to do all this iOS audio code would be to use an AudioUnit of kAudioUnitSubType_RemoteIO type, configure it to do duplex in a unique callback, configure it to directly get sample in float format and so on…
It’s been a long time since I’ve looked at this, but I seem to remember that using the ‘native’ stream format was required when accessing microphone input directly on iOS. I’m happy to be proven wrong though.