Low recording volume in combination with AVAudioSessionCategoryPlayAndRecord

Viewed 11049

When I set:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];

…recording and playing works fine, just the playback volume is around 60% lower than when I would just play the same sound without recording and settings PlayAndRecord.

I need to get high volume peaks (to check if a user blow in the mic) for that i started a recording session. But without settings AVAudio..PlayandRecord, i can not playback any sounds in the meantime. Thats the reason i implemented this command.

Any Help?

Thx Chris

7 Answers

For everyone with the same problem, redirect your output to the speaker:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
    sizeof(audioRouteOverride), &audioRouteOverride);

That works.

I ran into this today, and most of the answers don't seem to apply to recent iOS changes. Lucian's answer above with the defaultToSpeaker option is correct, although still seems to behave differently in Simulator and on the device from time to time. What helped for me was to set category, mode and options in one call, which is available in iOS 10+ like this:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeDefault, options: .defaultToSpeaker)

Using this audio was all the way up to maximum and stayed that way.

In my case in addition to using AVAudioSessionCategoryOptionDefaultToSpeaker option I had to remove changing audioSession mode from AVAudioSessionModeDefault to AVAudioSessionModeMeasurement.

So if you are using modes other than AVAudioSessionModeDefault, be careful.

Related