AVAudioRecorder记录中有4秒滞后

时间:2011-10-19 02:55:26

标签: objective-c audio avaudiorecorder

我正在使用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)记录{

NSLog(@"Record");

//[audioRecorder prepareToRecord];

if (!audioRecorder.recording)

{

    NSLog(@"Record 2");

    [audioRecorder record];

    NSLog(@"Record 3");        

} 
     

}

记录是按下按钮时调用的功能。我知道prepareToRecord是通过'record'隐式调用的,但我想知道它是否会影响延迟。它没有。

这是控制台日志:

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来说太过分了吗? (iPhone 4)。我初始化错了吗?

3 个答案:

答案 0 :(得分:1)

我在iOS5 / iPhone4组合上看到了同样的问题。 iOS4和iPhone4S都很好。在旧硬件上使用新操作系统时似乎存在问题。我也尝试了很多设置组合。

初始化音频录制器时尝试设置AVAudioSession类别:

  

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

答案 1 :(得分:0)

我在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;

答案 2 :(得分:0)

我遇到了同样的问题。此外,由于我在播放和录制模式之间切换,这导致了长时间的延迟。但当我切换到播放和录制时,它拒绝在iPhone上使用扬声器,它只会使用耳机扬声器。

解决方案:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
                        sizeof(audioRouteOverride), &audioRouteOverride);