感谢您阅读我的问题。 :d
这是我的问题
我正在使用AVAudioRecorder将音频文件录制为Vocal资源,旨在在不同时间将声音插入我的视频。 但是当我将声音插入我的声乐轨道(AVMutableCompositionTrack)时出现错误,并且错误消息告诉我这个
Error Domain=AVFoundationErrorDomain
Code=-11800
"The operation could not be completed"
UserInfo={NSUnderlyingError=0x137104220
{Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"},
NSLocalizedFailureReason=An unknown error occurred (-12780),
NSLocalizedDescription=The operation could not be completed}
当我将声乐插入我的声乐轨道时,我使用的方式就像插入音乐曲目一样。这是我插入音乐曲目的代码
/*this is my testing code of inserting music track to my video project*/
self.musicTrack = [self.projectComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:3];
NSString *file = [[NSBundle mainBundle] pathForResource:@"Lost!" ofType:@"mp3"];
NSURL *musicURL = [NSURL fileURLWithPath:file];
AVURLAsset *music = [AVURLAsset assetWithURL:musicURL];
AVAssetTrack *musicTrack = [music tracksWithMediaType:AVMediaTypeAudio].firstObject;
NSError *err;
[self.musicTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale)) ofTrack:musicTrack atTime:CMTimeMakeWithSeconds(0, kCMTimeMaxTimescale) error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(15, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(5, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(20, kCMTimeMaxTimescale)
error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(24, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(30, kCMTimeMaxTimescale)
error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(0, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(45, kCMTimeMaxTimescale)
error:&err];
self.musicParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:self.musicTrack];
[self.musicParameters setVolume:.8f atTime:kCMTimeZero];
代码工作得很好
这是我插入人声的代码
self.vocalTrack = [self.projectComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:4];
self.vocalParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:self.vocalTrack];
NSError *err;
for (NSInteger i = 0; i < self.vocalResourceArray.count; i++) {
RAGE_VocalModel * vm = self.vocalResourceArray[i];
[self.vocalTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, vm.vocal_Duration) ofTrack:vm.vocal_AssetTrack atTime:vm.vocal_StartTime error:&err];
/*error caught from here*/
if (err) {
[self.vocalTrack removeTimeRange:CMTimeRangeMake(kCMTimeZero, vm.vocal_Duration)];
NSLog(@"Error during insert vocal track\nerr:%@",err);
}
}
[self.vocalParameters setVolume:1.f atTime:kCMTimeZero];
并且我使用相同的代码将我的视频声音插入目标音轨,工作正常。
所以当我录制我的音频文件时可能会出现问题?我的音频格式设置错误可能是什么?
这是我的录音设置
NSString * rec_id = [NSString stringWithFormat:@"%zd",arc4random()];
NSURL *recordingFile = [NSURL fileURLWithPath:[[TARGET_DIR stringByAppendingPathComponent:@"Records"] stringByAppendingPathComponent:[NSString stringWithFormat:@"R%@.aac",rec_id]]];
NSDictionary *setting = @{
AVFormatIDKey : @(kAudioFormatMPEG4AAC),
AVSampleRateKey : @44100,
AVNumberOfChannelsKey : @1,
AVEncoderAudioQualityKey : @(AVAudioQualityHigh),
};
我正在使用此
录制音频self.recorder = [[AVAudioRecorder alloc]initWithURL:recordingFile settings:setting error:&err];
和......好......工作正常,没有错误抓住。
无论如何,我试图检查沙盒中的音频文件,它可以在MAC OS / Windows上播放。
有关正在发生的事情的任何想法?这个问题在我看来差不多2个月了,仍然找到了解决方案。
的更新 的:
是否可以使用块?我正在使用块句柄格式化vocalModel
[RAGE_VocalModel vocalModelWithURL:recorder.url withCompleteHandle:^(RAGE_VocalModel *model) {
model.vocal_StartTime = Recording_Temp_Start_Time;
Recording_Temp_Start_Time = kCMTimeZero;;
[self.vocalResourceArray addObject:model];
NSLog(@"thread = %zd",[NSThread currentThread]);
}];
当我试图插入音乐曲目时,我会提醒我一些东西,我之前使用enumerateByBlock将每个源曲目插入到项目曲目中,并捕获了相同的错误(嗯......可能不完全相同,但仍然未知错误)在插入音乐曲目期间。
顺便说一句,音乐现在在我的应用包中,而声音文件在沙盒中。
我会在找到更多信息后立即更新我的问题。
更新#2
这不是块的错,我试图只使用alloc-init
然后在同一行设置我的vocal model.same问题的所有属性。
答案 0 :(得分:1)
在这里,我找到了一些关于我的问题的解决方案,以暂时解决我的问题的这一部分
无法插入要跟踪的资源
我发现,它可能是由于音频文件没有完成格式化,所以我只是在我的声乐模型中保存文件URL,当我将资源插入我的音频/声音/音乐曲目时,我只是加载一个临时AVURLAsset并输出音轨,然后插入到我的AVMutableCompositionTrack,它的工作非常好。
但我仍然相信它可能不是解决这个问题的最佳方法。
希望可以提供帮助。