Posts

AVAudioSession Speaker Fix

Below is a code snipped that quickly solved what could have been a huge problem. In the development of the Affirmation Labs iOS App, I set a session up so my affirmation audio can loop and continue in the background regardless of home-button push and device lock. After this behemoth task and trickery was completed, I realized that during my AVAudioSession with Category set to AVAudioSessionCategoryPlayAndRecord, I had a huge issue with volume decreasing when the session was enabled. Once I created the fix for directing audio forcefully to the iOS speaker to retain my max volume level, I ran into another bug that certainly stumped me. When I would plug in headphones and unplug them during the audio session, the audio would revert off of the speaker and I would hear a huge decrease in iPhone audio. Much love to Jonas on StackOverflow for figuring this out and sharing it with the community. I’ve re-posted the code as a kickoff to my “Code” category on my blog as it certainly saved me a tone of time and investigation and is quite simple and elegant.

NSError *setCategoryErr = nil;

NSError *activationErr  = nil;

//Set the general audio session category

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryErr];

//Make the default sound route for the session be to use the speaker

//Jonas' Code Begins ---------------

UInt32 doChangeDefaultRoute = 1;

AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);

//Jonas' Code Ends ----------------

//Activate the customized audio session

[[AVAudioSession sharedInstance] setActive: YES error: &activationErr];