В моем приложении для iPhone для записи голоса используется программа «AVAudioRecorder». Он также использует «UIImagePickerController» для записи фильмов и «MPMoviePlayerController» для воспроизведения фильмов.
Все работает нормально, пока я не сделаю все три вещи подряд:
Когда я вызвать "запись" AVAudioRecorder на шаге 3 он возвращает NO, указывая на сбой, но не дает никаких подсказок относительно того, почему (давай, Apple!) Метод делегата audioRecorderEncodeErrorDidOccur AVAudioRecorder никогда не вызывается, и я не получаю никаких других ошибок при настройке записывающего устройства.
Мое первое предположение было что при записи / воспроизведении фильма был изменен общий экземпляр «AVAudioSession» таким образом, что это препятствовало работе устройства записи звука. Однако я вручную устанавливаю для свойства категории AVAudioSession значение «AVAudioSessionCategoryRecord» и делаю аудиосеанс активным перед попыткой записи.
Вот мой метод создания записывающего устройства:
- (void)createAudioRecorder
{
NSError *error = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:&error];
if (error)
...
[audioSession setActive:YES error:&error];
if (error)
...
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
// General Audio Format Settings
[settings setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[settings setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
// Encoder Settings
[settings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
[settings setValue:[NSNumber numberWithInt:96] forKey:AVEncoderBitRateKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitDepthHintKey];
// Write the audio to a temporary file
NSURL *tempURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"Recording.m4a"]];
audioRecorder = [[AVAudioRecorder alloc] initWithURL:tempURL settings:settings error:&error];
if (error)
...
audioRecorder.delegate = self;
if ([audioRecorder prepareToRecord] == NO)
NSLog(@"Recorder fails to prepare!");
[settings release];
}
И вот мой способ начать запись:
- (void)startRecording
{
if (!audioRecorder)
[self createAudioRecorder];
NSError *error = nil;
[[AVAudioSession sharedInstance] setActive:YES error:&error];
if (error)
...
BOOL recording = [audioRecorder record];
if (!recording)
NSLog(@"Recording won't start!");
}
] Кто-нибудь сталкивался с этой проблемой раньше?