2014-04-25 2 views
3

AVFoundation 프레임 워크에 문제가 있습니다. 내 응용 프로그램은 모두 이전 버전에서 만든 준비가되어있다. 그리고 이번에는 오디오 레코더가 시뮬레이터에서 작동하지만 아이폰에서는 작동하지 않는다. 그래서 아무도 실제 문제가 뭔지 도와주세요.iOS 7에서 iphone으로 오디오 레코더가 작동하지 않습니다.

내 코드는 다음과

-(IBAction)startRecording 
{ 
    btnRecord.showsTouchWhenHighlighted = YES; 
    btnRecord.enabled = NO; 
    btnPlay.enabled = NO; 
    btnStop.enabled = YES; 
    btnPause.enabled = YES; 
    btnDelete.enabled = NO; 
    if(!flagPause) 
    { 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"yyyy-MM-dd"]; 

     NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init]; 
     [timeFormat setDateFormat:@"HH.mm.SS"]; 

     NSDate *now = [[NSDate alloc] init]; 

     theDate = [dateFormat stringFromDate:now]; 
     theTime = [timeFormat stringFromDate:now]; 


     NSString *filename =[NSString stringWithFormat:@"|%@|%@|",theDate,theTime]; 
     theDate=[[NSString alloc]initWithString:filename]; 


     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setCategory:AVAudioSessionCategoryRecord error:nil]; 

     ***** i try this one but not working 
     //[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
     //[audioSession setActive:YES error:nil]; 


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

     if(recordEncoding == ENC_PCM) 
     { 
      [recordSettings setObject:[NSNumber numberWithInt: kAudioFormatLinearPCM] forKey: AVFormatIDKey]; 
      [recordSettings setObject:[NSNumber numberWithFloat:44100.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]; 

      //**************** I try this one ***********************>>>> 
      //[recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; 

      [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 

      [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey]; 
     } 
     NSURL *url; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 
     NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Recording"]; 
     if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
      [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; 

     NSString *filePath =[NSString stringWithFormat:@"%@/%@.caf",dataPath,theDate]; 
     // appiPhone.strATitle = theDate; 
     url = [NSURL fileURLWithPath:filePath]; 
     NSError *error = nil; 

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

     if ([audioRecorder prepareToRecord] == YES) 
     { 
      [audioRecorder record]; 
     } 
     else 
     { 
      //int errorCode = CFSwapInt32HostToBig ([error code]); 
      // NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode);  
     } 
    } 
    else 
    { 
     [audioRecorder record]; 
     flagPause = NO; 
    } 
    //appiPhone.intBtnAnsTag = 1; 
} 
+0

에서라고? 그렇지 않으면 그 상태를 유지합니다. 1. 녹음 품질이 향상됩니다. – Yogi

+0

당신이 소리를들을 수는 없지만 아마도 녹음 ... 시뮬레이터에서 작동하면 녹음 된 소리를 iphone 이어폰 스피커에 들려 줄 때 들어보십시오. –

+0

6과 7의 차이점 중 하나는 액세스 권한이 필요하다는 것입니다 마이크. 앱에 대한 권한을 부여 받았는지 확인하십시오. 설정 -> 개인 정보 -> 마이크를 확인하십시오. – MDB983

답변

0

내가 최근에 (문자로 불과 3 버튼은 당신이 기대하는 일을) 매우 간단한 놀이와 기록 데모를 개발 한 것입니다. 처음에는 동일한 문제가 발생했습니다 : iOS 시뮬레이터에서는 작동하지만 내 장치에서는 작동하지 않습니다. > 개인 정보 보호 - -> 마이크

나는 또한에했다가

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

아래 내 오디오 레코더를 설정하기 전에 다음과 같은 코드를 가지고 우선 앱 설정으로 이동하여 마이크를 사용할 수있는 권한을 가지고 있는지 확인했다 내 슈퍼 간단한 데모의 전체 코드입니다. AudioPlayer 및 AudioRecorder이이 질문에 대한 대답은 아니지만 내 관찰에 따라 당신은 당신의 필요를 명확히 할 수 2로 AVNumberOfChannelsKey 설정 한 .H

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
    [session setActive:YES error:nil]; 
    NSDictionary *audioSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:44100],AVSampleRateKey,[NSNumber numberWithInt:kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber numberWithInt:1],AVNumberOfChannelsKey, [NSNumber numberWithInt:AVAudioQualityMedium], AVEncoderAudioQualityKey, nil]; 

    NSURL *audioFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"audioRecording.m4a"]]; 

    self.audioRecorder = [[AVAudioRecorder alloc]initWithURL:audioFileURL settings:audioSettings error:nil]; 

    [super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)audioRecord:(id)sender { 

    [self.audioRecorder record]; 
} 

- (IBAction)audioStop:(id)sender { 
    [self.audioPlayer stop]; 
    [self.audioRecorder stop]; 

    NSURL *audioFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:@"audioRecording.m4a"]]; 
    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil]; 
} 

- (IBAction)audioPlay:(id)sender { 

    [self.audioPlayer play]; 
} 
@end 
관련 문제