我正在尝试在屏幕的一小块区域播放视频并同时录制用户的歌声。但是似乎录制不成功。我为您添加了一些代码来指出可能的错误。
- (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");
}
我希望这是有道理的。流量似乎没有进入
audioRecorderDidFinishRecording
即使
[录音机停止];
请帮忙。自最近 3 天以来,我一直在寻找这个。但没有运气:(