iPhone SDK AVAudioRecorder 录制前的延迟

Posted

技术标签:

【中文标题】iPhone SDK AVAudioRecorder 录制前的延迟【英文标题】:iPhone SDK AVAudioRecorder delay before recording 【发布时间】:2011-04-13 19:48:02 【问题描述】:

我正在使用 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");
 

这是 Log 输出,您可以看到两次 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

【问题讨论】:

【参考方案1】:

在该位置创建一个音频文件 由 url 参数指定 initWithURL:settings:error: 方法。如果 一个文件已经存在 位置,此方法会覆盖它。

此方法调用的准备工作 当你自动发生 通话记录。使用 prepareToRecord 时 您希望尽快开始录制 尽可能根据通话记录。

在初始化录音机后尝试调用prepareToRecord

【讨论】:

【参考方案2】:

初始化记录器后,除了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); 

【讨论】:

以上是关于iPhone SDK AVAudioRecorder 录制前的延迟的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iOS 6 sdk 为 iPhone 4s 或 iPhone 4 制作视图控制器?

iPhone:Airplay SDK有啥用?

MAP 与 iPhone 3.0 SDK 一起使用都有哪些限制?

我在哪里可以获得 iPhone 2.0 SDK?

Iphone 4 sdk - 如何确定 applicationWillEnterForeground 是不是因通知而被触发?

在iPhone 3.0 SDK中改变了渐变技巧?