Praxder
Praxder

Reputation: 2779

AVAudioSession record while playing weird issue

For part of an app that I'm making I need to record audio from the user. I have chosen to use AVAudioRecorder to do this.

The problem is that when I start to record audio, all audio playing on the device is paused. I then looked in the Apple docs for AVAudioSession and set the recording options to be: AVAudioSessionCategoryOptionMixWithOthers.

The problem is that whenever I start recording, any audio playing on the device switches from the main external speaker to the small phone (call) speaker.

My goal is to record audio while still allowing all other audio from the device to be outputted through the main speaker.

How can I achieve this?

Here's my code currently:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
    [audioSession setActive:YES error:&error];

    recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];

    if(recorder != nil){
        [recorder prepareToRecord];
        recorder.meteringEnabled = YES;
        [recorder record];
        levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES];
    }else{
        NSLog(@"Error: %@",[error description]);
    }//end if

Thanks!

Upvotes: 2

Views: 874

Answers (1)

spassas
spassas

Reputation: 4818

Maybe you can try using AVAudioSessionCategoryOptionDefaultToSpeaker. According to the AVAudioSession reference:

When using this option and no other audio route (such as a headset) is available, session audio will play through the device’s built-in speaker. When not using this option, and no other audio output is available or selected, audio will play through the receiver (a speaker intended to be held to the ear).

Upvotes: 2

Related Questions