Superpowered iOS Audio Output without using RemoteIO Audio Unit
While we created the Superpowered Audio SDK to replace all of Core Audio by Apple with a better performing, better sounding and radically easier alternative audio API --- at this point in time, you may just need an easily hackable iOS audio output solution.
As you might know, Core Audio's RemoteIO Audio unit with an unfortunately unfriendly API. And making RemoteIO audio unit output actually work is mind-numbingly boring and complex. Proper configuration, even by the best audio developers, needs tons of spaghetti code, and you need to handle many events as well.
Well, we know your pain, which is why we developed Superpowered iOS Audio Output to save you countless, frustrating days of development time and testing. The iOS audio output portion of Superpowered is completely open sourced, licensed under FreeBSD, there is a separate GitHub repo for it too, so you can modify and fork it at will. Based on our 5 years of iOS audio experience, more than 1 million users so far and hundreds of external audio devices tested, Superpowered iOS Audio Output has more than a few interesting properties:
- Compatible with iOS 5, 6 and 7.
- Handles all interruption events (phone call, clock or calendar alarm sounds, another app’s audio session, etc.).
- Multi-route input and output with easy channel mapping.
- Power-of-two buffer sizes in every case.
- Audio input implemented without the ugly red “recording” bar when not recording.
We’ve seen many interesting USB and HDMI audio devices (sound cards, DJ controllers, TVs, receivers) connected to iOS devices in the past years, and with some of them, very strange initialization quirks. Superpowered iOS Audio Output has a carefully tuned initialization method to handle any quirky initialization.
Sample rate is often an issue too, sometimes iOS tries to solve this with internal sample rate conversion and funky buffer sizes (eg 471, wtf?). Our solution detects this, and reconfigures the audio path to have “nice”, palatable values only (eg 512). The old famous “receiver fix” is included too, if you don’t want to output audio to the phone's 'ear speaker', it is trivial to change with a simple bool switch.