AVAudioRecorder не записывает, когда экран заблокирован - PullRequest
1 голос
/ 29 марта 2012

Я пытался преодолеть это некоторое время.Я пытаюсь записать звук, но AVAudioRecorder не записывает, пока экран заблокирован.Он продолжает записывать, когда экран разблокирован, но звук, записанный, когда экран был заблокирован, теряется навсегда.Я не могу найти ничего плохого в том, что я делаю:

-(void) startRecording
{
    // Begin the recording session.
    _session = [AVAudioSession sharedInstance];
    NSError *setCategoryError = nil;

    NSError *startRecordError;
    [_session setActive:YES error:&startRecordError];
    [self GKLog:[NSString stringWithFormat:@"recorder session error? :%@", startRecordError]];

    [_session  setCategory: AVAudioSessionCategoryRecord  error: &setCategoryError];

    if (setCategoryError) { NSLog(@"some error");}

    //set me as delegate    
    _session.delegate=(id <AVAudioSessionDelegate>) self;

    NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
    [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
    [recordSetting setValue :[NSNumber numberWithInt:8]                               forKey:AVEncoderBitRateKey];
    [recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];

    if (!self.currentPath)
    {
        NSLog(@"can't record, no path set!");
        return;
    }

    NSError *error;
    NSURL *url=[NSURL fileURLWithPath:self.currentPath];

    //Setup the recorder to use this file and record to it.
    _recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error];
    [self GKLog:[NSString stringWithFormat:@" recorder:%@",_recorder]];

    _recorder.delegate=(id <AVAudioRecorderDelegate>) self;
    [_recorder prepareToRecord];

    //Start the actual Recording
    [_recorder record];

}

Есть идеи, пожалуйста?

Ответы [ 3 ]

4 голосов
/ 30 марта 2012

Хорошо, поэтому ответ на мой собственный вопрос, который потребовал у меня много времени, заключается в следующем: код, который я разместил, хорош, но для работы он должен работать в фоновом режиме после блокировки экрана. Для этого нужно добавить массив UIBackgroundModes в plist-файл приложения и добавить «audio» в качестве одного из его объектов. Это говорит системе, что приложение должно работать со звуком в фоновом режиме.

Вот не так легко найти документацию . К сожалению, Apple не указывает, что в их документации категории аудио-сессий, где они утверждают, что определенные категории работают в фоновом режиме. В любом случае, надеюсь, этот ответ будет доступен для тех, у кого есть похожая проблема ...

0 голосов
/ 29 марта 2012

Возможно, вы захотите установить категорию как AVAudioSessionCategoryRecord для AudioSession

0 голосов
/ 29 марта 2012

Как насчет отключения блокировки экрана, пока вы не закончите запись?

[UIApplication sharedApplication].idleTimerDisabled = YES;

// Do recording here

[UIApplication sharedApplication].idleTimerDisabled = NO;

Только не забудьте снова включить блокировку экрана, когда закончите!

...