我的iPhone應用程序使用「AVAudioRecorder」進行錄音。它還使用「UIImagePickerController」記錄電影和「MPMoviePlayerController」播放電影。AVAudioRecorder不會記錄IF電影以前錄製和播放
一切工作正常,直到我做三件事成一排:
- 錄製電影中使用的UIImagePickerController
- 播放使用的MPMoviePlayerController
- 嘗試撥打語音使用記錄AVAudioRecorder 錄製的動畫
當我在步驟3中調用AVAudioRecorder的「記錄」方法時,它返回NO指示失敗,但沒有提示爲什麼(來自Appl e!)AVAudioRecorder的audioRecorderEncodeErrorDidOccur委託方法永遠不會被調用,並且在設置錄像機時我不會收到其他錯誤。
我的第一個猜測是電影錄製/播放正在修改「AVAudioSession」的共享實例,使得它阻止了錄音機的工作。但是,我手動將AVAudioSession的category屬性設置爲「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!");
}
有沒有人碰到這個問題?
謝謝,我遇到了同樣的問題,無法弄清楚發生錯誤的時間! – 2011-08-27 16:51:55
謝謝,它有幫助。 – 2013-02-14 07:02:27