2011-10-29 34 views
-1

可能重复之前3秒的延迟:
Delay in Recording using avaudiorecorderavaudiorecorder示出开始记录

我使用的ios5上Xcode4运行的应用程序,并面临的一个问题存在是3的延迟秒按下记录按钮以实际开始记录。我搜索了每个地方,并没有找到任何好的解决方案。

下面是代码

-(void) recordBtnClick:(UIButton *)sender 

    {  

     if (!recordBtn && !playBtn) 
     { 
      NSLog(@"recording pressed"); 

      [recordButton setBackgroundImage:[UIImage imageNamed:@"stop.png"]    forState:UIControlStateNormal]; 

      recordBtn=YES; 

     //startRecording; 

     // Init audio with record capability 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setCategory:AVAudioSessionCategoryRecord error:nil]; 

     NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:10]; 

    if(recordEncoding == ENC_PCM) 
     { 
     [recordSettings setObject:[NSNumber numberWithInt: kAudioFormatLinearPCM] forKey: AVFormatIDKey]; 
     [recordSettings setObject:[NSNumber numberWithFloat:16000.0] forKey: AVSampleRateKey]; 
     [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; 
     [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
     [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
     [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 
    } 
    else 
    { 
     NSNumber *formatObject; 

     switch (recordEncoding) { 
      case (ENC_AAC): 
       formatObject = [NSNumber numberWithInt: kAudioFormatMPEG4AAC]; 
       break; 
      case (ENC_ALAC): 
       formatObject = [NSNumber numberWithInt: kAudioFormatAppleLossless]; 
       break; 
      case (ENC_IMA4): 
       formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; 
       break; 
      case (ENC_ILBC): 
       formatObject = [NSNumber numberWithInt: kAudioFormatiLBC]; 
       break; 
      case (ENC_ULAW): 
       formatObject = [NSNumber numberWithInt: kAudioFormatULaw]; 
       break; 
      default: 
       formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; 
     } 

     [recordSettings setObject:formatObject forKey: AVFormatIDKey]; 
     [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey]; 
     [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; 
     [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; 
     [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
     [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey]; 
    } 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *recDir = [paths objectAtIndex:0]; 
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audio%d.wav",recDir,nextCount]]; 

    NSError *error = nil; 
    audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error]; 
    audioRecorder.delegate=self; 
    if(!audioRecorder){ 
     NSLog(@"recorder: %@ %d %@", [error domain], [error code], [[error userInfo] description]); 
     UIAlertView *alert = 
     [[UIAlertView alloc] initWithTitle: @"Warning" 
            message: [error localizedDescription] 
            delegate: nil 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
     return; 
    } 

    //prepare to record 
    [audioRecorder prepareToRecord]; 
    //audioRecorder.meteringEnabled = YES; 

    BOOL audioHWAvailable = audioSession.inputIsAvailable; 
    if (! audioHWAvailable) { 
     UIAlertView *cantRecordAlert = 
     [[UIAlertView alloc] initWithTitle: @"Warning" 
            message: @"Audio input hardware not available" 
            delegate: nil 
         cancelButtonTitle:@"OK" 
         otherButtonTitles:nil]; 
     [cantRecordAlert show]; 
     [cantRecordAlert release]; 
     return; 
    } 
    [audioRecorder recordForDuration:(NSTimeInterval) 25]; 


    NSLog(@"recording"); 
    // ---------------- record code finished ----------------// 
    }else{ 
    [recordButton setBackgroundImage:[UIImage imageNamed:@"record.png"] forState:UIControlStateNormal]; 
    recordBtn=NO; 
    [audioRecorder stop]; 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 


    } 

} 
+0

不要只是重新发布您的问题,而不添加任何其他信息。解决您在第一次提问时提出的问题。 –

+0

实际上是一个关闭的收割机,我没有得到任何帮助表单,所以我决定开一个新的问题。 –

回答

1

做准备记录并显示您的应用程序的记录按钮之前才要求所有的初始化。

+0

其基于页面的应用程序,所以我必须在每个页面上独特地录制声音,因为每次用户触摸录制按钮时都必须调用初始化过程! –

+1

无需复制音频会话或记录初始化代码。 – hotpaw2

+0

如果我在applicationDidFinishLunching或viewDidLoad方法中初始化记录代码,那么只有我第一次记录声音之后,它才会记录任何内容。 –