iOS: формат файла аудиозаписи

Я реализую аудиозапись. Он отлично работает с форматом caf и wave. Но проблема в том, что размер файла слишком велик.

Итак, может ли кто-нибудь помочь мне для записи звука в формате, который также воспроизводится в окне, а размер файла немного меньше.

Код, который я пробовал, приведен ниже:

 dirPaths = NSSearchPathForDirectoriesInDomains(
                                                    NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
     NSString *soundFilePath = [docsDir
                                stringByAppendingPathComponent:@"sound.wave"];
     NSLog(@"%@",soundFilePath);
     NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

     NSDictionary *recordSettings = [NSDictionary 
                         dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithInt:AVAudioQualityMin],
                                     AVEncoderAudioQualityKey,
                                     [NSNumber numberWithInt:16], 
                                     AVEncoderBitRateKey,
                                     [NSNumber numberWithInt: 2], 
                                     AVNumberOfChannelsKey,
                                     [NSNumber numberWithFloat:8000.0], AVSampleRateKey,
                                     [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey,
                                     nil];

     NSError *error = nil;

     audioRecorder = [[AVAudioRecorder alloc]
                      initWithURL:soundFileURL
                      settings:recordSettings
                      error:&error];

     if (error)
     {
         NSLog(@"error: %@", [error localizedDescription]);

     } else {
        [audioRecorder prepareToRecord];
     }

person user1673099    schedule 15.09.2012    source источник
comment
дубликат stackoverflow.com/questions /4279311/?   -  person nneonneo    schedule 15.09.2012
comment
Запись в формате m4a (MPEG-4 AAC). См. stackoverflow.com/questions/ 4279311/ для получения подробной информации.   -  person nneonneo    schedule 15.09.2012


Ответы (2)


Я также пытался использовать AVAudioRecorder для записи звука в кодированном формате AAC, предпочтительно в файле .m4a. Мне удалось быстро получить код для записи в AAC внутри основного аудиофайла (.caf), но я не смог заставить AVAudioRecorder правильно форматировать .m4a. Я как раз собирался переписать код записи в своем приложении, используя API Audio Units более низкого уровня, но вместо этого я отложил это на задний план и добавил код для обработки общего аудиосеанса. Как только это было настроено, я вернулся и попытался сохранить как .m4a, и это просто сработало.

Вот пример кода:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
NSURL *tmpFileUrl = [NSURL fileURLWithPath:[docsDir stringByAppendingPathComponent:@"tmp.m4a"]];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                        [NSNumber numberWithFloat:16000.0], AVSampleRateKey,
                        [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                        nil];
NSError *error = nil;
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:tmpFileUrl settings:recordSettings error:&error];
[recorder prepareToRecord];

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:nil];
[session setActive:YES error:nil];

[recorder record];

Затем, чтобы закончить запись, я использовал:

[recorder stop];
AVAudioSession *session = [AVAudioSession sharedInstance];
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation;
[session setActive:NO withFlags:flags error:nil];

Затем файл в 'tmpFileUrl' можно использовать по своему усмотрению.

person Scott Miller    schedule 02.10.2012
comment
setActive: withFlags: error: устарел после iOS 6. Вместо этого мы можем использовать setActive: error: (без установки флагов). Он отлично работает для меня. - person Vineeth; 10.12.2013
comment
Изменение с kAudioFormatMPEG4AAC на kAudioFormatMPEG4AAC изменяет размер файла с 1,3 МБ до 45 КБ. - person Thiru; 16.04.2015
comment
Кто-нибудь пробовал это с iOS10? Запись полностью искажена, если есть хоть какой-то заметный уровень. - person Aron Nelson; 24.10.2016

Вот мои настройки для высокого качества и небольшого размера файла (в балансе):

NSDictionary *recordSettings = @{AVEncoderAudioQualityKey: @(AVAudioQualityMedium),
                                 AVFormatIDKey: @(kAudioFormatMPEG4AAC),
                                 AVEncoderBitRateKey: @(128000),
                                 AVNumberOfChannelsKey: @(1),
                                 AVSampleRateKey: @(44100)};

Это дает вам моно трек AAC с качеством компакт-диска. Вы должны добавить файл с расширением .m4a, чтобы его можно было читать везде. Все остальные параметры устанавливаются на значения по умолчанию для устройства, что и требуется в большинстве случаев.

person Matjan    schedule 01.07.2013
comment
Опять же, раньше это работало нормально, но теперь искажено с iOS10, если есть какой-либо заметный уровень. Использование iPad Pro - person Aron Nelson; 24.10.2016