2014-07-04 2 views
3

보기 컨트롤러 (음성 메모)에 오디오를 녹음하고 있습니다. 이 작동합니다. 사용자가보기 컨트롤러를 닫지 않는 한 녹음 된 오디오를 재생할 수 있습니다. 사용자가 뷰 컨트롤러를 일축하고 AVAudioPlayer를 초기화하는, 다시보기 컨트롤러를 여는 경우AVAudioPlayer가 초기화되지 않는 이유는 무엇입니까? OSStatus 오류가 발생했습니다 (1685348671)?

그러나 나는 또한을 NSData와 플레이어 초기화하기 위해서 노력 1685348671.

OSStatus 오류와 함께 실패 NSData *data = [[NSData alloc] initWithContentsOfURL:_outputFileURL]; _player = [[AVAudioPlayer alloc] initWithData:data error:&error2];,하지만 그 것

나는 모든 튜토리얼을 따라했지만. 어떻게 든 나는 그것을 작동시키지 못한다. ... 이 오류는 잘못된 파일을 가리키는 것으로 보이지만, 확실하지는 않습니다. 그러나 Organizer에서 응용 프로그램을 다운로드하여 Mac에서 열면 파일을 재생할 수 있으므로 파일 자체가 손상되지 않습니다.

여기 내 기록 방법 :

- (IBAction)recordPauseTapped:(id)sender { 
    // Stop the audio player before recording 
    if (_player.playing) { 
     [_player stop]; 
    } 
    if (!_recorder.recording) { 
     AVAudioSession *session = [AVAudioSession sharedInstance]; 
     [session setActive:YES error:nil]; 

     // Start recording 
     [_recorder record]; 
     [recordPauseButton setTitle:@"Pause" forState:UIControlStateNormal]; 

    } else { 

    // Pause recording 
     [_recorder pause]; 
     [recordPauseButton setTitle:@"Aufnahme" forState:UIControlStateNormal]; 
    } 

    [stopButton setEnabled:YES]; 
    [playButton setEnabled:NO]; 
} 

녹음 작업, 파일은 문서 디렉토리에 존재한다. 여기

이 파일을 사용자없이 뷰 컨트롤러 떠나와, 직전에 촬영 한 경우 작동 내 플레이 방법입니다 : 여기

- (IBAction)playTapped:(id)sender { 
    if (!_recorder.recording){ 

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

     NSError *error; 
     BOOL success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 
     if(!success) 
     { 
      NSLog(@"error doing outputaudioportoverride - %@", [error localizedDescription]); 
     } 

     NSError *error2; 
     NSLog(@"_outputFileURL: %@", _outputFileURL); 

     _player = [[AVAudioPlayer alloc] initWithContentsOfURL:_outputFileURL error:&error2]; 
     if (error2) { 
      NSLog(@"error initialising player - %@", [error2 localizedDescription]); 
     } 
     [_player setDelegate:self]; 
     [_player play]; 
    } 
} 

그리고 나의 viewDidLoad에 있습니다 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.translucent = NO; 

    [stopButton setEnabled:NO]; 

    // Set the audio file 
    if ([_audioFileName isEqualToString:@""]) { 
     NSString *guid = [[NSUUID new] UUIDString]; 
     _audioFileName = [NSString stringWithFormat:@"audio-%@.m4a", guid]; 
     [playButton setEnabled:NO]; 
    } else { 
     [playButton setEnabled:YES]; 
    } 
    NSLog(@"_audioFileName: %@", _audioFileName); 
    NSArray *pathComponents = [NSArray arrayWithObjects: 
          [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], 
          _audioFileName, 
          nil]; 
    _outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

    // Setup audio session 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
    [session setActive:YES error:nil]; 

    // Define the recorder setting 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

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

    // Initiate and prepare the recorder 
    _recorder = [[AVAudioRecorder alloc] initWithURL:_outputFileURL settings:recordSetting error:nil]; 
    _recorder.delegate = self; 
    _recorder.meteringEnabled = YES; 
    [_recorder prepareToRecord]; 
} 

답변

1

귀하 문제는 [_recorder prepareToRecord]가 있다는 것입니다. viewLoad에 삽입하면 이고 뷰 컨트롤러를로드 할 때마다 덮어 씁니다. 이 동작을 원하지 않으면이 줄을 제거하고 예 : recordPauseTapped의 맨 앞에 넣어야합니다. 문제가 해결되어야합니다.

관련 문제