2015-10-01 2 views
3

Я использую AVAudioRecorder для записи аудиофайла. Код, который я использую, отлично работает в iOS 8 и ниже, но с момента последнего обновления iOS 9 запись, похоже, перестала работать.AVAudioRecorder в iOS 9 Не работает

Я попытался войти свойства AVAudioRecorder объекта и даже после того, как вызов функции «запись» в AVAudioRecorderisRecording показывают, как NO и, когда функция «стоп» называется я получить вызов обратно в делегате - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag; с успехом flag as NO

audioSession = [AVAudioSession sharedInstance]; 
NSError *err = nil; 
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %ld %@", [err domain], (long)[err code], [[err userInfo] description]); 
    return; 
} 
[audioSession setActive:YES error:&err]; 

recordSetting = [[NSMutableDictionary alloc] init]; 

[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
[recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey]; 
[recordSetting setValue :[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey]; 
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 
[recordSetting setValue :[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey]; 

recorderFilePath = [NSString stringWithFormat:@"%@/%@.m4a", DOCUMENTS_FOLDER,@"sample"]; 

NSLog(@"RecorderFilePath : %@",recorderFilePath); 

NSURL *url = [NSURL fileURLWithPath:recorderFilePath]; 
err = nil; 
recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err]; 

//prepare to record 
[recorder setDelegate:self]; 
[recorder prepareToRecord]; 
recorder.meteringEnabled = YES; 

BOOL audioHWAvailable = audioSession.inputAvailable; 

[recorder record]; 

Пожалуйста, сообщите, если я делаю что-то неправильно в коде.

+0

Очень простая причина может быть: доступ к микрофону разрешено в настройках приложения Является ли? –

+0

Нет, я дважды проверил, что разрешение на доступ к микрофону включено. –

+0

Возникает ли проблема на устройстве, и если да, то какой? (iPad 1/2/3/4/Air ...?) –

ответ

2

Попробуйте это:

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

// Define the recorder setting 
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey, [NSNumber numberWithFloat:44100.0], AVSampleRateKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey,nil]; 


// [recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 

// Initiate and prepare the recorder 
if (recorderHelium) 
{ 
    recorderHelium = nil; 
} 

recorderHelium = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:recordedAudioFilePath] settings:recordSetting error:nil]; 
recorderHelium.delegate = self; 
recorderHelium.meteringEnabled = YES; 
[recorderHelium prepareToRecord]; 
[recorderHelium record]; 

, а также импорт и включают в себя следующие файлы:

#import <AudioToolbox/AudioServices.h> 
#include <AudioToolbox/AudioToolbox.h>