2016-03-21 5 views
1

На самом деле я хочу записать аудио и сохранить в документе, у меня есть файловый файл и даже подключил аудиофайлы, но я хочу, чтобы прикрепить фактическое аудио в этот путь, он не работает, я пишу этот код в DidFinish как это.Делегаты AVAudioRecorderDelegate не звонят

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     self.navigationItem.title = @"Recording Area"; 
     [btnRecord setBackgroundImage:[UIImage imageNamed:@"Record.png"] forState:UIControlStateNormal]; 

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

     audioRecorder.delegate = self; 


     NSDate *today = [[NSDate alloc]init]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
     [dateFormatter setDateFormat:@"hh:mm:ss"]; 

     NSString *currentTime = [dateFormatter stringFromDate:today]; 

     NSString *outputPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; 

     outputPath = [outputPath stringByAppendingString:[NSString stringWithFormat:@"%@.m4a",currentTime]]; 

     NSMutableDictionary *recordDictionary = [[NSMutableDictionary alloc] init]; 

     [recordDictionary setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
     [recordDictionary setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
     [recordDictionary setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; 


     audioRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:outputPath] settings:recordDictionary error:nil]; 

     audioRecorder.meteringEnabled = YES; 
     [audioRecorder prepareToRecord]; 

    } 

and For Recording Audio 

    -(IBAction)onClickRecord:(id)sender 
{ 

    if(player.playing) 
    { 
     [player stop]; 
    } 


    if([[btnRecord backgroundImageForState:UIControlStateNormal]isEqual:[UIImage imageNamed:@"Record.png"]]) 
    { 

     if (!audioRecorder.recording) 

     { 
      AVAudioSession *session = [AVAudioSession sharedInstance]; 
      [session setActive:YES error:nil]; 


      [audioRecorder record]; 
      [btnRecord setBackgroundImage:[UIImage imageNamed:@"Pause.png"] forState:UIControlStateNormal]; 
     } 



    } 

    else if([[btnRecord backgroundImageForState:UIControlStateNormal]isEqual:[UIImage imageNamed:@"Pause.png"]]) 
    { 
     [audioRecorder pause]; 

     [btnRecord setBackgroundImage:[UIImage imageNamed:@"Record.png"] forState:UIControlStateNormal]; 
    } 




} 

для сохранения Это записи аудио

-(IBAction)onClickSave:(id)sender 
{ 
    [audioRecorder stop]; 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setActive:NO error:nil]; 


} 

И, наконец, что такое делегаты Где мой код не работает на самом деле я не в состоянии вызвать этот метод

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag 
{ 


    [btnRecord setBackgroundImage:[UIImage imageNamed:@"Record.png"] forState:UIControlStateNormal]; 
    [arrayFiles addObject:recorder.url.absoluteString]; 
    NSLog(@"Array %@",arrayFiles); 

} 

Поэтому, пожалуйста, укажите Я, где я неправ.

+0

убедитесь, что ваш audioRecorder имеет 'strong' ссылки –

+1

Вы установки делегата на аудио рекордер перед тем вы на самом деле создаете его – dan

+0

@property (сильный, неатомный) AVAudioRecorder * audioRecorder в h файле, который я создал ... –

ответ

2

Вы устанавливаете делегата Перед инициализацией AVAudioRecorder

Подведите audioRecorder.delegate = self; после инициализации

audioRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:outputPath] settings:recordDictionary error:nil]; 
audioRecorder.meteringEnabled = YES; 
audioRecorder.delegate = self; 

[audioRecorder prepareToRecord]; 
+0

Спасибо! Вы сэкономили много времени ... –

+0

Спасибо @dan, он тот, кто первым заметил это) –

Смежные вопросы