2016-03-21 9 views
1

Eigentlich möchte ich die Audio aufnehmen und in Dokument speichern, habe ich FilePath und sogar angehängt die Audiodateien, aber ich möchte tatsächliche Audio in diesem Pfad, es funktioniert nicht, ich schreibe diesen Code in DidFinish gefällt das.Delegaten von AVAudioRecorderDelegate werden nicht

- (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]; 
    } 




} 

für das Speichern, die mit Audio Aufgenommen

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


} 

und das ist schließlich die Delegierten, wo mein Code nicht wirklich funktioniert ich nicht fähig bin Diese Methode

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


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

} 

So Geben Sie bitte aufrufen Ich, wo ich falsch liege.

+0

sicherstellen, dass Ihr Audiorecorder hat 'strong' Referenz –

+1

Sie die Einstellung der Delegierten auf dem Audio-Recorder vor Sie erstellen es tatsächlich – dan

+0

@property (stark, nicht atomare) AVAudioRecorder * audioRecorder in h Datei Ich habe dies erstellt .. –

Antwort

2

Sie die Delegierten setzen, bevor die AVAudioRecorder

Bewegen Sie den audioRecorder.delegate = self; nach init Initialisierung

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

[audioRecorder prepareToRecord]; 
+0

Vielen Dank! Du hast viel Zeit gespart ... –

+0

Danke @dan, er war derjenige, der das zuerst beobachtet hat) –

Verwandte Themen