2
我正试图在屏幕的一个小区域播放视频,并同时录制用户的歌声。但是,它似乎记录不成功。 我已经添加了一些代码给你,指出可能的失误。不能同时播放MPMoviePlayerController和通过AVAudioRecorder录制?
- (void)viewDidLoad
{
[super viewDidLoad];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSString *soundFilePath = [docsDir
stringByAppendingPathComponent:@"sound.caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMedium],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt: 2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatLinearPCM],
AVFormatIDKey,
nil];
NSError *error = nil;
[audioRecorder setDelegate:self];
audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
if (error)
{
NSLog(@"error: %@", [error localizedDescription]);
} else {
[audioRecorder prepareToRecord];
}
[self initialiseVideo];
}
- (void) initialiseVideo
{
[audioRecorder record];
NSString *videoName = @"Medium";
NSString *path = [[NSBundle mainBundle] pathForResource:videoName ofType:@"mp4"];
if (path) {
NSURL *url = [NSURL fileURLWithPath:path] ;
moviePlayer =[[MPMoviePlayerController alloc] initWithContentURL:url];
moviePlayer.scalingMode = MPMovieScalingModeFill;
[moviePlayer setControlStyle:MPMovieControlStyleNone];
[moviePlayer setFullscreen:NO];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];
[[moviePlayer view] setFrame:CGRectMake(58, 166, 197, 124)];
}
[moviePlayer play];
}
#pragma mark -
#pragma mark MPMoviePlayerController Delegate
#pragma mark -
- (void) moviePlayBackDidFinish:(NSNotification*)aNotification
{
[submitButton setUserInteractionEnabled:YES];
[audioRecorder stop] ;
[moviePlayer.view removeFromSuperview];
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
{
NSLog (@"audioRecorderDidFinishRecording:successfully:");
NSLog(@"%@", aRecorder.url);
NSLog(@"%@", aRecorder.description);
// your actions here
}
-(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder
error:(NSError *)error
{
NSLog(@"Encode Error occurred");
}
-(IBAction)playAudio:(id)sender
{
if (!audioPlayer.playing)
{
if (audioPlayer)
[audioPlayer release];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:audioRecorder.url
error:&error];
audioPlayer.delegate = self;
if (error)
NSLog(@"Error: %@",
[error localizedDescription]);
else
[audioPlayer play];
}
else
{
}
}
#pragma mark -AV delegate methods
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
}
-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
NSLog(@"Decode Error occurred");
}
我希望这是有道理的。流动似乎并不即使
[audioRecorder停止]进入
audioRecorderDidFinishRecording
;
请大家帮忙。我从过去3天开始搜索这个。但没有运气:(
是的,这工作,但显然它也记录音频从耳机插入时的视频,而不仅仅是麦克风录音。 – ScarletWitch 2013-05-14 07:40:54
感谢队友..你已经解决了我的情况,花了至少2天ays很糟糕..我希望你能多点赞扬。 – 2013-08-03 07:26:44