2014-02-20 4 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."

Итак, я просто комментарий эту строку и исправить !!

Я снова слышу звуковой сигнал в iPad Air! Зачем это случилось? Я еще не знал, но его работы и, возможно, у вас такая же проблема, и просто хочу оставить журнал об этом случае на этом веб-сайте.

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

  • Нет связанных вопросов^_^