Я пытаюсь воспроизвести видео в небольшой области экрана и записать пение пользователя в одно и то же время. однако кажется, что запись не удалась. Я добавил код для вас, чтобы указать на возможные ошибки.Невозможно воспроизвести 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");
}
Надеюсь, это имеет смысл. Поток, кажется, не вводить
audioRecorderDidFinishRecording
даже после того, как
[audioRecorder остановки];
помогите пожалуйста. Я ищу это с последних 3 дней. но не повезло :(
Да, это работает, но, видимо, он также записывает аудио от видео, в то время как наушники подключены. Не только записи микрофона. – ScarletWitch
Спасибо, помощник. Вы решили мой случай, который взял как минимум 2 дня я плохо могу. Я бы хотел, чтобы вы больше любили. –