2011-10-19 63 views
3

我正在使用AVAudioRecorder錄製音頻,但我正在經歷按鈕按下和開始錄製之間的4秒延遲。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是通過'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)。我初始化它錯了嗎?

回答

1

我在iOS5/iPhone4組合上看到了同樣的問題。 iOS4和iPhone4S都很好。在舊硬件上使用新操作系統似乎存在問題。我也嘗試過很多設置組合。

嘗試將AVAudioSession類別,當你初始化錄音機:

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

0

我對iPod的同樣的問題touch第4代(iOS4的,的iOS5和越獄 - 我用更多的設備),並在不同設備上它運行不同,但我認爲@Charles Chase是正確的,它取決於您正在測試的設備的iOS。你recordSettings字典是好的,代碼也期待權,除了一件事,你需要補充一點:

audioRecorder.delegate = self; 

你的alloc後立即和init刻錄機:

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

    audioRecorder.delegate = self; 
0

我有同樣的問題。另外,由於我在「回放」和「錄製」模式之間切換,這會不斷造成長時間的延遲。但是當我切換到播放並錄製時,它拒絕在iPhone上使用揚聲器,它只會使用耳機揚聲器。

解決方案:

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