iOS: Deprecation of AudioSessionInitialize and AudioSessionSetProperty

avaudiosession, ios7, objective-c

Solution

As you have observed, pretty much all of the old Core Audio AudioSession functions have been deprecated in favour of AVAudioSession.

The AVAudioSession is a singleton object which will get initialised when you first call it:

[AVAudioSession sharedInstance]

There is no separate `initialize` method. But you will want to activate the audio session:

BOOL activated = [[AVAudioSession sharedInstance] setActive:YES error:&error];

As regards setting the hardware sample rate using `AVAudioSession`, please refer to my answer here: How can I obtain the native (hardware-supported) audio sampling rates in order to avoid internal sample rate conversion?

For other compares & contrasts between Core Audio audioSession and AVFoundation's AVAudioSession here are some of my other answers around the same topic:

How Do I Route Audio to Speaker without using AudioSessionSetProperty?

use rear microphone of iphone 5

Play audio through upper (phone call) speaker

How to control hardware mic input gain/level on iPhone?

Problem

I'm very new to Objective-C, and am trying to update some code that's about 3 years old to work with iOS 7. There are two or two instances of `AudioSessionSetProperty` and `AudioSessionInitialize` appearing in the code: 1: ``` - (void)applicationDidFinishLaunching:(UIApplication *)application { AudioSessionInitialize(NULL,NULL,NULL,NULL); [[SCListener sharedListener] listen]; timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(tick:) userInfo:nil repeats: YES]; // Override point for customization after app launch [window addSubview:viewController.view]; [window makeKeyAndVisible]; } ``` And 2: ``` - (id)init { if ([super init] == nil){ return nil; } AudioSessionInitialize(NULL,NULL,NULL,NULL); Float64 rate=kSAMPLERATE; UInt32 size = sizeof(rate); AudioSessionSetProperty (kAudioSessionProperty_PreferredHardwareSampleRate, size, &rate); return self; } ``` For some reason this code works on iOS7 in the simulator but not a device running iOS7, and I suspect that these deprecations are the cause. I've been reading through the Docs and related questions on this website, and it appears that I need to use `AVAudioSession` instead. I've been trying to update the code for a long time now, and I'm unsure of how to properly switch over to `AVAudioSession`. Does anyone know how these two methods above need to look? Side note: I've managed to hunt down an article that outlines the transition: https://github.com/software-mariodiana/AudioBufferPlayer/wiki/Replacing-C-functions-deprecated-in-iOS-7 But I can't seem to apply this to the code above. The code I'm trying to update is a small frequency detection app from git: https://github.com/jkells/sc_listener Alternatively, if someone could point me to a sample demo app that can detect frequencies on iOS devices, that would be awesome.

Original source

Related problems