4-секундное отставание в записи AVAudioRecorder - PullRequest
3 голосов
/ 19 октября 2011

Я использую AVAudioRecorder для записи звука, но у меня 4-секундная задержка между нажатием кнопки и началом записи.

Вот мой установочный код:

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:

                                    [NSNumber numberWithFloat: 16000.0],AVSampleRateKey,
                                    [NSNumber numberWithInt: kAudioFormatAppleIMA4],AVFormatIDKey,
                                    [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                    [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,nil];

    NSError *error = nil;

    audioRecorder = [[AVAudioRecorder alloc]
                     initWithURL:soundFileURL
                     settings:recordSettings
                     error:&error];
    if (error)
    {
        NSLog(@"error: %@", [error localizedDescription]);

    } else {
        NSLog(@"prepare to record");
        [audioRecorder prepareToRecord];
    }

- (void) record {

NSLog(@"Record");

//[audioRecorder prepareToRecord];

if (!audioRecorder.recording)

{

    NSLog(@"Record 2");

    [audioRecorder record];

    NSLog(@"Record 3");        

} 

}

Запись - это функция, вызываемая при нажатии кнопки.Я знаю, что prepareToRecord вызывается неявно через «запись», но я хотел посмотреть, повлияет ли это на задержку вообще.Это не так.

Вот журнал консоли:

2011-10-18 21:48:06.508 [2949:707] Record
2011-10-18 21:48:06.509 [2949:707] Record 2
2011-10-18 21:48:10.047 [2949:707] Record 3

До начала записи осталось около 3,5 секунд.

Эти настройки слишком велики для iPhone?(Ай фон 4).Я неправильно его инициализирую?

Ответы [ 3 ]

1 голос
/ 01 ноября 2011

Я вижу ту же проблему в комбо iOS5 / iPhone4.iOS4 и iPhone4S в порядке.Кажется, есть проблема при использовании новой ОС на старом оборудовании.Я также перепробовал множество комбинаций настроек.

Попробуйте установить категорию AVAudioSession при инициализации устройства записи звука:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord ошибка:ноль];

0 голосов
/ 23 мая 2012

У меня была такая же проблема. Кроме того, поскольку я переключался между режимами воспроизведения и записи, это постоянно вызывало большие задержки. Но когда я переключился на Play and Record, он отказался использовать громкоговоритель на iPhone, он использовал бы только динамик гарнитуры.

Решение:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
                        sizeof(audioRouteOverride), &audioRouteOverride);
0 голосов
/ 08 февраля 2012

У меня была та же проблема на iPod touch 4-го поколения (iOS4, iOS5 и JailBreak - я использовал больше устройств), и на разных устройствах он работает по-разному, но я думаю, что @Charles Chase прав, это зависит от iOS устройства, которым вы являетесьтестирование на.Ваш словарь recordSettings в порядке, код также выглядит правильно, за исключением одной вещи, которую вы должны добавить:

audioRecorder.delegate = self;

сразу после того, как вы выделите и запустите регистратор:

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

    audioRecorder.delegate = self;
...