6

I am developing an iOS app wherein I should be able to record a sound, save it to the filesystem and then play it back from the disk. When I try to play the file off the disk, I could barely hear anything. The volume is too low. But I'm pretty sure I'd set the device volume to max. I am using AVAudioRecorder and AVAudioPlayer` for recording and playing.

Could someone please point out what the issue could be?

stack2012
  • 2,118
  • 2
  • 16
  • 23

3 Answers3

12

For most the solution here will probably be to use the .defaultToSpeaker option with the AVAudioSessionCategoryPlayAndRecord category:

try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.defaultToSpeaker])

But for me the issue turned out to be that a different component in my app was setting the AVAudioSessionModeMeasurement mode on the audio session, which for whatever reason reduces the output volume.

John Scalo
  • 3,010
  • 1
  • 25
  • 33
  • swift 5: try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.allowBluetooth, .defaultToSpeaker]) – Ning Jul 30 '20 at 01:38
2

Set category of AVAudioSession using this method

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
Mehsam Saeed
  • 235
  • 2
  • 13
0

try this code. I think setMode fixes my issue.

NSError * outError = nil;
AVAudioSession * session = [AVAudioSession sharedInstance];
[session setActive:NO error:nil];
[ session overrideOutputAudioPort: AVAudioSessionPortOverrideSpeaker error:&outError];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
[session setMode:AVAudioSessionModeSpokenAudio error:nil];
[session setActive:YES error:nil];
if(outError){
    NSLog(@"speak error %@", outError);
}
John-L
  • 21
  • 1
  • 2