iPhone SDK AVAudioRecorder задержка перед записью - PullRequest
6 голосов
/ 13 апреля 2011

Я использую AVAudioRecorder для захвата звука с микрофона. Проблема, с которой я сталкиваюсь, заключается в следующем: в первый раз, когда я начинаю запись, между передачей диктофона и его фактическим запуском задержка составляет 2 секунды. Последующие записи звонков выполняются намного быстрее. Здесь есть какие-то очевидные ошибки? Что я могу сделать, чтобы ускорить время, необходимое для начала начальной записи.

Я инициализировал рекордер в viewDidLoad:

- (void)viewDidLoad
{
    NSString *fileName = @"test.aiff";
    [super viewDidLoad];

    NSString *docsDir = [NSSearchPathForDirectoriesInDomains(
                    NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *soundFile = [docsDir
                               stringByAppendingPathComponent:fileName];

    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFile];

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

    NSError *error = nil;

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

Затем, когда я готов, я запускаю рекордер, вызывая мой метод startRecoring:

-(void) startRecording{
    NSLog(@"Trying to start Recording");
    [audioRecorder record];
    NSLog(@"Recording started");
} 

Вот вывод журнала, и вы можете видеть, что между двумя вызовами NSLog примерно 2,5 секунды. В первый раз нажал, но не в другой раз:

First recorder call    
2011-04-13 15:41:47.495 AudioRecorderTest[6570:207] Trying to start Recording
2011-04-13 15:41:49.869 AudioRecorderTest[6570:207] Recording started

Next Recorder Call
2011-04-13 15:42:49.236 AudioRecorderTest[6570:207] Trying to start Recording
2011-04-13 15:42:49.246 AudioRecorderTest[6570:207] Recording started

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

Создает аудиофайл в месте, указанном параметром url в initWithURL: settings: error: method.Если файл уже существует в этом месте, этот метод перезаписывает его.

Подготовка, вызываемая этим методом, выполняется автоматически при вызове записи.Используйте prepareToRecord, если вы хотите, чтобы запись начиналась как можно быстрее после вызова записи.

попробуйте позвонить prepareToRecord после инициализации аудиорекордера

0 голосов
/ 03 ноября 2011

После инициализации рекордера, в дополнение к prepareToRecord, попробуйте вставить:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;

[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err) {
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}
[audioSession setActive:YES error:&err];
if(err){
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 
...