Whenever I start an AVCaptureSession running with the microphone as an input it cancels whatever background music is currently running (iPod music for instance). If I commen
You can use the AVAudioSessionCategoryOptionMixWithOthers
.
For instance,
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
After that, you can use the AVAudioPlayer
simultaneously with AVCaptureSession
.
However, the above code leads to very low volume.
If you want normal volume, use the AVAudioSessionCategoryOptionDefaultToSpeaker
with AVAudioSessionCategoryOptionMixWithOthers
as follows,
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
This goes well.
In your AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Stop app pausing other sound.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
}
Where you are allocating AVCaptureSession:
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.automaticallyConfiguresApplicationAudioSession = NO;
This code will allow you to play background music and run AVCaptureSession
with the microphone.
SWIFT UPDATE:
AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Stop app pausing other sound.
do{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord,
withOptions: [.DuckOthers, .DefaultToSpeaker])
}
catch {
}
return true
}
Where you are allocating AVCaptureSession:
let session = AVCaptureSession()
session.automaticallyConfiguresApplicationAudioSession = false