Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AVAudioRecorder in iOS 8 does not handle kAudioFormatMPEG4AAC

My code worked fine until iOS 8 kAudioFormatMPEG4AAC but now it creates an empty file. No errors are reported. When I changed it to kAudioFormatLinearPCM it works. This is my code:

recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
    [NSNumber numberWithInt: kAudioFormatLinearPCM], AVFormatIDKey,
    [NSNumber numberWithInt:16], AVEncoderBitRateKey,
    [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
    [NSNumber numberWithFloat:32000.0], AVSampleRateKey,
    nil];
like image 761
benny pollak Avatar asked Nov 27 '14 21:11

benny pollak


2 Answers

Please remove AVEncoderBitRateKey key from your settings dictionary and it will work on iOS8 with kAudioFormatMPEG4AAC.

It could be a specific correlation between AVEncoderBitRateKey and AVNumberOfChannelsKey. But I didn't play with parameters but used default bitrate value to get working recorder.

like image 76
malex Avatar answered Sep 27 '22 23:09

malex


That bitrate looks suspiciously low, even for kAudioFormatMPEG4AAC (16 bytes per second), maybe try 16000 or 64000 or more.

p.s. try the new Objective-C literals for your NSDictionarys, NSArrays and NSNumbers, I think they're an improvement:

recordSettings = @{
    AVEncoderAudioQualityKey : AVAudioQualityMin,
    AVFormatIDKey : @(kAudioFormatLinearPCM),
    AVEncoderBitRateKey : @16000,
    AVNumberOfChannelsKey : @1,
    AVSampleRateKey : @32000
}; 
like image 27
Rhythmic Fistman Avatar answered Sep 25 '22 23:09

Rhythmic Fistman