2014-02-20 37 views
0

我在Apple Store中有一個具有錄音功能的應用程序。我遷移到Xcode 5.0.2和SDK 7. 在iOS 6或7以外的設備上,除iPad Air外,我對此功能沒有任何問題。 這是我錄製聲音例行:在錄製聲音文件之後,iPad Air中只能聽到這個聲音

+(void) startRecording:(NSString *)fileName :(NSString *)fileType 
{ NSError* theError = nil; 
BOOL result = YES; 

// Init audio with record capability 
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
result = [audioSession setCategory:AVAudioSessionCategoryRecord error:&theError]; 
if (!result) 
{ 
    NSLog(@"setCategory failed %@", theError); 
} 
result = [audioSession setActive:YES error:nil]; 
if (!result) 
{ 
    NSLog(@"setActive failed %@", theError); 
} 

// Verify if you have granted to use microphone. iOS 7 or later 
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) { 
    [audioSession requestRecordPermission:^(BOOL granted) { 
     if (granted) { 
      // Record Sound 
      [self recordNow:fileName :fileType]; 
     } 
     else { 
      // Microphone disabled code 
      NSLog(@"Microphone is disabled.."); 

      // We're in a background thread here, so jump to main thread to do UI work. 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       [[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied" 
              message:@"This app requires access to your device's Microphone.\n\nPlease enable Microphone access for this app in Settings/Privacy/Microphone" 
              delegate:nil 
            cancelButtonTitle:@"Dismiss" 
            otherButtonTitles:nil] show]; 
      }); 
     } 
    }]; 
} 
else { // iOS 6 
    // Record sound 
    [self recordNow:fileName :fileType]; 
} 
} 

// Record Sound 
+(void) recordNow:(NSString *)fileName :(NSString *)fileType { 
recordEncoding = ENC_AAC; 

// Microphone enabled code 
if (kDebugMode) { 
    NSLog(@"Microphone is enabled.."); 
} 

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:16] forKey:AVEncoderBitRateKey]; 
    [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey:   AVEncoderAudioQualityKey]; 
} 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *recDir = [paths objectAtIndex:0]; 
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@.%@", recDir, fileName, fileType]];  
NSError *error = nil; 
audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error]; 

[audioRecorder recordForDuration:[[NSUserDefaults standardUserDefaults] integerForKey:kRecordForDuration]]; 

} 

回答

1

這個網站裏大量的研究後,我發現了一個很好的註釋,節省了我的日子在這裏: "Now that I've removed the AVEncoderBitRateKey and value, it also works on the 5S."

所以,我只是發表評論該行並修復它!

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

我可以再次聽到iPad Air中的錄音! 爲什麼發生這種情況?我還不知道,但它的作品,也許你有同樣的問題,只是想在這個網站留下關於這種情況下的日誌。